Не работает fsockopen

E
На сайте с 05.10.2005
Offline
172
4828

После переноса сайтов на VDS перестал работать скрипт, забирающий с другого сервера рандомную ссылку.

Строчка:

$fh = fsockopen("****.ru",80, &$errno, &$errstr, 2);

порождает ошибку:

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of fsockopen(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /var/www/espada/data/www/*****.info/skvo.php on line 10

Подскажите, пожалуйста, что с этим делать?

php_flag allow_call_time_reference on в .htaccess я уже испробовал. Ошибка исчезает, но ссылка не появляется (хотя в локале тот же скрипт работает нормально и с таким .htaccess и без него).

Сейчас ищу PHP.ini (кстати, подскажите, плиз, где он находится, если зайти в файл-менеджер ISPManager, как root). Но, боюсь, и там смена настройки не поможет.

открытая многоязычная словарная база (http://tolmacz.ru)
R.Major
На сайте с 23.03.2008
Offline
25
#1
espada:

Сейчас ищу PHP.ini (кстати, подскажите, плиз, где он находится, если зайти в файл-менеджер ISPManager, как root). Но, боюсь, и там смена настройки не поможет.

php.ini находится в корне PHP, еще можно попробовать добавить в скрипт строчку:

ini_set("allow_call_time_pass_reference", true);
Пишу на PHP (+JS) (/ru/forum/507055)
E
На сайте с 05.10.2005
Offline
172
#2
R.Major:
php.ini находится в корне PHP

В таком случае, где находится корень PHP? В корневой папке рута нет ни php.ini, ни папки php.

К примеру, у меня на локальной машине php.ini лежит в usr/local/php. Но на сервере и в usr/local такой папки нету.

Впрочем, боюсь, это не поможет - поскольку не помогает ни .htaccess, ни ini_set. Где-то что-то сложнее.

P
На сайте с 15.08.2008
Offline
15
#3
espada:
В таком случае, где находится корень PHP? В корневой папке рута нет ни php.ini, ни папки php.

К примеру, у меня на локальной машине php.ini лежит в usr/local/php. Но на сервере и в usr/local такой папки нету.

Впрочем, боюсь, это не поможет - поскольку не помогает ни .htaccess, ни ini_set. Где-то что-то сложнее.

Создайте скрипт в корне сайта, например, phpinfo.php и пропишите в нем одну строчку:

<?php phpinfo();

Вызовите его и в первой секции увидите путь к php.ini (Loaded Configuration File). Но вообще-то вызов fsockopen правильно вызывать без использования знака & (кстати, тогда и включать опцию allow_call_time_pass_reference не потребуется):

$fh = fsockopen("****.ru", 80, $errno, $errstr, 2);

и, в качестве отладки, добавьте после этой строчки:

var_dump($fh);

var_dump($errstr);

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

BR
На сайте с 28.06.2008
Offline
75
#4
espada:

$fh = fsockopen("****.ru",80, &$errno, &$errstr, 2);

порождает ошибку:

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of fsockopen(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /var/www/espada/data/www/*****.info/skvo.php on line 10

Подскажите, пожалуйста, что с этим делать?

- тут все написано :) "уберите передачу по ссылке":

$fh = fsockopen("****.ru",80, $errno, $errstr, 2);
размещение сайтов (http://www.brim.ru)
W
На сайте с 06.09.2005
Offline
42
#5

Передлагаю свой помош.

webmasters -вебмастер с сайтов:http://www.ibrahimovfamil.narod.ru (http://www.ibrahimovfamil.narod.ru) http://www.allshops.h15.ru (http://www.allshops.h15.ru),http://www.forumall.h15.ru (http://www.forumall.h15.ru) http://www.zarabotka.hut1.ru (http://www.zarabotka.hut1.ru)
E
На сайте с 05.10.2005
Offline
172
#6

Проблема оказалась не в этой строчке, а совсем в другой.

Оказалось, что новый сервер почему-то не распознает $HTTP_SERVER_VARS['REQUEST_URI'] и признает только $_SERVER['REQUEST_URI']. Кстати, интересно - это нормально для настроенных по умолчанию серверов на PHP5?

То есть установка allow_call_time_reference в ON устраняла ошибку fsockopen, но скрипт все равно не работал из-за отсутствия нужного параметра, который берется из REQUEST_URI.

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

Спасибо всем за помощь.

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#7
Кстати, интересно - это нормально для настроенных по умолчанию серверов на PHP5?

да. Я всегда использую $_SERVER

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
P
На сайте с 15.08.2008
Offline
15
#8
espada:
Оказалось, что новый сервер почему-то не распознает $HTTP_SERVER_VARS['REQUEST_URI'] и признает только $_SERVER['REQUEST_URI']. Кстати, интересно - это нормально для настроенных по умолчанию серверов на PHP5?

Да, это нормально. Более того, использование $HTTP_SERVER_VARS (и аналогичных массивов) не рекомендуется использовать начиная с версии 4.1.0 (декабрь 2001 года).

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий