【问题标题】:php rename() under windows returning error code 3windows下php rename()返回错误代码3
【发布时间】: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


【解决方案1】:

不确定这会有多大帮助,但这段代码使用 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);
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2014-07-03
    相关资源
    最近更新 更多