[英]PHP rename does not work
我使用选项CURLOPT_FILE下载带有cURL的文件,然后尝试将下载的文件重命名,例如,从“ 1.txt”重命名为“ 2.txt”。 无法重命名该文件。
PHP引发错误:
“警告:重命名(E:\\ ... / test / 1.txt,E:\\ ... / test / 2.txt)[function.rename]:E:\\ ... /中没有这样的文件或目录第51行的test \\ lib \\ CURL \\ Download.php”
之后,我只运行一行脚本:
<?php rename("E:\.../test/1.txt","E:\.../test/2.txt");
并且重命名成功。
为什么现在可以使用? 相同的重命名操作。
其他事情:
Windows操作系统
文件“ 1.txt”确实存在
重命名时我使用绝对路径
重命名之前,我用fclose()关闭cURL使用的文件句柄
怎么了? 如何在第一个脚本中重命名下载的文件而不会出现错误?
我不认为PHP支持3点语法(...),这是Windows命令行特定的东西。
另外:您可能想尝试对初始名称使用realpath以确保它存在
编辑:
作为解决方案,只要做
<?php rename("E:\..\../test/1.txt","E:\..\../test/2.txt");
应该解决你的问题:)
您必须小心使用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";
由于OP表示此后使用相同的重命名行运行第二个脚本,所以我看不到其他任何当前答案有何意义。 我的猜测是您正在使用fopen创建文件资源,并运行curl_exec($ ch); 然后尝试重命名文件而不调用fclose();
由于该文件在离开脚本时会自动关闭,因此可以解释为什么另一个具有相同代码的脚本会起作用。
我有这个问题,我用下面的代码解决了:
$oldname ='E:\.../test/1.txt';
$newname ='E:\.../test/2.txt';
rename($oldname,$newname);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.