php重命名()在windows下返回错误代码3

时间:2013-12-03 04:03:03

标签: php windows wamp file-rename

好的 - 我卡住了,它的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中 请注意我正在使用空间进行调试。

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)在第48行的C:\ wamp \ www \ MediaOrganizer \ fileTime.php中

任何帮助将不胜感激。


附录 经过多次阅读后,我认为这可能是一个win32 shell限制 - 我假设php重命名函数对windows shell进行低级调用。 Windows shell不支持多个'。'在文件名中。 Windows和NT确实支持它,但不支持shell 您可以通过cmd shell中使用dir的目录列表进行测试,但无法从命令行打开文件。如果您通过其速记剂量名称引用该文件将起作用。不幸的是,这并没有解决我的问题 - 实际上我认为这意味着php无法重命名包含多个句点的Windows环境中的文件。

1 个答案:

答案 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);
?>