繁体   English   中英

PHP重命名不起作用

[英]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");

并且重命名成功。

为什么现在可以使用? 相同的重命名操作。

其他事情:

  1. Windows操作系统

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

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

  4. 重命名之前,我用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM