Php MySQL搜索不存在的URL并从数据库中删除
我有mysql表hravaj00\u dily,有列part\u id,img150,imgfull。在img150和imgfull中,存储了指向图像的URL。 顺便说一句,此表是从xml提要更新的 是否有任何PHP解决方案可以通过img150列(或imgfull),检查url是否存在(404错误),并从数据库中删除所有这些不存在url的行 我已经阅读了下面这个函数,它检查url的http头。这有用吗?我不知道如何准确地使用它Php MySQL搜索不存在的URL并从数据库中删除,php,mysql,url,Php,Mysql,Url,我有mysql表hravaj00\u dily,有列part\u id,img150,imgfull。在img150和imgfull中,存储了指向图像的URL。 顺便说一句,此表是从xml提要更新的 是否有任何PHP解决方案可以通过img150列(或imgfull),检查url是否存在(404错误),并从数据库中删除所有这些不存在url的行 我已经阅读了下面这个函数,它检查url的http头。这有用吗?我不知道如何准确地使用它 function file_external_exists($url
function file_external_exists($url)
{
$headers = @get_headers($url);
if(preg_match("|200|",$headers[0]))
return(true);
else return(false);
}
- 我正在读取所有的行并发出curl请求以检查它是否存在。一旦所有的URL都检查完毕,我会立即更新它
- 最好运行少量的数据库查询,最好不要在循环中运行查询。可以考虑在循环内的批处理100或1000中运行查询。
- 您可能希望使用sleep()函数在这两者之间休眠一段时间,否则,若映像服务器过载,它可能会阻止您的请求
- 您可能不想一次检查所有行,最好根据服务器的性能获得一些行,比如100或1000李>
- 您可能需要检查此php的运行时是否超过30秒(这是默认值n php.ini)
- 您可能必须增加为在php.ini中执行php脚本而分配的最大内存
$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;
}