Чтение изображения извне public_html с помощью PHP? - PullRequest
2 голосов
/ 30 декабря 2011

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

У меня есть установка cpanel с обычным public_htmlкаталог и доступ к каталогу ниже этого (назовите этот каталог "USER").Я тестирую некоторые вещи с изображениями.

Я поместил файл изображения над public_html в каталог USER.

Я написал тестовый скрипт php, который имеет всего несколько строк:

if(is_file("../1.jpg")){    
    echo "<img src=\"../1.jpg\" />";
}else{
    echo "not there";
}

Файл is_file всегда может найти файл.Также пробовал file_exists и is_readable, все они тоже находят файл.

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

Я изменил права доступа к файлу на все для чтения.

Я попытался указать абсолютный путь от корня.

Я пытался использовать imagejpeg.

Ничего из этого не работает.

Вы можете удивиться, почему я не просто помещаю изображение в public_html, но этот скрипт - тест, который я делаю, потому что мне нужно выяснить, чтовозможно, когда дело доходит до обслуживания изображений из других доменов / учетных записей на том же сервере (это выделенный сервер).

Я могу понять, что, возможно, это вещь с разрешениями или что-то - в этом случае я непонять, почему скрипт может найти файл - в любом случае, я, вероятно, пропускаю что-то очень глупое или простое.Поэтому, если бы кто-нибудь мог указать мне правильное направление, я был бы признателен.

Большое спасибо

1 Ответ

11 голосов
/ 30 декабря 2011

Этого нельзя сделать. Когда вы выводите тег img, это просто текст на сервере. Он отправляется в браузер, и именно браузер пытается извлечь файл, указанный в разделе src="...". Это делается с помощью HTTP-запроса, поэтому, если изображение находится за пределами корня документа, вы по определению не можете получить файл напрямую.

Если бы вы могли просто сделать src="../../../../picture.jpg" и получить изображение вне корня документа, вы можете получить ЛЮБОЙ файл на сервере, включая ваши файлы конфигурации, ваши файлы паролей, бла-бла-бла. Это была бы дыра в безопасности, достаточно большая, чтобы считаться безумной.

если вы хотите предоставить доступ к файлу вне корня документа, вам придется сделать это с помощью скрипта. Самый простой способ - иметь:

image.php:

<?php
header('Content-type: image/jpeg');
readfile('/path/to/picture/outside/doc/root/file.jpg');

и в вашем html:

<img src="image.php">

Существуют и другие противные опции, такие как использование директив псевдонима Apache для сопоставления внешних каталогов с «внутренними», переписывание URL и т. Д., Но это только усложняет задачу.

...