PHP file_get_contents ignoring timeout?

后端 未结 1 2034
名媛妹妹
名媛妹妹 2020-12-06 10:47
$url = \'http://a.url/i-know-is-down\';

//ini_set(\'default_socket_timeout\', 5);

$ctx = stream_context_create(array(
    \'http\' => array(
        \'timeout\'         


        
相关标签:
1条回答
  • 2020-12-06 11:18

    You are setting the read timeout with socket_create_context. If the page you are trying to access doesn't exist then the server will let you connect and give you a 404. However, if the site doesn't exist (won't resolve or no web server behind it), then file_get_contents() will ignore read timeout because it hasn't even timed out connecting to it yet.

    I don't think you can set the connection timeout in file_get_contents. I recently rewrote some code to use fsockopen() exactly because it lets you specify connect timeout

    $connTimeout = 30 ;
    $fp = fsockopen($hostname, $port, $errno, $errstr, $connTimeout);
    

    Ofcourse going to fsockopen will require you to then fread() from it in a loop, compicating your code slightly. It does give you more control, however, on detecting read timeouts while reading from it using stream_get_meta_data()

    http://php.net/stream_get_meta_data

    0 讨论(0)
提交回复
热议问题