如果表中不存在相应的记录(php/mysql),则需要从Web服务器中删除文件(图像)
我每天上传几千张图片到我的网络服务器上 图像文件名的格式如下:photoXXXXXXX-Y.jpeg,其中XXXXXXX是记录id,Y是图像数。(示例-photo1357936-2.jpeg) 在MySQL表中,有一列包含记录id(sysid)和一列Y(num_of_photos)。最多有12个图像与id关联 该表每天更新,并添加或删除包含id的记录 我需要以某种方式遍历id,并与图像文件名的记录id部分进行比较,然后删除不再与给定id关联的图像 或者将图像文件名的记录id部分与id进行比较,并删除孤立图像。无论哪个逻辑更合理 我可以使用CRON自动完成这项任务,并知道如何取消设置以删除文件,但不确定从何处开始删除其余文件 有什么想法吗 有什么想法吗 你实际上回答了你自己的问题 我需要以某种方式遍历id,并与图像文件名的记录id部分进行比较,然后删除不再与给定id关联的图像 给你一些面包屑: 1) 迭代文件/文件夹以获取文件名(可能是递归的)(&T) 2) 获取文件名的X和Y部分 3) (当然之前使用如果表中不存在相应的记录(php/mysql),则需要从Web服务器中删除文件(图像),php,mysql,Php,Mysql,我每天上传几千张图片到我的网络服务器上 图像文件名的格式如下:photoXXXXXXX-Y.jpeg,其中XXXXXXX是记录id,Y是图像数。(示例-photo1357936-2.jpeg) 在MySQL表中,有一列包含记录id(sysid)和一列Y(num_of_photos)。最多有12个图像与id关联 该表每天更新,并添加或删除包含id的记录 我需要以某种方式遍历id,并与图像文件名的记录id部分进行比较,然后删除不再与给定id关联的图像 或者将图像文件名的记录id部分与id进行比较,并
mysql\u connect
等)获取X和Y的记录
4) 查看数据库中是否有条目
5) 如果没有:
谢谢你
太好了!我会试试你的建议。谢谢你的帮助。:)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// path to the images
$path_img='./media/images/inside/gallery';
// where images are listed in database
$table_name='gallery';
$field_name='file';
// unnecessary parts of filenames
$odd_tokens = array("_small", ".jpg", ".");
// limit number of image files to check, set to 10 for testing
$limit=10;
echo "begin\r\n";
//connection constants
include './application/config/config.php';
try{
$pdo = new PDO( 'mysql:host='.config::$db_server.';dbname='.config::$db_name, config::$db_user, config::$db_pass );
}
catch (Exception $e){
echo $e->getMessage();
exit();
}
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$r=$pdo->query('select count(1) cnt from '.$table_name)->fetch();
echo 'count images in database: '.$r['cnt']."\r\n";
// reset some counters
$cnt_files=0;
$cnt_checked=0;
$cnt_not_found=0;
$cnt_found=0;
$path=$path_img;
if ($handle = opendir($path)) {
while ($cnt_files != $limit && false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
$cnt_files++;
if($entry > "") {
$cnt_checked++;
$img_name = str_replace ($odd_tokens,'',$path . '/' . $entry);
if(!checkExistsDb($pdo, $img_name, $table_name, $field_name)) {
$cnt_not_found++;
echo 'rm ' . $path . '/' . $entry . "\r\n";
//this will delete files unlink($path.'/'.$entry);
} else {
$cnt_found++;
}
}
}
}
closedir($handle);
}
else echo 'not found: '.$path."\r\n";
unset($pdo);
echo 'files: '.$cnt_files.' checked: '.$cnt_checked.' not_found: '.$cnt_not_found.' found: '.$cnt_found;
function checkExistsDb($pdo, $img_name, $table_name, $field_name) {
try{
$st = $pdo->prepare('SELECT ' . $field_name . ' FROM ' . $table_name . ' WHERE '. $field_name . '=:filename');
$st->execute(array(':filename'=>$img_name));
$result = $st->fetchAll();
}
catch (PDOException $e) {
echo $e->getMessage();
}
return $result?true:false;
}