file_get_contents не работает на CentOS 7 - PullRequest
1 голос
/ 09 января 2020

Я использовал phpoffice функциональность обработки шаблонов с Laravel, и он работал на Ubuntu, Windows и Mac. Функциональность перестала работать, когда я перешел на centos сервер. Я понял, что phpoffice вызывал file_get_contents, чтобы открыть файл шаблона, и он не работает.

Итак, начал тестировать функцию file_get_contents.

echo file_get_contents('http://my-server-ip-address/api/public/storage/templates/template.docx');

Ошибка,

ErrorException (E_WARNING)
file_get_contents(http://my-server-ip-address/api/public/storage/templates/template.docx): failed to open stream: Connection timed out

php .ini конфигурация,

allow_url_fopen = On // tried  allow_url_fopen = 1 also

Пробовал,

user_agent = "PHP"

Я не могу изменить вызов функции на CURL подход, поскольку это внутренне обрабатывается в phpoffice composer пакет. Есть ли решение для этого?

Я могу получить доступ к файлу прямо в браузере. Никаких проблем с этим.

Редактировать:

  1. echo file_get_contents('http://my-ip/api/public/storage/templates/template.docx');
  2. echo file_get_contents('http://my-domain/api/public/storage/templates/template.docx');
  3. echo file_get_contents('https://www.google.com/');
  4. echo file_get_contents('http://localhost/api/public/storage/templates/template.docx');

Здесь 1 и 2 не работают с того же сервера, на который указывает IP / домен, но работают с любыми другими системами, включая локальные.

Сводка

Та же проблема с wget и CURL.

Сервер не может найти себя, используя IP или домен, но другие системы могут взаимодействовать с сервером.

Сервер идентифицирует себя только как localhost.

1 Ответ

0 голосов
/ 09 января 2020

вы можете попробовать. надеюсь, это поможет вам.

$url= 'https://example.com';

 $arrContextOptions=array(
    'http' => array(
        'method'=>"GET",
        'header'=>"Content-Type: text/html; charset=utf-8"
    ) ,
    "ssl"=>array(
          "verify_peer"=>false,
          "verify_peer_name"=>false,
          "allow_self_signed" => true, // or "allow_self_signed" => false,

      ),
  );  

$response = file_get_contents($url, false, stream_context_create($arrContextOptions));

Вы можете прочитать все руководство о stramContext здесь, в php руководстве https://www.php.net/manual/en/function.file-get-contents.php

...