2016-03-03 50 views
0

我有一堆隨機名稱的照片,我想在網上發佈,所以他們需要改名爲1.jpg,2.jpg,3.jpg等;PHP文件重命名神祕沒有錯誤圖像丟失

我寫了下面的代碼來實現這一目標

$i = 1; 
if ($handle = opendir($path)) { 
    while (false !== ($file = readdir($handle))) { 
     if ($file != "." && $file != ".." && is_file($path.'/'.$file)) { 
      $oldname = $path.'/'.$file; 
      $path_info = pathinfo($oldname);    
      rename($oldname, $path.'/'.($i).'.'.'jpg'); 
      echo "Old name = <b>".$oldname."</b></br>"; 
      echo "New name = <b>".$path.'/'.($i).'.'.'jpg'."</b></br></br>"; 
      $i++; 
     } 
    } 
    closedir($handle); 
} 

和神奇的事情發生運行此腳本只有14圖片用名1.JPG剩餘,10.JPG到22.jpg後有22個文件的文件夾中當我再次刷新時,現在只剩下6張圖片,現在名字是1.jpg到6.jpg,即使經過一次又一次的刷新後,它們並沒有改變。

我嘗試註釋掉rename($oldname, $path.'/'.($i).'.'.'jpg');只是爲了看看生成的內容舊名稱和新名稱,而另一類是totlly罰款像無論是新的名稱所產生的舊名稱是什麼我是想1.JPG到22.jpg

我嘗試了幾乎相同的代碼,將.JPG擴展名更改爲.jpg擴展名,因爲linux服務器對文件命名是區分大小寫的,而Windows不是此代碼全部工作正常;

if ($handle = opendir($path)) { 
    while (false !== ($file = readdir($handle))) { 
     if ($file != "." && $file != ".." && is_file($path.'/'.$file)) { 
      $oldname = $path.'/'.$file; 
      $path_info = pathinfo($oldname); 
      echo $sub= substr($file,0,-4); 
      echo "<br>"; 
      rename($oldname, $path.'/'.($sub).'.'.'jpg'); 
     } 
    } 
    closedir($handle); 
} 

它在印度的早晨上午2點40,我只是一個學生這個問題是不是讓我去睡眠模式,請幫助我。

+0

我把我的賭注放在一個路徑問題上。打印完整路徑,檢查權限... – Bramastic

+1

是否有像'1.jpg'到'22.jpg'這樣的原始名稱?如果是,那麼當您嘗試將其他文件重命名爲相同名稱時,您將刪除這些文件。 – Barmar

+0

你檢查了php_errors.log嗎? –

回答

0

通過重新思考()後,我得到了點爲什麼這段代碼不起作用,爲什麼它爲擴展名重命名工作。

重命名函數將2個參數作爲文件的舊名稱和新位置的名稱,它也可以移動文件,如果已有文件在新位置或同一位置存在相同名稱,它將簡單地覆蓋它並不會通過任何錯誤。

要理解這一點讓我們的例子中有攝影文件夾22張圖片來自1.JPG命名22.jpg但隨機順序一樣1.JPG,10.JPG,15.jpg等

然後這段代碼將取1.jpg並將其重命名爲1.jpg,但是下一次循環時,將需要10.jpg(這是該文件夾中的第二個文件)並將其重命名爲2.jpg好的,那就是從代碼中可以看出,但是在第二個代碼中已經存在一個名爲2.jpg的文件,它只是被代碼覆蓋而沒有任何錯誤,從而導致數據丟失。

現在你會說爲什麼黑客圖像像1.jpg,10.jpg那樣排列,如果存在2.jpg而不是爲什麼他們沒有被命令爲1.jpg和2.jpg? 答案很簡單一些圖片有.jpg和一些.JPG圖片.JPG得到了優先權。

爲了克服這個問題,你需要做大部分軟件的工作。 WinRAR你將需要一個臨時文件夾來移動你的文件,然後再將文件移動到源文件夾,代碼將會像下面這樣。

<?php 
$path="test"; 
$i = 1; 
if ($handle = opendir($path)) { 
    while (false !== ($file = readdir($handle))) { 
     if ($file != "." && $file != ".." && is_file($path.'/'.$file)) { 
      $oldname = $path.'/'.$file; 
      $path_info = pathinfo($oldname);    
      rename($oldname, "tmp".'/'.($i).'.'.'jpg'); 
      echo "Old name = <b>".$oldname."</b></br>"; 
      echo "New name = <b>"."tmp".'/'.($i).'.'.'jpg'."</b></br></br>"; 
      $i++; 
     } 
    } 
    closedir($handle); 
} 
$path="tmp"; 
$i = 1; 
if ($handle = opendir($path)) { 
    while (false !== ($file = readdir($handle))) { 
     if ($file != "." && $file != ".." && is_file($path.'/'.$file)) { 
      $oldname = $path.'/'.$file; 
      $path_info = pathinfo($oldname);    
      rename($oldname, "test".'/'.($i).'.'.'jpg'); 
      echo "Old name = <b>".$oldname."</b></br>"; 
      echo "New name = <b>".$path.'/'.($i).'.'.'jpg'."</b></br></br>"; 
      $i++; 
     } 
    } 
    closedir($handle); 
} 
?> 

並感謝大家不幫助我只是因爲你我自己做到了。