PHP 大循环中的 rename( )
PHP rename( ) in large loop
我在数据库中大约有 400 个项目,每个项目有 6-8 个 .jpeg 存储在一个目录中并以项目的 ID 命名(即项目 1234 ---> 1234_1.jpg,1234_2.jpg, ETC...)。
长话短说,我需要更改数据库中的所有项目 ID。然后我需要对 jpeg 执行相同的操作,以便它们匹配。
我担心在循环 400 条记录时使用 rename() 函数会导致超时,或者这可能不是最有效的方法。
有人有解决此问题的其他解决方案或提示吗?
提前致谢!
$img_dir = $_SERVER["DOCUMENT_ROOT"]."/images/items/";
$newID = 3001;
$getItems = $pdo->query("SELECT * FROM items ORDER BY RAND()");
while ($row = $getItems->fetch()){
$currentID = $row["id"];
// UPDATE TABLE 1
$update = $pdo->query("UPDATE items SET old_id = $currentID, new_id = $newID WHERE id=$currentID");
// UPDATE TABLE 2
$update2 = $pdo->query("UPDATE items_assoc SET item_id = $newID WHERE item_id=$currentID");
// UPDATE JPEGS
if (file_exists($img_dir."originals/".$currentID."_1.jpg")){
rename($img_dir."originals/".$currentID."_1.jpg",$img_dir."originals/".$newID."_1.jpg");
rename($img_dir."650/".$currentID."_1.jpg",$img_dir."650/".$newID."_1.jpg");
rename($img_dir."220/".$currentID."_1.jpg",$img_dir."220/".$newID."_1.jpg");
rename($img_dir."100/".$currentID."_1.jpg",$img_dir."100/".$newID."_1.jpg");
}
if (file_exists($img_dir."originals/".$currentID."_2.jpg")){
rename($img_dir."originals/".$currentID."_2.jpg",$img_dir."originals/".$newID."_2.jpg");
rename($img_dir."650/".$currentID."_2.jpg",$img_dir."650/".$newID."_2.jpg");
rename($img_dir."220/".$currentID."_2.jpg",$img_dir."220/".$newID."_2.jpg");
rename($img_dir."100/".$currentID."_2.jpg",$img_dir."100/".$newID."_2.jpg");
}
if (file_exists($img_dir."originals/".$currentID."_3.jpg")){
rename($img_dir."originals/".$currentID."_3.jpg",$img_dir."originals/".$newID."_3.jpg");
rename($img_dir."650/".$currentID."_3.jpg",$img_dir."650/".$newID."_3.jpg");
rename($img_dir."220/".$currentID."_3.jpg",$img_dir."220/".$newID."_3.jpg");
rename($img_dir."100/".$currentID."_3.jpg",$img_dir."100/".$newID."_3.jpg");
}
$newID++;
}
这个方法很好
我不明白你为什么会遇到任何麻烦。
就去做吧,如果你有问题,然后诊断。
对于 400 条记录,不太可能出现超时。 (如果你真的想要,你可以调用 set_time_limit(0),但我怀疑它是否有必要。)请务必先复制你的 table,这样你就不会丢失你的映射您重命名的事件没有按计划进行。
我在数据库中大约有 400 个项目,每个项目有 6-8 个 .jpeg 存储在一个目录中并以项目的 ID 命名(即项目 1234 ---> 1234_1.jpg,1234_2.jpg, ETC...)。 长话短说,我需要更改数据库中的所有项目 ID。然后我需要对 jpeg 执行相同的操作,以便它们匹配。
我担心在循环 400 条记录时使用 rename() 函数会导致超时,或者这可能不是最有效的方法。
有人有解决此问题的其他解决方案或提示吗? 提前致谢!
$img_dir = $_SERVER["DOCUMENT_ROOT"]."/images/items/";
$newID = 3001;
$getItems = $pdo->query("SELECT * FROM items ORDER BY RAND()");
while ($row = $getItems->fetch()){
$currentID = $row["id"];
// UPDATE TABLE 1
$update = $pdo->query("UPDATE items SET old_id = $currentID, new_id = $newID WHERE id=$currentID");
// UPDATE TABLE 2
$update2 = $pdo->query("UPDATE items_assoc SET item_id = $newID WHERE item_id=$currentID");
// UPDATE JPEGS
if (file_exists($img_dir."originals/".$currentID."_1.jpg")){
rename($img_dir."originals/".$currentID."_1.jpg",$img_dir."originals/".$newID."_1.jpg");
rename($img_dir."650/".$currentID."_1.jpg",$img_dir."650/".$newID."_1.jpg");
rename($img_dir."220/".$currentID."_1.jpg",$img_dir."220/".$newID."_1.jpg");
rename($img_dir."100/".$currentID."_1.jpg",$img_dir."100/".$newID."_1.jpg");
}
if (file_exists($img_dir."originals/".$currentID."_2.jpg")){
rename($img_dir."originals/".$currentID."_2.jpg",$img_dir."originals/".$newID."_2.jpg");
rename($img_dir."650/".$currentID."_2.jpg",$img_dir."650/".$newID."_2.jpg");
rename($img_dir."220/".$currentID."_2.jpg",$img_dir."220/".$newID."_2.jpg");
rename($img_dir."100/".$currentID."_2.jpg",$img_dir."100/".$newID."_2.jpg");
}
if (file_exists($img_dir."originals/".$currentID."_3.jpg")){
rename($img_dir."originals/".$currentID."_3.jpg",$img_dir."originals/".$newID."_3.jpg");
rename($img_dir."650/".$currentID."_3.jpg",$img_dir."650/".$newID."_3.jpg");
rename($img_dir."220/".$currentID."_3.jpg",$img_dir."220/".$newID."_3.jpg");
rename($img_dir."100/".$currentID."_3.jpg",$img_dir."100/".$newID."_3.jpg");
}
$newID++;
}
这个方法很好
我不明白你为什么会遇到任何麻烦。
就去做吧,如果你有问题,然后诊断。
对于 400 条记录,不太可能出现超时。 (如果你真的想要,你可以调用 set_time_limit(0),但我怀疑它是否有必要。)请务必先复制你的 table,这样你就不会丢失你的映射您重命名的事件没有按计划进行。