PHP重命名不起作用

时间:2010-07-31 13:45:54

标签: php curl rename

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

PHP抛出错误:

  

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

之后我只运行一行脚本:

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

并重命名成功。

为什么现在有效?相同的重命名操作。

其他一些事情:

  1. Windows操作系统

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

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

  4. 在使用fclose()重命名cURL使用的文件句柄之前

  5. 有什么问题?如何在没有错误的情况下在第一个脚本中重命名下载的文件?

4 个答案:

答案 0 :(得分:2)

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

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

修改:

作为解决方案,只需做

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

应该解决你的问题:)

答案 1 :(得分: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";

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

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

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