新的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);
}
答案 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);
}
?>
非常感谢您的建议。它对我有用!