MySQL搜索不存在的URL并从数据库中删除

时间:2014-04-02 13:13:12

标签: php mysql url

我有mysql表 hravaj00_dily ,列 part_id img150 imgfull 。在img150和imgfull中存储了图像的URL。 此表格从xml feed btw。

更新

是否有任何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 个答案:

答案 0 :(得分: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;
}
  • 我正在读取所有行并发出curl请求以检查它是否存在。一旦所有的网址都是支票,我就会立即更新。
  • 最好运行少量的数据库查询,并且最好不要在循环内运行查询。您可以考虑在循环内以100或1000的批量运行查询。
  • 您可能希望在使用sleep()函数之间休眠一段时间,否则如果图像服务器过载则可能会阻止您的请求。
  • 您可能不想一次性检查所有内容,最好根据服务器功能获得100或1000这样的行。
  • 您可能必须检查此php的运行时间是否超过30秒(默认值为n php.ini
  • 您可能必须增加为执行php.ini
  • 中的php脚本而分配的最大内存

答案 1 :(得分:0)

  1. 获取所有记录
  2. 迭代他们
  3. 对于每条记录,请调用此函数进行检查(如果存在)
  4. 如果是,则删除该ID
  5. 的记录