Он отлично работает на локальном хосте с Xampp, но когда я пытаюсь его на своем сервере (host-ed.net), fopen не может открыть какой-либо URL-адрес, он работает только для файлов без http.
<?php $file="http://www.google.es"; $gestor = fopen($file, "r") or die ("Nothing"); ?>
На моем сервере с этим кодом отображается Nothing. Может быть что-нибудь на php.ini?
EDIT: В php.ini: allow_url_fopen = On
EDIT: Это решение. Мой сервер отключил его, но теперь он включен. Спасибо за ответы.
fopen не может открыть какой-либо URL-адрес
Проверьте значение параметра allow_url_fopen
php.ini :
var_dump(ini_get('allow_url_fopen'));
Вероятно, это неверно. Вам нужно поговорить с вашим веб-хостом или попробовать другой метод. Mabye CURL включен?
Вы также должны проверить значения error_reporting
и display_errors
. PHP должен был громко жаловаться на то, что не смог открыть URL-адрес. Вы захотите превратить их обоих во время разработки кода, чтобы вы могли понять, что пойдет не так просто.
Найдите allow-url-fopen
в своем PHP.ini.
http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen
Разрешение на открытие URL-адресов с помощью fopen
контролируется настройкой php.ini
allow_url_fopen
. Вы можете увидеть свой текущий параметр, используя phpinfo()
который выгрузит html-документ, содержащий все настройки вашего сервера.
Как утверждает http://php.net/manual/en/function.fopen.php ,
Если имя файла имеет форму «схема: // …», предполагается, что URL-адрес и PHP будут искать обработчик протокола (также известный как обертка) для этой схемы. Если никакие обертки для этого протокола не зарегистрированы, PHP выпустит уведомление, чтобы помочь вам отслеживать потенциальные проблемы в вашем скрипте, а затем продолжить, как будто filename указывает обычный файл.
Поэтому я предполагаю, что для url не зарегистрировано, и php рассматривает это как обычное имя файла, которого не существует.
Попробуйте Curl, он будет работать, если он установлен на этом веб-сервере.
У вас есть бесплатная учетная запись? Большинство служб хостинга ограничивают исходящее соединение для бесплатных учетных записей для предотвращения злоупотреблений. Попробуй это:
$fp = fsockopen("some.alive.site", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { echo "Everything is OK"; fclose($fp); }
Если вы увидите сообщение об ошибке – вам не разрешено выполнять исходящие подключения.
Если вы используете PHP-FPM, проверьте файлы конфигурации в pool.d/
. Пулы PHP-FPM могут переопределять настройки php, используя php_admin_flag
, php_admin_value
, php_flag
или php_value
. (Мы столкнулись с этим на Ubuntu 16 vps)