好的 - 我卡住了,它的php重命名()了!!!我确信我描述文件路径的方式有错误,而且我使用带有空格的文件名'。'并且''确保我考虑所有的文件差异。所以对我的代码我正在尝试
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中 请注意我正在使用空间进行调试。
警告:重命名(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)在第48行的C:\ wamp \ www \ MediaOrganizer \ fileTime.php中
任何帮助将不胜感激。
附录 经过多次阅读后,我认为这可能是一个win32 shell限制 - 我假设php重命名函数对windows shell进行低级调用。 Windows shell不支持多个'。'在文件名中。 Windows和NT确实支持它,但不支持shell 您可以通过cmd shell中使用dir的目录列表进行测试,但无法从命令行打开文件。如果您通过其速记剂量名称引用该文件将起作用。不幸的是,这并没有解决我的问题 - 实际上我认为这意味着php无法重命名包含多个句点的Windows环境中的文件。
答案 0 :(得分:0)
不确定这将有多大帮助,但这段代码使用PHP CLI 5.3.22
可以正常工作<?php
$from = 'D:\php_source\tst dir\my file.name.as.oddly as possible.txt';
$to = 'D:\php_source\tst dir\my file.name.as.oddly as possible.22.33.44.txt';
rename($from,$to);
?>