[英]Weird behaviour of rename() in PHP
我的php有一個奇怪的問題。 每當我嘗試使用rename()移動文件時,不僅不會移動文件,還會刪除應該復制的文件以及其中的所有文件。 原始代碼是:
rename('temp.odt', 'tmp/report.odt');
但我已經嘗試過其他路徑分隔符了
rename('temp.odt', 'tmp\report.odt');
rename('temp.odt', 'tmp\\report.odt');
rename('temp.odt', 'tmp' . DIRECTORY_SEPARATOR . 'report.odt');
rename('C:\wamp\www\zaiko\temp.odt', 'C:\wamp\www\zaiko\tmp\report.odt');
一切都無濟於事。 代碼來自第三方模塊,該模塊在我正在使用的系統中使用。
好點檢查點:
在運行rename()之后,'temp.odt'文件在其原始位置完好無損,而文件夾'tmp'以及其中的所有內容都消失了 。 發出以下警告:
(!)警告:重命名(temp.odt,tmp \\ report.odt)[function.rename]:系統找不到指定的路徑*。 (代碼:3)在第192行的C:\\ wamp \\ www \\ zaiko \\ modules \\ mod_deliver.php中
*翻譯自葡萄牙語
在Windows XP上運行:帶有PHP 5.3.5的Apache 2.2.17和NTFS
編輯:
剛剛找到了問題的原因。 事實證明,應用程序使用的模塊又使用壓縮庫; 此庫使用與應用程序使用的名稱完全相同的臨時文件夾。
它必須使用某種緩存,這可以解釋為什么錯誤沒有100%出現。
通過將'tmp'文件夾的名稱更改為其他任何內容來解決問題。
感謝你們所有的時間,並且抱歉打擾你們這樣一個愚蠢的事情,事實證明,這與我最初的猜測完全無關,因此,問題已經形成。
PHP.net上的示例告訴您到底要做什么 - 使用ROOT PATH到文件 - 通常可以通過使用$_SERVER['DOCUMENT_ROOT']
(但這只能到達htdocs / public_html目錄 - 您需要指定其余部分)或手動鍵入路徑(但盡量避免這種情況)。
<?php
rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");
?>
猜測,以下應該工作(假設這是你的路徑) - 這也檢查你的文件實際存在,以便它可以重命名 - 你需要確保tmp/
實際上存在於第一位,但你會得到一個錯誤彈出如果沒有:
<?php
$root = getcwd().DIRECTORY_SEPARATOR; // Obtain the current working dir
$srcpath = $root."temp.odt"; // The file you want to rename
$destpath = $root."tmp/report.odt"; // Where you want to rename the file to
// make sure file exists and its movable
if(is_writable($srcpath)){
// if it exists, rename it
rename($srcpath, $dstpath);
echo "File was renamed!";
} else {
echo "It seems that the specified file doesn't exist!";
}
?>
你是通過使用反斜杠轉義字符 - 總是使用正斜杠(我知道這是在單引號內,這是好的,但如果你使用雙引號,那么你會想知道出了什么問題)!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.