- file_get_contents () не работает
- Решение
- Другие решения
- PHP-файл get contents не работает на localhost
- 6 ответов
- Почему не работает функция file_get_contents ()?
- 1 ответ 1
- file_get_contents: не работает функция
- 5 ответов 5
- Всё ещё ищете ответ? Посмотрите другие вопросы с метками php или задайте свой вопрос.
- Похожие
- Подписаться на ленту
- PHP: curl, file_get_contents после удаления DST Root CA X3
file_get_contents () не работает
У меня есть скрипт, который использует 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, но это не сработало.
- создание файла php.ini с allow_url_fopen = on в каталоге, где произошла ошибка, но это не сработало.
- добавленной ini_set(‘allow_url_fopen’, ‘On’); до начала сценария PHP, но это не сработало.
Я знаю, что могу использовать вместо этого Curl, но я хочу знать, почему это не работает .. скрипт работает правильно на другом сервере и локальном хосте
Обновить :
это означает, что мои изменения php.ini не вступили в силу .. что я делаю не так?
Решение
Войдите на свой сервер через ssh и введите
в файле просто нажмите «ctrl + w» и введите «allow_url_fopen» и возврат, скорее всего, сначала вы придете к объяснению, поэтому повторите поиск несколько раз. Теперь вы можете изменить запись с
Нажмите «ctrl + x» и подтвердите сохранение файла с помощью «y» ,
Это перезапустит apache, чтобы можно было загрузить новую конфигурацию php.ini. После этих шагов вы сможете использовать file_get_contents внешне.
Если вы не можете найти свой файл php.ini, вы найдете путь к загруженному файлу php.ini в верхней части вашего файла. phpinfo()
Другие решения
Это позволит вам получить контент из URL, будь то HTTPS, не нужно менять в php ini.
Если у вас есть 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 место нахождения.
Это лучший способ решить проблемы с веб-запросами.
Источник
PHP-файл get contents не работает на localhost
Я работаю на своем веб-сайте с localhost (http://172.16.65.1/) сервер MAMP на OSX.
Я хочу загрузить JSON из Google, и некоторые простые тесты показывают, что у меня есть проблема..
что я могу с этим поделать? Он отлично работает на моем сервере host providers.
6 ответов
URL можно использовать в качестве имени файла с этой функцией, если включены оболочки fopen. Дополнительные сведения об указании имени файла см. В разделе fopen (). См.поддерживаемые протоколы и оболочки для ссылок на информацию о том, какие возможности имеют различные оболочки, заметки об их использовании и информацию о любых предопределенных переменных, которые они могут предоставить.
Регистрация php.ini так allow_url_fopen установлено значение on .
EDIT:
Я не заметил, что вы действительно можете использовать file_get_contents локально, поэтому теперь я думаю, что это может иметь какое-то отношение к вашему firewall settings .
кроме того, попробуйте установить user_agent в своем php.ini если еще не сделано.
вам также необходимо зарегистрироваться
включен или нет, если нет, то просто включите это, удалив; знак
Это может быть настройка в вашем php.ini-файл. Существует параметр allow_url_fopen, который включает / отключает возможность открытия удаленных файлов с php. По соображениям безопасности это обычно по умолчанию отключено. Вы можете включить его в ваш PHP.ini добавив следующую строку:
опять же, помните о проблемах безопасности при использовании этой функции.
попробуйте эту функцию вместо file_get_contents ():
его можно использовать так же, как file_get_contents (), но использует cURL.
установите cURL на Ubuntu (или другую unix-подобную операционную систему с aptitude):
во втором вы пытаетесь открыть файл с именем localhost в текущей папке, которая не существует и, следовательно, выдает ошибку. Использовать http://localhost вместо. И чтобы это сработало, вы должны установить allow_furl_open.
и это не работало, поэтому я изменил https на http, и после этого он работает хорошо.
Источник
Почему не работает функция file_get_contents ()?
Какие параметры в настройках php необходимы чтобы заработала функция file_get_contents() . Есть два хостинга, на одном из них скрипт работает, на другом нет! При этом на хостинге, где он не работает, в настройках php указан параметр php_flag arllow_url_fopen 1 Не понятно, какие еще настройки необходимы чтобы функция заработала? Скриншот информации по phpinfo() — ссылка
PHP код:
1 ответ 1
если $url содержит именно то, что ожидается и там реальная полная ссылка содержится, то первый очевидный вариант —
у хостера закрыты исходящие подключения.
Я встречал еще более суровое — разрешен только 80 порт, без разницы исходящий или входящий. Если по случайности исходящее соединение будет висеть на 80 порту, то оно пролезает.
Второй вариант — а проверить, ручками через curl, из консоли, вообще работает ли запрос $url, только не забываем скачать curl под любимую операционную систему:
Следствие из этого варианта — со стороны сервера требуется определенный заголовок. Если броузер успешно запрашивает, предлагаю использовать хром, инструменты разработчика. вкладка «Network» и там можно правым кликом по нужному запросу выбрать «копировать как curl».
Если так заработает, придётся уйти от file_get_contents() и открыть справку по curl в php.
отсюда пример. Ключевая строка — про «X-Requested-With: XMLHttpRequest«
Источник
file_get_contents: не работает функция
Здравствуйте, сделал парсер для сайта, но пару дней назад выдал мне ошибку
Warning: file_get_contents(http://mySite.ru/) [function.file-get-contents]: failed to open stream: Connection refused in /var/www/site.ru/data/www/site.ru/informer/go.php
Функция file_get_contents() какой бы сайт не вводил, все ровно выдает ошибку.
5 ответов 5
Учитесь читать сообщения об ошибках.
failed to open stream: Connection refused in
Это сообщение означает, что не удалось установить соединение с сервером. Либо сайт который вы парсили упал, либо ваш парсер банально забанили.
Некоторые хостеры блокируют эту функцию для своей же безопасности. А некоторые крупные и не очень порталы блокируют эту функцию для того, чтобы не спарсить данные страницы и не создать сайт-подделку.
В php.ini есть опция allow_url_fopen . Вот ее сделайте On. Если доступа к php.ini нет, попробуйте создать файлик .htaccess в корне сайта и прописать там:
Всем привет, у меня не работала file_get_contents, то есть не выводил вообще не чего, переменная куда я записывал свой файл, была пустой, я просмотрел код на наличие ошибок, проверил включена ли данная функция в php.ini, но чисто случайно решил указать другой путь вместо https://domen.ru/file.txt, я указал полный локальный путь, то есть /var/www/xxxxxx/data/www/domen.ru/file.txt, у меня все заработало.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками php или задайте свой вопрос.
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.10.19.40496
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник
PHP: curl, file_get_contents после удаления DST Root CA X3
После 30 сентября 2021 года Let’s Encrypt (бесплатный, автоматизированный и открытый Центр Сертификации) изменил цепочку корневых сертификатов. Цифрового корневой сертификат IdenTrust DST Root CA X3 признан устаревшим и должен быть удалён.
Старая цепочка: domain -> R3 -> ISRG Root X1 -> DST Root CA X3
Новая цепочка: domain -> R3 -> ISRG Root X1
Если вы попытаетесь зайти на сайт (на котором установлен Let`s Encrypt SSL сертификат) с устаревшего устройства после 30 сентября 2021, то получите ошибку Сайт не может обеспечить безопасное соединение.
Аналогично, если ваш сервер используют устаревшие версии библиотек (например, OpenSSL) или корневые сертификаты, то он не сможет сгенеировать нужную цепочку и не сможет программно взаимодействовать с внешними истоничками. Ваш сервер будет аналогичен устаревшему устройству и будет генерировать ошибку Сертификат устарел при попытке обращения к внешним ресурсам с LE сертификатом.
Например, в случае с php (если указано своё хранилище корневых сертификатов) curl вернёт ошибку certificate has expired, а file_get_contents — false.
Если вы попытаетесь воспользоваться консольной утилитой wget, то получите ошибку: ОШИБКА: cannot verify letsencrypt.org’s certificate, issued by «/C=US/O=Let’s Encrypt/CN=R3»: Для запрошенного сертификата истёк срок действия.
Решение проблемы заключается в обновлении ПО устаревших устройств.
https://access.redhat.com/solutions/1549003 — как сбросить список доверенных CA сертификатов в RHEL 6+
30 сентября обновилось хранилище сертификатов CA Mozilla. Стало на 1 сертификат меньше:
Если сравним файлы от 30.09.21 и 05.07.21, то увидим, что был удалён именно сертификат DST Root CA X3:
Источник