【发布时间】:2013-12-03 04:03:02
【问题描述】:
好的 - 我卡住了,它的 php rename() 又一次!!!我确定我描述文件路径的方式有误,并且我使用的文件名带有空格“。”和 ' ' 以确保我考虑所有文件命名差异。所以对于我正在尝试的代码
function GetFiles($dirName) {
$root = scandir($dirName);
foreach ($root as $value) {
if ($value === '.' || $value === '..') {
continue;
}
if (is_file("$dirName\\$value")) {
$result[] = "$dirName\\$value";
continue;
}
foreach (GetFiles("$dirName\\$value") as $value) {
$result[] = $value;
}
}
return $result;
}
function FileReorder($filename,$basedir){
$filebase = basename($filename);
$date = getdate(filectime($filename));
if($date['mon'] < 10){$datem ='0'. $date['mon'];}
$datey = $date['year'];
$newPath = "$basedir\\$datey\\$datem";
$newFileName = "$newPath\\$filebase";
if (file_exists($filename)) {
$filhandle = fopen($filename, 'r');
fclose($filhandle);
sleep(1);
$renamed = rename($filename, $newFileName);
} else {
$renamed = false;
}
if ($renamed) {
printf('File Renamed: old-' . $filename . ' new-' . $newFileName . ' ');
} else {
printf('File Rename failed');
return $renamed;
}
//entry point is here
$startDir=$formpost['directory'];
$files= GetFiles($formpost['directory']);
foreach ($files as $file) {
$reodered = FileReorder($file, $startDir);
}
所以我会在 C:\Users\username\Pictures\my test 中粘贴一个字符串变量 请注意,我故意使用空格进行调试。
Filereorder 函数警告(返回 FALSE)
警告:重命名(C:\Users\user\Pictures\my test\2013-03-28 14.36.13.jpg,C:\Users\user\Pictures\my test\2013\03\2013-03-28 14.36.13.jpg) [function.rename]:系统找不到指定的路径。
(代码:3)在 C:\wamp\www\MediaOrganizer\fileTime.php 第 48 行
我们将不胜感激。
附录 经过大量阅读,我认为这可能是一个 win32 shell 限制——我假设 php rename 函数对 windows shell 进行了低级调用。 Windows shell 不支持多个 '.'在文件名中。 Windows 和 NT 确实支持它,但在 shell 中不支持 您可以通过以下事实来测试这一点:您可以在 cmd shell 中使用 dir 列出目录但无法从命令行打开文件。如果您通过它的速记剂量名称来引用该文件,那么它将起作用。不幸的是,这并没有解决我的问题——事实上,我认为这意味着 php 无法重命名包含多个句点的 windows 环境中的文件。
【问题讨论】:
-
php 明确声明没有这样的文件
-
否则存在 - $filhandle = fopen($filename,'r');其次是 fclose($filhandle);早在重命名之前就会出错。但为了满足这一点,我将 fileopen 包装到 if(file_exists($filename) 条件中的重命名。
-
另外真实路径($filename)=== $filename
-
你能解决这个问题吗?
-
我已经有一段时间没有重新审视这个问题了,但它很可能是一个特定的 php 版本
标签: php windows wamp file-rename