Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Доступ к файлам по URL


Автор: Hint 17.2.2009, 20:58
Пытаюсь подключить удаленный файл, получаю вот такую ошибку:

Код
Warning: include(http://xxx.ru:58765/xxx.php) [function.include]: failed to open stream: Permission denied in /var/www/xxx.ru/html/xxx.php on line 24

Warning: include() [function.include]: Failed opening 'http://xxx.ru:58765/xxx.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/xxx.ru/html/xxx.php on line 24


Пытался использовать и другие функции (file, file_get_contents), результат один: "permission denied".
Самое интересное, что если указать порт 80 (или вообще явно его не указывать), то никаких ошибок нет - все работает нормально.

Порт (58765) доступен, спокойно открываю URL в браузере. Проверил telnet'ом (с веб-сервера через ssh) - соединение устанавливается.
Скрипт завершает работу с ошибой "permission denied" моментально, т.е. безо всякого таймаута.

PHP 5.2.8 подключен как модуль к Apache/2.2.3 (CentOS).

Автор: skyboy 17.2.2009, 22:39
если коротко: функции типа file_get_contents и fopen - функции для работы с локальными файлами. с удаленными файлами эти функции работают при помощи посредников-оберток(http://ua2.php.net/wrappers). Обертка для HTTP мало того, что может не быть включена в конфигурации хостинга, так ещё и http://ua2.php.net/manual/ru/wrappers.http.php адрес с указанием порта. выход: либо работать через сокеты напрямую, либо работать через cUrl, который работает через сокеты.

Автор: Hint 18.2.2009, 10:55
Сайт работает на выделенном сервере. Установлена CentOS. Httpd, php и другие модули ставились через yum. Возможно, дело в ОС. Не первый раз ставлю с нуля LAMP, но обычно работал с FreeBSD и FedoraCore. С такой проблемой столкнулся впервые. В какую сторону копать?

>не принимает адрес с указанием порта
Если указать 80 порт, то ошибка не возникает. Но проблема в том, что необходимо обращаться по другому порту.
Хочу разобраться в чем дело, а не обойти стороной.

Автор: Hint 18.2.2009, 11:20
Кстати, проблема какая-то глобальная. Memcache->connect выдает такую же ошибку: "permission denied", хотя по telnet соединение на 11211 устанавливается.

Автор: Hint 25.5.2009, 11:44
До сих пор не смог решить проблему. С smtp аналогино (ошибка при fsockopen):

Warning: fsockopen() [function.fsockopen]: unable to connect to smtp.site.ru:25 (Permission denied) in /var/www/site.ru/html/sock.php on line 2

telnet опять же работает, а если указать порт 80, то и php соединяется.

Автор: Atlete 25.5.2009, 12:12
Попробуйте копать в сторону фаервола. Другого объяснения сложно придумать.
Ради чистоты эксперемента отключите полностью фаервол и попробуйте 
выполнить необходимые операции. 

P.S. Хотя меня смущает возможность подключения по телнету. Фаервол обычно если блокирует, то и телнетом не подключишься.

Автор: Hint 25.5.2009, 12:23
Решилось вводом команды:
setsebool -P httpd_can_network_connect=1

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)