3

新的 php 程序员在这里。我一直在尝试通过替换扩展名来重命名文件夹中的所有文件。

我正在使用的代码来自关于 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

5 回答 5

10

这是简单的解决方案:

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

于 2013-12-26T10:43:43.290 回答
7

您可能在错误的目录中工作。确保为目录添加前缀 $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);
}
于 2012-08-14T15:09:08.140 回答
0

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

于 2015-04-22T12:02:55.393 回答
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);
}
于 2012-08-14T16:21:21.057 回答
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);
}
?>

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

于 2016-01-08T09:39:04.190 回答