PHP - конвертировать путь файловой системы в URL - PullRequest
25 голосов
/ 06 августа 2009

Я часто нахожу, что в моих проектах есть файлы, к которым нужно обращаться как из файловой системы, так и из браузера пользователя. Одним из примеров является загрузка фотографий. Мне нужен доступ к файлам в файловой системе, чтобы я мог использовать GD для изменения изображений или их перемещения. Но мои пользователи также должны иметь возможность доступа к файлам с URL-адреса, например example.com/uploads/myphoto.jpg.

Поскольку путь загрузки обычно соответствует URL, я создал функцию, которая, кажется, работает большую часть времени. Возьмите эти пути, например:

Файловая система /var/www/example.com/uploads/myphoto.jpg

URL http://example.com/uploads/myphoto.jpg

Если бы у меня была переменная, установленная на что-то вроде /var/www/example.com/, я мог бы вычесть ее из пути файловой системы и затем использовать в качестве URL-адреса изображения.

/**
 * Remove a given file system path from the file/path string.
 * If the file/path does not contain the given path - return FALSE.
 * @param   string  $file
 * @param   string  $path
 * @return  mixed
 */
function remove_path($file, $path = UPLOAD_PATH) {
    if(strpos($file, $path) !== FALSE) {
        return substr($file, strlen($path));
    }
}

$file = /var/www/example.com/uploads/myphoto.jpg;

print remove_path($file, /var/www/site.com/);
//prints "uploads/myphoto.jpg"

Кто-нибудь знает лучший способ справиться с этим?

Ответы [ 11 ]

0 голосов
/ 16 апреля 2014

Этот простой фрагмент может преобразовать путь к файлу в URL файла на сервере. Некоторые настройки, такие как протокол и порт, должны быть сохранены.

        $filePath = str_replace('\\','/',$filePath);
        $ssl = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? true : false;
        $sp = strtolower($_SERVER['SERVER_PROTOCOL']);
        $protocol = substr($sp, 0, strpos($sp, '/')) . (($ssl) ? 's' : '');
        $port = $_SERVER['SERVER_PORT'];
        $stringPort = ((!$ssl && $port == '80') || ($ssl && $port == '443')) ? '' : ':' . $port;
        $host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
        $fileUrl = str_replace($_SERVER['DOCUMENT_ROOT'] ,$protocol . '://' . $host . $stringPort, $filePath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...