執行、獲取遠程代碼返回:file
2024-07-09 22:43:17
供稿:網友
天氣終于晴了,但問題來了。在實現兩個站點間用戶數據同步,當使用php函數 file_get_contents抓取執行遠程頁面時,如果連接超時將會輸出一個Fatal Error或相當的慢,結果導致下面的代碼不能運行。先了解一下PHP file_get_contents() 函數
定義和用法
file_get_contents() 函數把整個文件讀入一個字符串中。
和 file() 一樣,不同的是 file_get_contents() 把文件讀入一個字符串。
file_get_contents() 函數是用于將文件的內容讀入到一個字符串中的首選方法。如果操作系統支持,還會使用內存映射技術來增強性能。
語法
file_get_contents(path,include_path,context,start,max_length)參數 描述
path 必需。規定要讀取的文件。
include_path 可選。如果也想在 include_path 中搜尋文件的話,可以將該參數設為 "1"。
context 可選。規定文件句柄的環境。
context 是一套可以修改流的行為的選項。若使用 null,則忽略。
start 可選。規定在文件中開始讀取的位置。該參數是 PHP 5.1 新加的。
max_length 可選。規定讀取的字節數。該參數是 PHP 5.1 新加的。
說明
對 context 的支持是 PHP 5.0.0 添加的。
針對超時或頁面過慢,一般可采取兩個解決方案:
一. 利用file_get_contents()第三個參數
復制代碼 代碼如下:
$url = "http://zhoz.com/zhoz.php";
$ctx = stream_context_create(array(
‘http' => array(‘timeout' => 10)
)
);
$result = @file_get_contents($url, 0, $ctx);
if($result){
var_dump($result);
}else{
echo " Buffer is empty";
}
?>
此方法1,我經測試在本地反映良好,但如果在外網測試(環境:中國→美國服務器間)基本都是超時的情況。
測試了TimeOut基本沒有用了,建議以下方式
二. 使用curl擴展庫
復制代碼 代碼如下:
$url = "http://zhoz.com/zhoz.php";
try {
echo date(‘Y-m-d h:i:s');
echo "";
//$buffer = file_get_contents($url);
$buffer = zhoz_get_contents($url);
echo date(‘Y-m-d h:i:s');
if(emptyempty($buffer)) {
echo " Buffer is empty";
} else {
echo " Buffer is not empty";
}
} catch(Exception $e) {
echo "error ";
}