Как вернуть изображение по ссылке если оно находится вне каталога сайта?

109
13 декабря 2019, 07:10

Следующий код возвращает случайное фото из каталога:

$http_host = filter_input(INPUT_SERVER, 'HTTP_HOST');
$request_uri = filter_input(INPUT_SERVER, 'REQUEST_URI');
$request_uri = substr($request_uri, 0, strpos($request_uri, '/', 1) + 1);
$user_id = filter_input(INPUT_GET, 'user_id', FILTER_VALIDATE_INT);
$srand = filter_input(INPUT_GET, 'srand', FILTER_VALIDATE_INT);
if( $user_id && $srand ){
    $DirPath = 'D:/Photo/'.$user_id.'/';
    $Photos = (array)glob($DirPath.'*.jpg');
    srand($srand);
    $Photo = $Photos[array_rand($Photos)];
    if(!$Photo ) $Photo = 'DefaultPhoto.jpg';
    header('Location: http://'.$http_host.$request_uri.$Photo);
}

Когда $DirPath был относительным и находился в каталоге сайта, всё работало. Когда архив был перенесен на отдельный диск, фотографии перестали возвращаться по ссылке. var_dump показывает корректный путь к файлу.

Как реализовать возврат по ссылке если файлы на другом диске?

Answer 1

Во-первых, выучить, как "Отче наш", чем отличаются файлы на диске от HTTP ресурсов. Чтобы в принципе не возникало вопросов, "а почему веб-сервер не показывает белиберду типа http://example.com/path/D:/Photo/34465656/kartinka.jepege?"

Во-вторых, или настроить отдельный веб-сервер для картинок (и отдавать в локейшен корректный URL картинки), либо использовать readfile(), что скажется на производительности, но это, как я понимаю, на данный момент проблемой не является.

READ ALSO
Необходимо создать новый столбец в базе, в который будут приходить значения из других столбцов в таблице

Необходимо создать новый столбец в базе, в который будут приходить значения из других столбцов в таблице

У меня есть таблица в doctrine в формате phpВыглядит она следующим образом

135
php отправка писем на почту с сайта

php отправка писем на почту с сайта

Почему то письмо отправляется в любом случае, в не зависимости от заполненных форм что не так? Тестирую на open servere

122
Проверка масива на совпадения

Проверка масива на совпадения

Есть n-кол-во массивовНужно проверить все эти массивы с одним и найти хотя бы одно совпадения, если есть, то возвращать true, если нету не одного...

141
Ошибка при получении данных с массива PHP

Ошибка при получении данных с массива PHP

пытаюсь достать данные с db при помощи PDO но получаю ошибку:

99