gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:43 27 4
gpt4 key购买 nike

我写了一段 php 代码来使用 file_get_contents() 从站点下载 .js 文件并尝试从 2 台不同的机器运行代码,它们产生不同的结果。代码是:

$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 8.11 机器上运行这段代码时,它产生了以下错误:

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

然而,当我在另一台机器(Debian 4.16.12-1kali1)上运行完全相同的代码时,它可以获得文件内容并且变量 $http_response_header 包含所有响应 header 。两台机器都使用php7.2。在花了几天时间试图找出导致 Debian 8.11 机器无法读取文件的原因后,我在两台机器上都使用了 wget,并再次注意到,Debian 8.11 (jessie) 机器无法读取文件读取文件。

我怀疑它与 ssl 证书有关,所以我运行了

sudo update-ca-certificates
sudo update-ca-certificates --fresh

但一点用都没有。

谁能给我指明方向?

最佳答案

最后我通过关注某人对 this post 的评论解决了问题

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

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

/proc/sys/net/ipv4/tcp_timestamps

除其他事项外,时间戳用于防止包装序列号。一个 1 吉比特的链接可能是可以想象的重新遇到具有异常值的先前序列号,因为它是上一代的。时间戳会让它认出这个“古老的包裹”。

但是我不知道它为什么有效。有人可以解释一下吗?

关于php - file_get_contents() 在不同机器上的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51150771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com