curl或file_get_contents不起作用

时间:2017-07-30 17:46:08

标签: php curl wamp wampserver file-get-contents

发送帖子请求时遇到了一些问题。 我使用此脚本执行页面http://localname.local/test,页面http://localname.local/directory/page.php获取json数据。

$url = "http://localname.local/directory/page.php";

$post = [
    "key1" => "hello",
    "key2" => 885,
];

$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($post),
        'timeout' => 10
    )
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);


if ( $result === false ) {
    // Handle error
    return null;
}
else
    return $result;

但是经过10次后,剧本得到了消息:

  

警告:file_get_contents(http://localname.local/directory/page.php):无法打开流:HTTP请求失败!在第X行的D:\ ... \ html \ test.php

page.php有效,我可以用我的浏览器作为客户端发送帖子请求,但php(或wamp)无法访问或向自己的页面发送请求。

我在wamp 3.0.9上获得了PHP 7.1.7,Apache 2.4.23并且选项allow_url_fopen已打开。

编辑: CURL

public static function get_content($post)
{
    $url = "http://localname.local/directory/page.php";

    $query = http_build_query($post);
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // Tell cURL that it should only spend X seconds trying to connect to the URL in question.
    curl_setopt($curl, CURLOPT_TIMEOUT, 10); // A given cURL operation should only take X seconds max.
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // returns data to function
    curl_setopt($curl, CURLOPT_POSTFIELDS, $query);
    $data = curl_exec($curl);

    if ( curl_errno($curl) )
        throw new Exception(curl_error($curl));

    curl_close($curl);

    return $data;
}

获取

  

致命错误:未捕获异常:操作在10000毫秒后超时,在第X行的D:\ ... \ html \ test.php中收到0字节

     

异常:操作在10000毫秒后收到0字节时超时

3 个答案:

答案 0 :(得分:1)

要使file_get_contents()打开URL,您必须在php.ini文件中启用allow_url_fopen设置。

安全方面我会建议你用cURL来实现你的目标:

function get_content($url,$post){
    $query = http_build_query($post);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $URL);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // returns data to function
    curl_setopt($ch, CURLOPT_POSTFIELDS,$query);
    $data = curl_exec($ch);
    // if you want to display error messages, do it before curl_close()
    //echo curl_errno($ch); // if you want to display error number
    //echo curl_error($ch); // if you want to display error message
    curl_close($ch);
    return $data;
}

echo get_content('http://localname.local/directory/page.php');

答案 1 :(得分:0)

我认为您需要增加CURLOPT_TIMEOUT时间

答案 2 :(得分:0)

真正的问题

  1. test.php使用session_start()
  2. test.phpPOST request
  3. 上发布page.php
  4. page.php使用session_start() <<<冷冻
  5. 我们不能同时使用2个PHP会话。会话锁定并创建无限循环。

    谢谢大家帮我找到解决方案。