關於file_get_contents的高級用法,首先解決file_get_contents的逾時問題,在逾時返回錯誤後就象js中的settimeout那樣進行一次嘗試,錯誤超過3次或者5次後就確認為無法連線伺服器而徹底放棄。
這裡就簡單介紹兩種解決方案:
一、增加逾時的時間限制
注意:set_time_limit只是設定你的PHP程式的逾時時間,而不是file_get_contents函數讀取URL的逾時時間。
我一開始以為set_time_limit也能影響到file_get_contents,後來經測試是無效的。真正的修改file_get_contents延時可以用resource $context的timeout參數:
PHP程式碼如下:
$opts = array( 'http'=>array( 'method'=>"GET", 'timeout'=>60, ));$context = stream_context_create($opts);$html =file_get_contents('http://www.php.cn', false, $context);fpassthru($fp);
二、多次嘗試
PHP程式碼如下:
$cnt=0;while($cnt < 3 && ($str=@file_get_contents('http...'))===FALSE){ $cnt++;}
以上方法對付逾時已經OK了。接下來示範一下用file_get_contents實現Post,如下:
PHP程式碼
function Post($url, $post = null){ $context = array(); if (is_array($post)) { ksort($post); $context['http'] = array ( 'timeout'=>60, 'method' => 'POST', 'content' => http_build_query($post, '', '&'), ); } return file_get_contents($url, false, stream_context_create($context));}$data = array ( 'name' => 'test', 'email' => 'test@gmail.com', 'submit' => 'submit',);echo Post('http://www.php.cn', $data);
注意文檔頭的Set_time_out否則整個文檔都得逾時了。
相關推薦:
php fopen()和file_get_contents()的區別詳細講解
php中比file_get_contents()更優的cURL的執行個體詳解
有關file_get_contents的文章推薦10篇