我正在尝试删除目前不在我的数据库中的文件夹(称为“照片”)中的照片。 (这些都是随着我一直在建立网站并对其进行测试而叠加的照片等等,所以现在是时候把网站带到现场了,我不希望所有这些都浪费在其中)
我有三张桌子,里面有照片信息,还有很多列。下面是关于我认为它应该是什么样子的模型查询。
SELECT left_image, right_image, photo1, photo2, photo3, photo4, home_photo
FROM about_photos, facilities, home
left_image
和right_image
与about_photos
一起使用。
photo1
,photo2
,photo3
和photo4
与facilities
一起使用。
home_photo
与home
一起使用。
另外,我需要在照片的末尾使用通配符,因为文件有缩略图,所以例如原始照片会被调用abcimage.jpg
,但会有abcimage.jpg
,{ {1}},abcimage_medium.jpg
也在我只存储的数据库abcimage_thumb.jpg
中,并根据文件的位置添加文件名的其余部分。
答案 0 :(得分:2)
$directory = "../path/to/photos_directory/";
//get all image files with a .jpg extension.
$images = glob($directory . "*.jpg");
foreach($images as $image)
{
$name = explode('_',$image);
$name = 'photos/' . $name[0];
$sql = mysql_query("SELECT id FROM table WHERE photo1='$name' OR photo2='$name'");
if(mysql_num_rows($sql) == 0)
unlink($directory . $image);
}
答案 1 :(得分:0)
您有两种选择:
一:
<强>两个强>
确切的SQL查询取决于您未提供的表结构。
最佳选择主要取决于规模。如果数据库中有大量图像,则第一个选项涉及在内存中有一个非常大的列表。但是,第二个版本涉及更多数据库查询。所以这是一个权衡。
有更复杂的选项涉及缓存和先发制人的查询,但我想你不想那么深入。
答案 2 :(得分:0)
如下所示。我在文件夹中也有原始文件,我一次限制为500次删除。根据需要调整。希望它能节省一些时间......
<?php
require 'session.php';
require 'settings.php';
/* Execute the query. */
$DBH = new PDO($mssql_driver.'='.$mssql_server.';'.$mssql_dbkey.'='.$mssql_database, $mssql_username, $mssql_password);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$tsql = 'select * from ProductImage';
$PRE = $DBH->prepare($tsql);
$PRE->execute();
$pictures =$PRE->fetchAll(PDO::FETCH_ASSOC);
$directory = $_SERVER["DOCUMENT_ROOT"]."\..\..\products\pictures/";
//get all image files with a .jpg extension.
$images = glob($directory . "*.jpg");
$counter =0;
foreach($images as $image)
{
$name = explode('pictures/',$image);
$name = $name[1];
$foundImage = false;
print "checking: ".$name;
foreach ($pictures as $picture){
$original_file = explode('.', $picture['Image_Big']);
$original_file = $original_file[0].'-original.'.$original_file[1];
if ( ($picture['Image_Small'] == $name)|| ($picture['Image_Big'] == $name) || ( $original_file == $name) || ($picture['Image_Thumb'] == $name) || ($picture['Image_PriceList'] == $name)){
$foundImage = true;
break;
}
}
if (!$foundImage) {
unlink($directory . $name);
print "....deleting";
$counter += 1;
}
print "<br />";
if ($counter> 500){
exit;
}
}
&GT;