我编写了一段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
但这完全没有帮助。
有人可以指出我的方向吗?
答案 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链接可能是可以想象的 重新遇到前一个序列号与一个离线值, 因为它是前一代。时间戳记会让它 认出这个“古老的包裹”。
但是我不知道它为什么起作用。有人可以解释吗?