[英]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.