我使用选项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");
并重命名成功。
为什么现在有效?相同的重命名操作。
其他一些事情:
Windows操作系统
文件“1.txt”确实存在
重命名时使用绝对路径
在使用fclose()重命名cURL使用的文件句柄之前
有什么问题?如何在没有错误的情况下在第一个脚本中重命名下载的文件?
答案 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);