我目前有一個腳本,它使用curl來檢查每次用戶訪問頁面時大約3000個圖像的文件大小。這是因爲每次內容可能會改變。PHP比curl更快檢查遠程圖像文件大小約3000倍?
如果它匹配7442字節的大小,它會更改圖像的路徑,如果不是,則保持它的源。
圖像URL存儲在$ variable,mysql以及遠程和本地xml文件中。但圖像自身總是遠程存儲。
$image = 'http://remoteserver.com/user22.jpg';
//Check if all thumbs are ok real and available
$ch = curl_init($image);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
$data = curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);
if($size == 7442){
echo '<img src="https://www.newdomain.com/tmp.jpg" height="190.11"/></a>';
} else {
echo '<img src="' . $image . '" alt="' . $user . '" /></a>';
}
當它被激活時,頁面大約需要40秒加載,當它被註釋掉時,它需要3秒鐘。但是每次用戶訪問網頁時都會執行該操作,或者如果在向mysql添加數據並在mysql中更改地址之前執行curl操作,會導致將該信息加載到該mysql的大量延遲,從而無法顯示所有圖像。
我知道有很多取決於這個檢查,這兩個服務器響應時間,PHP配置等等..但我真的需要這個圖像文件檢查工作,並且不能有40秒的加載時間每次用戶訪問該頁面。
任何建議/幫助?謝謝
將其作爲後臺進程運行,而不是作爲Web請求的一部分 –
您可以使用memcache或其他方式來存儲圖像URL重新路由的集合。定期後臺服務(PHP腳本)可以定期運行以檢查文件大小並將重新路由的URL添加到memcache。您可以獲取在memcache中查找的函數的圖像URL,如果找到則返回鍵,否則返回原始URL。 – jcorry
謝謝Mark Baker和Jcorry。原來的url實際上存儲在mysql中,但只有url,沒有大小信息。這將消除對memcache的需求? –