2012-08-14 144 views
2

新的php程序員在這裏。我一直試圖通過替換擴展名來重命名文件夾中的所有文件。使用PHP重命名文件夾中的所有文件

我正在使用的代碼是從the answer to a similar question on SO.

if ($handle = opendir('/public_html/testfolder/')) { 
while (false !== ($fileName = readdir($handle))) { 
    $newName = str_replace(".php",".html",$fileName); 
    rename($fileName, $newName); 
} 
closedir($handle); 

}

我運行代碼時沒有錯誤,但沒有改變的文件名進行。

任何洞察爲什麼這不工作?我的權限設置應該允許。

在此先感謝。編輯:當檢查rename()的返回值時,我得到一個空白頁,現在嘗試用glob()這可能是比opendir更好的選擇...?

編輯2:使用下面的第二個代碼片段,我可以打印$ newfiles的內容。所以數組存在,但str_replace + rename()片段無法更改文件名。

$files = glob('testfolder/*'); 


foreach($files as $newfiles) 
    { 

    //This code doesn't work: 

      $change = str_replace('php','html',$newfiles); 
    rename($newfiles,$change); 

      // But printing $newfiles works fine 
      print_r($newfiles); 
} 

回答

4

您可能正在錯誤的目錄中工作。確保將$ fileName和$ newName加在目錄前面。

尤其是,opendir和readdir不傳達任何有關當前工作目錄的信息以進行重命名。 readdir只返回文件的名稱,而不是它的路徑。所以你只傳遞文件名來重命名。

類似下面應該更好的工作:

$directory = '/public_html/testfolder/'; 
if ($handle = opendir($directory)) { 
    while (false !== ($fileName = readdir($handle))) {  
     $newName = str_replace(".php",".html",$fileName); 
     rename($directory . $fileName, $directory . $newName); 
    } 
    closedir($handle); 
} 
+0

嗨泰金,謝謝你的回答。不幸的是,我嘗試了它,並得到相同的結果,代碼不會產生錯誤,但不會有任何更改。 – Munner 2012-08-14 15:21:57

+0

@Munner嘗試檢查重命名的返回值。如果它不能重命名文件,它應該返回false。這將有助於縮小問題的範圍。 – Telgin 2012-08-14 15:28:17

0

你肯定

opendir($directory) 

的作品?你檢查過了嗎?因爲它看起來可能有一些文檔根在這裏失蹤......

我會嘗試

$directory = $_SERVER['DOCUMENT_ROOT'].'public_html/testfolder/'; 

然後Telgin的解決方案:

if ($handle = opendir($directory)) { 
    while (false !== ($fileName = readdir($handle))) {  
     $newName = str_replace(".php",".html",$fileName); 
     rename($directory . $fileName, $directory . $newName); 
    } 
    closedir($handle); 
} 
+0

非常感謝你的建議。到目前爲止,我一直在嘗試一系列的解決方案,但沒有成功,我會嘗試上面的修改並讓您知道! – Munner 2012-08-15 16:33:15

3

下面是簡單的解決方案:

PHP代碼:

// your folder name, here I am using templates in root 
$directory = 'templates/'; 
foreach (glob($directory."*.html") as $filename) { 
    $file = realpath($filename); 
    rename($file, str_replace(".html",".php",$file)); 
} 

上面的代碼將所有.html文件轉換在.php

0

,如果文件被打開情況。然後php不能對文件做任何改變。

0
<?php 
$directory = '/var/www/html/myvetrx/media/mydoc/'; 
if ($handle = opendir($directory)) { 
    while (false !== ($fileName = readdir($handle))) { 
     $dd = explode('.', $fileName); 
     $ss = str_replace('_','-',$dd[0]); 
     $newfile = strtolower($ss.'.'.$dd[1]); 
     rename($directory . $fileName, $directory.$newfile); 
    } 
    closedir($handle); 
} 
?> 

非常感謝您的建議。它爲我工作!

相關問題