PHP ini file get contents external url

Używam następującej funkcji PHP:

file_get_contents('http://example.com');

Ilekroć robię to na określonym serwerze, wynik jest pusty. Kiedy robię to gdziekolwiek indziej, rezultatem jest zawartość strony. Gdy jednak na serwerze, na którym wynik jest pusty, używam funkcji lokalnie-bez dostępu do zewnętrznego adresu URL (file_get_contents('../simple/internal/path.html');), to działa.

Teraz, jestem prawie pewien, że to ma coś wspólnego z pewnym php.konfiguracja ini. Czego jednak nie jestem pewien o jest, który jeden. Proszę o pomoc.

Author: Patrick McElhaney, 2010-08-15

8 answers

Ustawienie, którego szukasz to allow_url_fopen.

Masz dwa sposoby obejścia go bez zmiany php.ini, jednym z nich jest użycie fsockopen(), a drugim jest użycie cURL .

W każdym razie polecam użycie cURL over file_get_contents(), ponieważ został do tego stworzony.

 42
Author: Aillyn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-15 17:24:51

Uzupełniając odpowiedź Aillyn, możesz użyć funkcji takiej jak ta poniżej, aby naśladować zachowanie file_get_contents:

function get_content($URL){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_URL, $URL);
      $data = curl_exec($ch);
      curl_close($ch);
      return $data;
}

echo get_content('http://example.com');
 38
Author: Pablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-08 22:44:12

Jest związane z ustawieniem konfiguracji iniallow_url_fopen.

Powinieneś mieć świadomość, że włączenie tej opcji może spowodować, że niektóre błędy w Twoim kodzie będą mogły być wykorzystane.

Na przykład niepowodzenie walidacji danych wejściowych może przekształcić się w pełnowartościową lukę w zdalnym wykonywaniu kodu:

copy($_GET["file"], "."); 
 4
Author: Artefacto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-15 17:24:52
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.your_external_website.com");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);

Jest najlepszy dla http url, Ale jak otworzyć adres URL https pomóż mi

 4
Author: Vikash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-29 07:12:10

Odpowiedzi podane powyżej rozwiązują problem, ale nie wyjaśniają dziwnego zachowania opisanego przez OP. To Wyjaśnienie powinno pomóc każdemu testowaniu komunikacji między witrynami w środowisku programistycznym, w którym wszystkie te witryny znajdują się na tym samym hoście (i tym samym virtualhost; pracuję z apache 2.4 i php7.0).

Jest subtelność z file_get_contents() natknąłem się, że jest absolutnie istotne tutaj, ale nie adresowane (prawdopodobnie dlatego, że jest albo ledwo udokumentowane lub nie udokumentowane z tego, co mogę powiedzieć lub jest udokumentowane w niejasnym modelu zabezpieczeń php whitepaper nie mogę znaleźć).

Z allow_url_fopen ustawionym na Off we wszystkich istotnych kontekstach (np. /etc/php/7.0/apache2/php.ini, /etc/php/7.0/fpm/php.ini, itd...) i allow_url_fopen ustawione na On w kontekście wiersza poleceń (tj. /etc/php/7.0/cli/php.ini), wywołania do file_get_contents() dla lokalnego zasobu będą dozwolone i nie będzie rejestrowane żadne Ostrzeżenie, takie jak:

file_get_contents('php://input');

Lub

// Path outside document root that webserver user agent has permission to read. e.g. for an apache2 webserver this user agent might be www-data so a file at /etc/php/7.0/filetoaccess would be successfully read if www-data had permission to read this file
file_get_contents('<file path to file on local machine user agent can access>');

Lub

// Relative path in same document root
file_get_contents('data/filename.dat')

Podsumowując, ograniczenie {[12] } jest analogiczne do iptables reguły w łańcuchu OUTPUT , gdzie ograniczenie jest stosowane tylko w przypadku próby "wyjścia z systemu" lub "zmiany kontekstu".

N. B. allow_url_fopen ustawione na On w kontekście wiersza poleceń (tj. /etc/php/7.0/cli/php.ini) jest tym, co miałem w moim systemie, ale podejrzewam, że nie miałoby to wpływu na wyjaśnienie, które podałem, nawet gdyby było ustawione na Off, chyba że oczywiście testujesz uruchamiając swoje skrypty z samej linii poleceń. Nie testowałem zachowania z allow_url_fopen ustawionym na Off w kontekście wiersza poleceń.

 2
Author: J-a-n-u-s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-05 17:02:06

To również da linkom zewnętrznym ścieżkę bezwzględną bez konieczności używania php.ini

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.your_external_website.com");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
$result = preg_replace("#(<\s*a\s+[^>]*href\s*=\s*[\"'])(?!http)([^\"'>]+)([\"'>]+)#",'$1http://www.your_external_website.com/$2$3', $result);
echo $result
?>
 1
Author: Wayne Nort,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-25 12:50:26

Włącz allow_url_fopen z cPanel lub WHM w sekcji PHP ini

 1
Author: Sajibe Kanti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-01 19:09:20

Dodaj:

allow_url_fopen=1

W Twoim pliku php.ini. Jeśli korzystasz z hostingu współdzielonego, utwórz go najpierw.

 0
Author: Cheap PC Shop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-31 11:08:16