2014-09-20 105 views
0

我有一个文件夹,其中包含数千张图片为我的网站的产品,看起来像这样:使用断开链接删除和重命名文件()和重命名()

D25200-1.jpg 
D25200-2.jpg 
D25200-3.jpg 
D25201-1.jpg 
D25201-2.jpg 
D25201-3.jpg 
D25201-4.jpg 

这意味着,该产品D25200有3张照片和D25201有4张照片。

我想删除一些图片,但是从1保持计数例如,如果我删除D25201-1.jpgD25201-2,图像的其余部分得到更名为D25201-1.jpgD25201-2.jpg

这是我创建至今的代码,但它只是删除了照片:

<?php 
$codes = array(
    'D25201' => '1,2' 
); 

$dirs = array(
    dirname(__FILE__) . '/products/', 
    dirname(__FILE__) . '/products/large/', 
    dirname(__FILE__) . '/products/medium/', 
    dirname(__FILE__) . '/products/small/' 
); 

foreach($codes as $code => $photos) { 
    $photos = explode(',', $photos); 

    foreach($photos as $photo) { 
     foreach($dirs as $dir) { 
      unlink($dir . $code . '-' . $photo . '.jpg'); 
     } 
    } 
} 
?> 
+0

您是否需要保持相同的顺序? – 2014-09-20 15:53:37

+0

是的,如果可能的话,但这不是很重要。 – 2014-09-20 16:03:52

+0

$ code数组是否包含要删除的项目? – 2014-09-20 16:14:11

回答

0

我没有带过的时间来测试这一点,但这样的事情应该这样做(或至少给你在一个可能的方向暗示图中的其余部分出自己):

$codes = array(
    'D25201' => '1,2' 
); 

$dirs = array(
    dirname(__FILE__) . '/products/', 
    dirname(__FILE__) . '/products/large/', 
    dirname(__FILE__) . '/products/medium/', 
    dirname(__FILE__) . '/products/small/' 
); 

foreach($codes as $code => $photos) { 
    $photos = explode(',', $photos); 

    foreach($photos as $photo) { 
     foreach($dirs as $dir) { 
      if(unlink($dir . $code . '-' . $photo . '.jpg');){ 
       //if unlink is successfull... loop all images in current dir 
       $files = scandir($dir); 
       $c = 0; 
       foreach($files as $file){ 
        $c++; 
        //if the name of the image contains the productcode 
        if(strpos($file,$code) !== false){ 
         //rename the file 
         rename ($file , $dir . $code . '-' . $c . '.jpg'); 
        } 
       } 
      } 
     } 
    } 
} 

有可能是一个更好的方法,使用较少的循环,但这样的事情应该工作。