2014-04-02 57 views
0

刪除我的MySQL表hravaj00_dily並有列PART_IDimg150imgfull。在img150和imgfull存儲圖片的網址。 此表從xml feed btw更新。MySQL的搜索不存在的網址,並從數據庫

是否有PHP解決方案要通過列img150(或imgfull),檢查url是否存在(404錯誤),並從數據庫中刪除所有這些行與不存在的URL ..?

我已閱讀下面這個函數檢查url的http標頭。這有用嗎?我不知道如何使用它。

function file_external_exists($url) 
{ 
    $headers = @get_headers($url); 
    if(preg_match("|200|",$headers[0])) 
    return(true); 
    else return(false); 
} 
+2

可能重複http://stackoverflow.com/questions/408405/easy-way-to-test-a-url-for-404-in-php –

+0

捲曲是你的瓶頸,你需要平行的要求在這裏...看看https://github.com/Bonnevoy/php-mcurl或類似 –

回答

2
$con=mysqli_connect("example.com","peter","abc123","my_db"); 
$result = mysqli_query($con,"SELECT * FROM hravaj00_dily"); 

while($row = mysqli_fetch_array($result)) { 
    $url = $row['img150']; 
    if(!urlExists($url)) { 
    $nonExistent[] = $row['id']; // Assuming you have primary key 
    } 
} 

if($nonExistent) { 
    $nonExistentCSV = implode(",", $nonExistent); 
    $delQuery = "DELETE FROM hravaj00_dily WHERE id IN " . $nonExistentCSV; 
    mysqli_query($con, $delQuery); 
} 


mysqli_close($con); 

// Ref: http://stackoverflow.com/questions/408405/easy-way-to-test-a-url-for-404-in-php 
function urlExists($url) { 
    $handle = curl_init($url); 
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE); 

    $response = curl_exec($handle); 

    $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE); 
    if($httpCode == 200) { 
    curl_close($handle); 
    return true; 
    } 
    curl_close($handle); 
    return false; 
} 
  • 我正在閱讀所有行和捲曲請求來檢查它是否存在。一旦所有的網址都是支票,我馬上更新。
  • 它更好地運行低數量的數據庫查詢,並且最好不要在循環內運行查詢。您可以考慮在循環內部批量運行100或1000個查詢。
  • 您可能想要在使用sleep()函數之間休息一段時間,否則如果圖像服務器超載,則可能會阻止您的請求。
  • 您可能不想一次檢查全部,最好根據服務器功能獲得幾行(如100或1000)。
  • 您可能需要檢查,如果運行這個PHP是多於30秒(這是默認值n的php.ini
  • 您可能必須增加用於在php.ini PHP腳本的執行最大內存
0
  1. 獲取所有記錄
  2. 在它們之間迭代
  3. 對於每個記錄調用這個函數來檢查,如果存在的話
  4. 如果是這樣,那麼由ID刪除記錄
+0

我不會那樣做,我要麼一次更新所有人,要麼批量更新10,50或100個。確保數據庫沒有加載太多請求 –

+0

然後收集ID和d最後請求。 – Cysioland