PHP重命名()在大循环中

时间:2015-04-20 20:46:18

标签: php mysql timeout rename

我在数据库中有大约400个项目,每个项目都有6-8个.jpeg存储在一个目录中,并以项目的ID命名(即项目1234 ---> 1234_1.jpg,1234_2.jpg等。 )。 长话短说,我需要更改数据库中的所有项ID。然后我需要对jpegs做同样的事情,以便它们匹配。

我担心在循环遍历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++;
}

2 个答案:

答案 0 :(得分:1)

有400条记录,不可能超时。 (如果你真的想要,你可以调用set_time_limit(0),但我怀疑它是否必要。)请务必先复制你的桌子,这样你就不会丢失你的映射。你的重命名并没有按计划进行。

答案 1 :(得分:0)

这种方法很好。

我不明白为什么你会遇到任何麻烦。

只要这样做,如果你有问题,然后就会诊断出来。