使用php重命名文件夹中的所有文件

时间:2012-08-14 15:07:14

标签: php file rename

新的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);
}

5 个答案:

答案 0 :(得分:5)

你可能在错误的目录中工作。确保在目录中添加$ 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);
}

答案 1 :(得分:5)

这是一个简单的解决方案:

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 文件

答案 2 :(得分: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);
}

答案 3 :(得分:0)

如果文件被打开,就会发生这种情况。然后php无法对文件进行任何更改。

答案 4 :(得分: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);
}
?>

非常感谢您的建议。它对我有用!