代码之家  ›  专栏  ›  技术社区  ›  The Surrican

php重命名行为怪异?

  •  0
  • The Surrican  · 技术社区  · 16 年前

    <?
    chdir("data");
    $files = glob("*");
    shuffle($files);
    var_dump($files);
    $i=0;
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
    foreach($files as $file) {
      $i++;
      $k = $i;
      $mime = finfo_file($finfo, $file);
      if(strpos($mime,"gif") !== false) {
        $ext = "gif";
      } else {
        $ext = "jpg";
      }
      if($k < 10) {
        $k = "00".$k;
      } else if($k < 100) {
        $k = "0".$k;
      }
      $k = $k.".".$ext;
      rename($file,$k);
      echo $k."\n";
    }
    

    文件夹数据中包含一些图像文件(jpg和gif)。 三分之二的图片被删除了。。。 我不明白怎么回事?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Gus    16 年前

    我在代码中看不到任何会导致这种行为的东西。我能想到的最有可能的原因是 rename($file,$k);

    if(file_exists($k.".".$ext)) {
        $k .= ".0" ;
    }
    while(file_exists($k.".".$ext)) {
        $k .= "0" ;
    }
    $k = $k.".".$ext;
    rename($file,$k);
    

    我的另一个想法是也许 chdir("data")

        2
  •  1
  •   lawnjam    16 年前

    在将$file重命名为$k之前,最好检查$k是否存在:

    if(!is_file($k)) {
        rename($file, $k);
    }
    
    推荐文章