【问题标题】:PHP rename does not workPHP重命名不起作用
【发布时间】:2010-07-31 13:45:54
【问题描述】:

我使用选项 CURLOPT_FILE 下载带有 cURL 的文件,然后尝试重命名下载的文件,例如,从“1.txt”到“2.txt”。重命名文件失败。

PHP 抛出错误:

"警告:重命名(E:\.../test/1.txt,E:\.../test/2.txt) [function.rename]: E:\ 中没有这样的文件或目录。 ../test\lib\CURL\Download.php 第 51 行"

之后我只运行一行脚本:

<?php rename("E:\.../test/1.txt","E:\.../test/2.txt");

重命名成功。

为什么它现在起作用了?同样的重命名操作。

还有一些事情:

  1. Windows 操作系统

  2. 文件“1.txt”确实存在

  3. 重命名时我使用绝对路径

  4. 在重命名之前我关闭了 cURL 使用的文件句柄与 fclose()

怎么了?如何在第一个脚本中重命名下载的文件而不会出错?

【问题讨论】:

    标签: php curl rename


    【解决方案1】:

    我认为 PHP 不支持 3 点语法 (...),这是 Windows 命令行特有的东西。

    另外:您可能想尝试在初始名称上使用 realpath 以确保它存在

    编辑:

    作为一个解决方案,就这样做

    <?php rename("E:\..\../test/1.txt","E:\..\../test/2.txt");
    

    应该可以解决你的问题:)

    【讨论】:

    • 对不起,我写错了 3 个点实际上意味着:E:\xampp\htdocs\test\1.txt
    【解决方案2】:

    您必须小心字符串中的 Windows 风格的目录分隔符 (\)。您使用的是双引号字符串,因此任何单个反斜杠都将被解释为转义序列,而不是路径分隔符。使用正斜杠或单引号:

    $src = "E:\\xampp\\htdocs\\test\\1.txt";
    $src = 'E:\xampp\htdocs\test\1.txt';
    $src = "E:/xampp/htdocs/test/1.txt";
    

    所有的结果都是一样的,但如果你尝试:

    $src = "E:\xampp\htdocs\test\1.txt";
    

    PHP 将评估为:

    $src = "E:xampphtdocstest1.txt";
    

    【讨论】:

    • 另外,正斜杠在 Windows 上工作得很好(显然 php 会为你修复它们),所以最好总是使用 / 而不用担心它,当然也有助于便携性。
    • 我实际上使用 $src = dirname(FILE) 。 '/1.txt' - 它不起作用。如果我这样做 $src = dirname(FILE) 。 '\1.txt' - 也不起作用。如果我只是 $src = '1.txt' 也不起作用。重命名本身就像我之前所说的那样起作用,但不是在文件下载后直接起作用,而是当我再次运行 PHP 时。
    • 尝试在重命名调用之前/之后添加一些调试。在尝试重命名之前查看 $src 是否存在,如果您从 cli 运行它,请暂停脚本(长时间睡眠、键盘输入等)并查看该目录以查看实际存在的内容。
    【解决方案3】:

    由于 OP 说之后运行第二个脚本,使用相同的重命名行,我看不出其他当前答案是如何相关的。我的猜测是您正在使用 fopen 创建文件资源,运行 curl_exec($ch);然后尝试在不调用 fclose(); 的情况下重命名文件,因为离开脚本时文件将自动关闭,这可以解释为什么具有相同代码的第二个脚本会起作用。

    【讨论】:

    • 我在重命名之前最后使用了 fclose(),我写在第 4 点:(
    【解决方案4】:

    我有这个问题,我用这段代码解决了:

    $oldname ='E:\.../test/1.txt';
    $newname ='E:\.../test/2.txt';
    rename($oldname,$newname);
    

    【讨论】:

    • 请添加一些解释。
    猜你喜欢
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2018-06-19
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多