file_get_contents()在不同机器上的工作方式不同

时间:2018-07-03 09:14:03

标签: php ssl file-get-contents

我编写了一段PHP代码,以使用FUN_TESING从站点下载.js文件,并尝试在2台不同的计算机上运行该代码,它们会产生不同的结果。代码是:

file_get_contents()

当我在Debian 8.11机器上运行这段代码时,会产生以下错误:

$link = "https://www.scotchwhiskyauctions.com/scripting/store-scripting_frontend.js";

$options = array(
  'http'=>array(
     'method'=>"GET",
     'header'=>"Accept-language: en\r\n" .
          "User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n"  ),
  'ssl'=>array(
     'verify_peer'=>false,
     'verify_peer_name'=>false),
);
$context = stream_context_create($options);
$line = file_get_contents($link, false, $context);
var_dump($http_response_header);
echo $line;
exit;

但是,当我在另一台机器(Debian 4.16.12-1kali1)上运行完全相同的代码时,它可以获得文件内容,并且变量PHP Warning: file_get_contents(https://www.scotchwhiskyauctions.com/scripting/store-scripting_frontend.js): failed to open stream: Connection timed out in /var/www/test.php on line 4 PHP Notice: Undefined variable: http_response_header in /var/www/test.php on line 4 NULL 包含所有响应头。两台机器都使用php7.2。花了几天的时间试图找出导致Debian 8.11机器无法读取文件的原因后,我在两台机器上都使用了$http_response_header,并再次注意到,Debian 8.11(jessie)机器无法读取文件

我怀疑这与ssl证书有关,所以我跑了

wget

但这完全没有帮助。

有人可以指出我的方向吗?

1 个答案:

答案 0 :(得分:0)

最后,我通过遵循某人对this post的评论来解决了问题

echo 0 > /proc/sys/net/ipv4/tcp_timestamps

我在Linux Advanced Routing & Traffic Control HOWTO文章中找到了以下内容。

/ proc / sys / net / ipv4 / tcp_timestamps

时间戳用于防止其他情况 包装序列号。 1 GB链接可能是可以想象的 重新遇到前一个序列号与一个离线值, 因为它是前一代。时间戳记会让它 认出这个“古老的包裹”。

但是我不知道它为什么起作用。有人可以解释吗?