Пути для изображений с использованием Apache с Windows

У меня проблема с локальным тестированием ссылок с использованием Apache с Windows. Окончательные ссылки имеют следующий формат:

file:///C:/Documents and Settings/USUARIO/My Documents/xampp/htdocs/my_website/images/january/my_image.jpg

Изображения не отображаются. Однако, если я напрямую скопирую src из тега img и вставлю его в браузер (Firefox), изображение появится.

Я генерирую ссылки, используя следующий код:

Я определяю каталог изображений, используя: define(IMAGE_DIR, dirname(__FILE__).'/images/');
Затем я использую следующее для форматирования пути:

$imgPath = IMAGE_DIR.$month.$img;   
if($localServer)
{
   $imgPath = str_replace('/','\\', $imgPath);
   $imgPath = 'file:///'.$imgPath;
}

Что я делаю неправильно?


person sala_7    schedule 20.06.2010    source источник


Ответы (2)


Вы создаете источники изображений, которые используют file:// URL-адреса на странице, загруженной с веб-сервера. URL-адреса файлов указывают браузеру загружать файл непосредственно с диска, не отправляя запрос веб-серверу. Из соображений безопасности Firefox и другие браузеры не позволяют страницам, обслуживаемым веб-сервером, ссылаться на локальные файлы, поэтому не показывайте изображения. Люди, получающие удаленный доступ к вашему сайту, также не смогут получить доступ к файлам, поскольку источником изображения будет ссылка на путь на их компьютере.

Чтобы изображения отображались, вам нужно изменить источники изображений, чтобы они ссылались на местоположения на веб-сервере, например images/january/my_image.jpg или /images/january/my_image.jpg.

images/january/my_image.jpg будет интерпретироваться веб-браузером относительно запрашиваемой страницы. Например, если изображение появляется на странице по адресу http://localhost/page1.php, тогда браузер запросит http://localhost/images/january/my_image.jpg. Однако, если изображение используется на странице по адресу http://localhost/subdir/page1.php, вместо этого браузер запросит http://localhost/subdir/images/january/my_image.jpg.

/images/january/my_image.jpg всегда будет интерпретироваться относительно корня веб-сайта. Веб-браузер будет запрашивать http://localhost/images/january/my_image.jpg для любой страницы на http://localhost.

Вы также можете использовать абсолютный URL-адрес, если вам нужно сослаться на изображение на другом веб-сервере, например, http://otherhost/images/january/my_image.jpg.

person Phil Ross    schedule 20.06.2010
comment
Я использую dirname(FILE) для определения пути, чтобы при включении файла конфигурации с помощью include() пути не менялись в разных каталогах. Если я использую define(IMAGE_DIR, '/images/'), не возникнет ли у меня проблем при включении этого файла конфигурации в разные каталоги? - person sala_7; 21.06.2010
comment
@sala_7 Нет, у вас не будет проблем с разными каталогами. Независимо от каталога, в котором находится ваша страница, путь, начинающийся с /, всегда будет указывать на одно и то же место на веб-сервере. - person Phil Ross; 21.06.2010
comment
Бесконечно благодарен! Я думаю, что меня запутали пути из папки include ниже корневого веб-сайта, которые используют include() для импорта частей страницы из других каталогов. - person sala_7; 21.06.2010

Лучше использовать константу "DIRECTORY_SEPARATOR" вместо '/' или '\'

person Radek Suski    schedule 20.06.2010