我正在尝试在我的服务器上发送一个文件发送帖子数据,好像从一个表单(“calling_file.php”)发送到同一服务器上的另一个文件(“processing_file.php”)。这是代码:
$url = 'https://www.example.com/path/to/processing_file.php';
$method = 'POST';
$eol = "\r\n";
// Create a stream
$opts = array(
'http' => array(
'timeout' => 30,
'method' => $method,
'header' => 'Content-Type: application/x-www-form-urlencoded' . $eol,
'content' => http_build_query($xmit)
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$result = file_get_contents($url, false, $context); //filename, use_include_path, context
//echo($result);
$result_decode = json_decode($result,true);
$ xmit看起来像这样:
array(
'dx' => json_encode('[{"business_date":"2015-09-29","check_avg":10.749122993789,"guests":"422"},{"business_date":"2015-09-30","check_avg":36.735215894737,"guests":"461"},{"business_date":"2015-10-01","check_avg":12.2527145,"guests":"288"},{"business_date":"2015-10-02","check_avg":18.405998957055,"guests":"263"},{"business_date":"2015-10-03","check_avg":20.385927936508,"guests":"289"}]'),
'period' => 5,
'phase_code' => 3,
'site_id' => 155
)
当我回应$ opts时,一切看起来都正确。 http_build_query($ xmit)正在创建看起来有效的帖子数据。我在processing_file.php和calling_file.php中设置了这个:
ini_set('allow_url_include', '1');
ini_set('allow_url_fopen', '1');
粘贴时: http://www.example.com/path/to/processing_file.php
直接在我的浏览器中,文件以200状态打开,一切都很好。
我尝试将processing_file的所有者设置为apache用户,并将chmod设置为775。
但是,当calling_file.php试图用上面的代码调用processing_file.php时,我得到了这个:
Warning: file_get_contents(https://www.example.com/path/to/processing_file.php): failed to open stream: Connection timed out in /var/www/example.com/functions/path/to/other/file/calling_file.php on line 219
第219行是:
$result = file_get_contents($url, false, $context); //filename, use_include_path, context
我无法弄清楚为什么它看不到文件。
答案 0 :(得分:1)
我在周末遇到了这个问题,发现它在ArchLinux和新安装的Fedora 25上影响了我。
对于更多上下文,我发现在<{1}}上进行任何网络调用超时,在使用cURL进行等效网络调用时正在进行。此外,file_get_contents()
遇到了同样的问题。
ping
内部使用的一些低级系统范围的实用程序是通过执行IPv6查找并随后超时来解析DNS。奇怪的是,我所有的其他应用程序(cURL,Web浏览器等)都在使用IPv4并正常工作。
我通过禁用IPv6系统来解决此问题。
为了文档起见,这些是我的file_get_contents()
来证明这个问题:
Ping,使用默认调用:
ping
Ping,使用IPv4标志:
[hpierce@localhost ~]$ ping www.google.com
PING www.google.com(ord38s04-in-x04.1e100.net (2607:f8b0:4009:813::2004)) 56 data bytes
^C
--- www.google.com ping statistics ---
147 packets transmitted, 0 received, 100% packet loss, time 149492ms