我的名字中有空格的文件已存在于我的服务器上。我想用下划线重命名它们。我试过在空格前放一个斜线,我试着用%20替换空格。 PHP还是给了我:
没有这样的文件或目录。
这是我的代码:
$dir = './';
$dhandle = opendir($dir);
$old_files = array();
if ($dhandle) {
while (false !== ($fname = readdir($dhandle)))
{
if ( ($fname != '.') && ($fname != '..') )
{
$old_files[] = (is_dir( "./$fname" )) ? "(Dir) {$fname}" : $fname;
}
}
closedir($dhandle);
}
$new_files = str_replace(' ', '_', $old_files);
$x = 0;
foreach($old_files as $file)
{
rename(rawurlencode($file), $new_files[$x++]);
}
答案 0 :(得分:2)
如果不尝试重命名,是否确定没有发生此类文件错误?调试的第一步是简化问题,直到它不再有错误。
我不知道你是否这样做是因为它一开始没有工作,但你绝对不应该在本地文件名上使用rawurlencode()
,这肯定会搞砸了。另外,我很好奇你在使用"(Dir) {$fname}"
做了什么 - 这似乎也是一个错误。我怀疑你想做的更有可能是:
if ( ($fname != '.') && ($fname != '..') && !is_dir("./$fname" ))
{
$old_files[] = $fname;
}
但是,您还应该意识到,dir
返回的是与传递的目录相关的文件名 ,因此您需要确保is_dir()
和重命名操作采用考虑到了。所以你很可能想说:
is_dir($dir.'/'.$fname);
和
rename($dir.'/'.$file,$dir.'/'.$new_files[$x++]);
答案 1 :(得分:1)
添加:
print "$file\n";
在重命名语句之前,看看你得到了什么。
另外,在将文件添加到数组之前,应该在if语句中添加一个strstr($ fname,''),这样你才能对包含空格的文件名进行操作:
if ( ($fname != '.') && ($fname != '..') && !is_dir("./$fname" ) && strstr($fname, ' '))
{
$old_files[] = $fname;
}
答案 2 :(得分:1)
我曾经生成一个快速的黑客来清理一些非常糟糕的文件。这是我的代码;如果你愿意,可以使用它。
<?php
$dir = './';
$dhandle = opendir($dir);
$old_files = array();
if ($dhandle) {
while (false !== ($fname = readdir($dhandle))) {
if ( ($fname != '.') && ($fname != '..') && !is_dir("./$fname" ))
$old_files[] = $fname;
}
closedir($dhandle);
}
foreach($old_files as $file)
{
$new_name = str_replace(',', '', str_replace('&', '', str_replace(' ','',$file)));
rename("./".$file, "./".$new_name);
echo $new_name."\n";
}