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

PHP文件上傳處理進階:二次移動重命名解決虛擬目錄下載難題

     編輯:PHP 綜合知識

標準上傳流程

$targetFolder = '/uploads';
if (!empty($_FILES)) {
    $tempFile = $_FILES['Filedata']['tmp_name'];
    if (is_uploaded_file($tempFile)) {
        $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
        $targetFile = rtrim($targetPath, '/') . '/' . $_FILES['Filedata']['name'];
        $fileTypes = array('jpg','jpeg','gif','png');
        $fileParts = pathinfo($_FILES['Filedata']['name']);
        if (in_array($fileParts['extension'], $fileTypes)) {
            move_uploaded_file($tempFile, $targetFile);
            echo '1';
        } else { echo '非法文件類型'; }
    }
}

業務痛點

IIS 虛擬目錄導致 $_SERVER['DOCUMENT_ROOT'] 指向錯誤路徑,文件上傳成功但無法通過 Web 訪問。

解決方案:二次移動+重命名

  1. JS 異步上傳至臨時目錄,返回時間戳文件名
  2. 表單提交時,PHP 使用 copy() 將臨時文件復制到項目內部目錄
  3. 使用 rename() 按業務規則重命名
$src = $tempDir . '/' . $_POST['temp_filename'];
$dst = $projectDir . '/' . $newName;
if (copy($src, $dst)) {
    unlink($src); // 清理臨時文件
    // 記錄數據庫...
}

注意事項

  • Windows 下 copy() 複製 0 字節文件返回 false 但實際成功,需額外判斷
  • 文件操作效率受 I/O 與系統調用影響,大文件建議異步處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved