Использование URL-адреса веб-домена или системного пути для доступа к файлу в PHP - PullRequest
1 голос
/ 15 ноября 2010

У меня есть локальная конфигурация Apache / PHP на моем компьютере. Я хочу быть в состоянии

1) проверить существование файла изображения, используя абсолютный путь и

2) отобразить его, используя тот же URL

Простой пример того, что я хочу сделать:

if(file_exists($url)) {
    echo '<img src="' . $url . '" />';
}

если я установлю ...

$url = 'http://' . $_SERVER['HTTP_HOST'] . '/myimg.jpg';

тогда file_exists вернет false, потому что URL является веб-путем (http://localhost/myimg.jpg).


если я установлю ...

$url = $_SERVER['DOCUMENT_ROOT'] . '/myimg.jpg';

он распознает, что файл существует (C: /htdocs/myimg.jpg), но не сможет отобразить изображение, поскольку не может получить доступ к источнику изображения. Если я просматриваю источник и копирую / вставляю URL в адресную строку веб-браузера, изображение отображается очень хорошо.


Возможно, мне чего-то не хватает в файле Apache httpd.conf или PHP.ini? Может быть, объявление Alias ​​какой-то. Кроме того, сайт будет загружен на удаленный веб-сервер (например, bluehost.com) после его завершения, поэтому мне нужно универсальное решение.

allow_url_fopen в PHP.ini включен, и я перезагружал сервер каждый раз, когда вносил изменения в httpd.conf или PHP.ini. Я боролся с этим в течение нескольких дней, так что даже точка в правильном направлении была бы очень признательна:)

Спасибо.

Ответы [ 3 ]

1 голос
/ 15 ноября 2010

Вы путаете доступ к файлам на стороне сервера и стороне клиента.

$url = 'http://' . $_SERVER['HTTP_HOST'] . '/myimg.jpg';

Это создает URI, который будет использоваться клиентом для получения вашего изображения по HTTP.Например, http://example.com/myimg.jpg


$url = $_SERVER['DOCUMENT_ROOT'] . '/myimg.jpg';

Это создает путь к файловой системе, который будет использоваться PHP.Например, /var/www/htdocs/myimg.jpg


Ваше решение должно использовать оба

$img = '/myimg.jpg';

if(file_exists($_SERVER['DOCUMENT_ROOT'] . $img)) {
    echo '<img src="', $_SERVER['HTTP_HOST'], $img, '" />';
}

Редактировать: Возможно, вы могли бы заменить строку echo на

echo '<img src="', $img, '" />';

поскольку абсолютный URL (начинающийся с косой черты) всегда начинается с корня документа

0 голосов
/ 15 ноября 2010

Абсолютный путь, который выбирает file_exists, полностью отличается от вашего веб-пути. Вам просто нужно будет использовать отдельные пути для file_exists и атрибута src в теге img.

$img = 'myimg.jpg';
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/' . $img) {
    echo '<img src=' . $img . ' />';
}
0 голосов
/ 15 ноября 2010
<?php
$url = "/myimg.jpg";
if( file_exists($_SERVER['DOCUMENT_ROOT'].$url))
    echo "<img src='".$url."' />";
?>

Это даст вам HTML:

<img src='/myimg.jpg' />

Это изображение, поскольку оно разрешается из доменного имени.

...