Я имею странное поведение на сервере Ubuntu (Nginx php5-FPM стека) следующий код объясняет проблему:file_get_contents url возвращает пустую строку, а fsockopen работает нормально?
<?php
// WORKS:
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET/HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
// DOES NOT WORK! Return empty string (no error like NULL or False whatsoever).
echo file_get_contents("http://www.example.com");
// allow_ftp_open is On
echo var_dump(ini_get('allow_url_fopen')); // returns '1'
?>
После кода с помощью FOPEN:
<?php
// get contents of a file into a string
$filename = "http://www.example.com";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
echo $contents;
?>
Генерирует это:
Warning: filesize(): stat failed for http://www.example.com in test.php on line 5
Warning: fread(): Length parameter must be greater than 0 in test.php on line 5
Если я использую фиксированный размер в fread, результатом будет пустая строка, как с file_get_contents.
Как это может быть, что сокеты работают нормально, но fopen нет? Что мне не хватает?
Что такое allow_url_fopen? – bksi
Устанавливается в положение Вкл. var_dump (ini_get ('allow_url_fopen')) возвращает «1» –