的file_get_contents不会在端口8282工作(file_get_contents do

2019-07-31 02:34发布

我得到了谁做一个基本的POST请求(我只想让它工作,之后我会添加更多的东西)以下基本的脚本:

#   Variables
$URL = 'http://******:8282/api/incoming_shipment/';

$postdata = http_build_query(
    array(
        'contract_id'       => 'Showcare-R124276',
        'shipment_from'     => 'Montréal',
        'shipment_to'       => 'Chicago',
        'shipping_time'     => '2012-08-16 14:51:01',
        'tracking_cie'      => 'Poste Canada',
        'tracking_type'     => 'Standard',
        'tracking_number'   => 'EP645 9834 123 9773'
    )
);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);

$context = stream_context_create($opts);

$result = file_get_contents($URL, FALSE, $context);

print_r($result);

结果给我:

Warning: file_get_contents(http://******:8282/api/incoming_shipment/) [function.file-get-contents]: failed to open stream: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. in D:\Inetpub\hightechhandling\api\api_push_contract.php on line 31

Fatal error: Maximum execution time of 30 seconds exceeded in D:\Inetpub\hightechhandling\api\api_push_contract.php on line 31

但是,当我去我的浏览器网页,它完美地工作。 我已经tryed卷曲和fsocketopen但没有工作过。 任何帮助吗? 谢谢..

编辑我加入set_time_limit (500); 现在第二个错误具有disapear当然......但首先仍然存在。

Answer 1:

好吧,发现问题。 是SOOO愚蠢的。 这个问题是因为发出请求(其中PHP文件)的服务器,启用了防火墙和防火墙只允许端口21,22,80,3306年到1433年的外部请求。



Answer 2:

为CentOS,使用file_get_contents()就不是80端口访问的网址不适用因拒绝访问。 当SELinux的设置为“已禁用”或“许可”它才起作用。



Answer 3:

从PHP手册

无效的set_time_limit(INT $秒)

默认为60秒的脚本允许运行的数量。 如果达到这一点,该脚本返回一个致命错误。 默认限制为30秒或,如果存在,在php.ini中定义的的max_execution_time值。

当被调用时,set_time_limit()函数重新开始从零超时计数器。 换句话说,如果超时是默认的30秒25秒到脚本执行一个调用,如参数或者set_time_limit(20)制成,该脚本将总共45秒运行超时之前。 如果设置为零,没有时间限制的规定。



Answer 4:

试试这个:

'header' => implode("\r\n", array("Connection: close", "Content-type: application/x-www-form-urlencoded")),

(尤其是连接:关闭位)

此外,您也可以复制与卷曲commanline问题?



Answer 5:

如果你不想禁用安全考虑SELinux的,你可以使用SELinux策略允许的httpd听8282

要列出哪些端口允许的httpd:semanage的港口-l | grep的-w http_port_t

要添加端口8282:semanage的端口-a -t http_port_t -p tcp的8282



文章来源: file_get_contents does not work on port 8282