Недавно я обновил один из своих серверов, и с тех пор у меня возникла проблема с некоторыми специфическими командами PHP (см. ниже). Я считаю, что это проблема конфигурации, но я уже рассмотрел пару вещей и больше ничего не знаю. Так что, возможно, у кого-то из вас есть хорошая идея:
Я использую следующий код для отображения либо стандартного логотипа на сайте интрасети, либо пользовательского логотипа:
if(L_HEADER) {
$logo = L_HEADER;
}
else {
$logo = 'logo.png';
}
$properties = getimagesize(CONFIG_URL . 'images/' . $logo)
L_HEADER и CONFIG_URL — это константы с предопределенными значениями (другой файл):
- L_HEADER содержит "opb_beta.png"
- CONFIG_URL содержит "http://billing.intranet.opb/"
Конкатенация работает правильно, что также подтверждается сообщением об ошибке лог-файла Apache:
Предупреждение PHP: getimagesize(http://billing.intranet.opb/images/opb_beta.png): не удалось открыть поток: HTTP-запрос не выполнен! HTTP/1.1 404 NOT FOUND
в /var/www/billing/templates/header.inc.php в строке 42
Итак, первый очевидный вывод: путь неверный. Но это не так, поверьте. Я проверил это, как 1.000 раз. Фактически, первое любопытство заключается в том, что изображение отображается и правильно ссылается на пару строк ниже в коде того же файла:
echo '<img src="' . CONFIG_URL . 'images/' . $logo . '"
width="' . $properties[0] . '" height = "' . $properties[1] . '" />";
Когда я получаю упомянутую выше ошибку, высота и ширина равны «0», но, глядя на исходный код, URL-адрес в порядке, доступ к нему вручную открывает изображение, и при замене ширины и высоты ручными значениями изображение отображается просто отлично .
Тем не менее, более любопытно (а также мой текущий finx), при изменении getimagesize на следующий он работает просто отлично:
$properties = getimagesize($_SERVER['DOCUMENT_ROOT'] . /public_html/images/' . $logo);
Я упомяну, что я использую перенаправление Apache; вот почему в URL-адресе вы не видите «public_html», а в абсолютном пути второго примера вы его видите.
То же самое происходит с «file_exists». URL-адрес не работает, работает абсолютный локальный путь для того же файла.
Еще одно любопытство: в другом фрагменте кода я проверяю наличие обновлений в Интернете. Там я использую «настоящий» общедоступный URL-адрес с file_exists и fopen. Я выгляжу так и отлично работает:
if(file_exists('http://desk.co.cr/df_stable.txt') {
if(($handle = fopen('http://desk.co.cr/df_stable.txt', 'r')) !== FALSE) {
// some other code
}
}
Теперь то, что я уже проверил:
- Права доступа к файлам установлены правильно для всего пути, при этом www-data является группой и владельцем всех файлов, а также доступом для чтения и записи для файла изображения.
- для параметра allow_url_fopen установлено значение «Вкл.».
- open_basedir имеет значение «нет значения», и в определениях виртуальных хостов Apache нет переопределения.
- файл определенно существует, и синтаксис + путь верны.
Немного справочной информации:
- Сервер работает на Ubuntu 14.04 LTS.
- Апач 2.4.7
- PHP 5.5.9
Пока у меня нет идей.
nslookup billing.intranet.opbServer: 127.0.0.1Address: 127.0.0.1#53Name: billing.intranet.opbAddress: 158.120.100.152Не спрашивайте, почему этот IP. Это локальный IP-адрес нашей локальной сети - длинная история ;-) - person Sebastian   schedule 18.09.2015