給定一個 遠程圖片地址(http地址) 然後用curl 請求 通過檢查返回的 訊息頭 判斷遠程圖片是否存在
但是這裡有個嚴重的效率問題就是訊息體
訊息體把圖片也給返回了 有設定可以 只產生訊息體 讓訊息體為空白或者或不產生訊息體嗎
//檢查遠程檔案function checkRemoteFile($file_name, $path) { $path = $path . "/" . $file_name; $ch = curl_init(); $timeout = 30; //在嘗試串連時等待的秒數。設定為0,則無限等待。 curl_setopt($ch, CURLOPT_URL, $path); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $contents = curl_exec($ch);//echo $contents; if (preg_match("/404/", $contents)) { echo '0'; return false; } elseif(preg_match("/200/", $contents)) { echo $contents; return true; }}
回複內容:
給定一個 遠程圖片地址(http地址) 然後用curl 請求 通過檢查返回的 訊息頭 判斷遠程圖片是否存在
但是這裡有個嚴重的效率問題就是訊息體
訊息體把圖片也給返回了 有設定可以 只產生訊息體 讓訊息體為空白或者或不產生訊息體嗎
//檢查遠程檔案function checkRemoteFile($file_name, $path) { $path = $path . "/" . $file_name; $ch = curl_init(); $timeout = 30; //在嘗試串連時等待的秒數。設定為0,則無限等待。 curl_setopt($ch, CURLOPT_URL, $path); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $contents = curl_exec($ch);//echo $contents; if (preg_match("/404/", $contents)) { echo '0'; return false; } elseif(preg_match("/200/", $contents)) { echo $contents; return true; }}
不用curl不就行了,fopen好像也可以開啟遠程檔案吧。
$hd = fopen($remoteUrl, 'r');if ($hd === false) die('404')else fclose($hd);
哦,看到你的評論了,用 curl_setopt($ch, CURLOPT_NOBODY, true); 看看
curl不可以嗎?你試試這個呢!
public function checkRemoteHttpFileExists($url) { $curl = curl_init($url); // 不取回資料 curl_setopt($curl, CURLOPT_NOBODY, true); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); // @curl_setopt($curl, CUROPT_RETURNTRANSFER,1); // 發送請求 $result = @curl_exec($curl); $found = false; // 如果請求沒有發送失敗 if ($result !== false) { // 再檢查http響應碼是否為200 $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($statusCode == 200) { $found = true; } } curl_close($curl); return $found;}