首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP rename() 函數進階用法:移動檔案、目錄甚至刪除技巧

     編輯:PHP 相關知識

前言

許多開發者只知道 rename() 能重新命名檔案,實則它相當於 Unix mv 指令,能同時完成「移動路徑」與「重新命名」,且跨平台 (Win32/Unix) 皆支援。

核心用法

$oldpath = '/var/www/html/old_name.txt';
$newpath = '/home/user/docs/new_name.txt';
rename($oldpath, $newpath); // 同時移動目錄並改名

若 $newpath 為現有目錄,PHP 會嘗試將來源移動到該目錄下 (保留原檔名),行為與 mv 一致。

目錄移動

rename() 同樣適用於目錄:

rename('/var/www/project_v1', '/var/www/project_v2'); // 整個目錄改名/移動

目錄下所有檔案、子目錄會一併移動,極為高效 (通常為檔案系統層面操作,非逐檔複製)。

巧用 rename() 實現「刪除」 (Win32 環境)

作者提到 PHP4 Win32 版似乎移除 unlink() (實為誤解,實際存在),但提供一個有趣思路:將檔案移動到暫存目錄 (/tmp 或 C:\Windows\Temp) 達到「軟刪除」效果:

$path = 'C:\web\upload\bad_file.php';
$tmp = 'C:\Windows\Temp';
rename($path, $tmp . '\' . basename($path)); // 移至暫存區
// 稍後由排程任務清理暫存區

優點:避免權限問題導致 unlink() 失敗;可實現「回收筒」機制。

缺點:跨磁碟分區移動會退化為「複製+刪除」,效能下降;需確保暫存目錄可寫入。

注意事項

  • 目標檔案已存在時,rename() 會覆蓋 (Unix) 或失敗 (Windows, PHP < 5.3.1),建議先 file_exists() 檢查。
  • 跨檔案系統 (不同掛載點/磁碟) 會觸發複製模式,大檔案耗時較久。
  • PHP 5.3.1+ Windows 版行為統一為覆蓋模式。

總結

rename() 是檔案系統操作的瑞士刀,善用它能簡化移動、重命名、批次整理甚至軟刪除邏輯。現代 PHP 配合 FilesystemIterator 與 SplFileInfo 可構建更強大的檔案管理工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved