У меня есть скрипт, который использует file_get_contents()
чтобы получить ответ json с удаленного сервера. в то время как file_get_contents()
работает правильно на локальных файлах, но не работает с http или https, он дает мне следующую ошибку file_get_contents(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 in
и file_get_contents(https://api.domain.com/resolve.json?url=blablabla): failed to open stream: no suitable wrapper could be found
.. это выделенный сервер, и у меня есть WHM .. Я пробовал
allow_url_fopen = on
в редакторе конфигурации WHM PHP, но это не сработало. allow_url_fopen = on
в каталоге, где произошла ошибка, но это не сработало. ini_set('allow_url_fopen', 'On');
к началу скрипта PHP, но это не сработало. Я знаю, что я могу использовать Curl вместо этого, но я хочу знать, почему это не работает. Скрипт работает правильно на другом сервере и localhost
Обновить :
phpinfo();
дает мне
allow_url_fopen Off allow_url_include Off always_populate_raw_post_data Off
это означает, что мои изменения php.ini не вступили в силу. Что я делаю неправильно?
Войдите на свой сервер через ssh и введите
sudo nano /etc/php5/apache2/php.ini //<<<< ubuntu/debian server, might differ for you
в файле просто нажмите "ctrl + w"
и введите "allow_url_fopen"
и «Return», скорее всего, вы сначала придете к объяснению, так что повторите поиск пару раз. Теперь вы можете изменить запись из
allow_url_fopen=0
в
allow_url_fopen=1
нажмите "ctrl + x"
и подтвердите сохранение файла с помощью "y"
.
Затем введите
sudo service apache2 restart
Это перезапустит apache, чтобы можно было загрузить новую конфигурацию php.ini. После этих шагов вы сможете использовать file_get_contents
извне.
ПРИМЕЧАНИЕ
Если вы не можете найти файл php.ini, вы найдете путь к загруженному файлу php.ini в верхней части вашего phpinfo()
Если у вас есть root-доступ, отредактируйте php.ini
, обычно находящийся в /etc/php.ini
.
Если у вас нет доступа root, попробуйте добавить ini_set('allow_url_fopen', 'On');
или ini_set('allow_url_fopen', '1');
,
Если вы не видите php.ini
, попробуйте использовать phpinfo()
в скрипте PHP, чтобы найти местоположение php.ini
.
$url= 'https://example.com'; $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), ); $response = file_get_contents($url, false, stream_context_create($arrContextOptions));
Это позволит вам получить содержимое с URL-адреса, является ли это HTTPS, не нужно изменять в php ini.