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,这样你就不会丢失你的映射您重命名的事件没有按计划进行。