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

PHP sys_get_temp_dir() 取得系統臨時目錄路徑完整指南

     編輯:PHP 相關知識

函數用途

sys_get_temp_dir(): string 返回 PHP 預設儲存臨時檔案的目錄絕對路徑(PHP 5.2.1+),跨平台相容,避免硬編碼 /tmp 或 C:\Windows\Temp。

返回值範例

  • Linux/Unix: /tmp、/var/tmp
  • Windows: C:\Windows\Temp、C:\Users\USER\AppData\Local\Temp

實戰範例

建立臨時檔案(推薦寫法)

<?php
$temp_file = tempnam(sys_get_temp_dir(), 'myapp_');
// 例如: /tmp/myapp_abc123.tmp

$fp = fopen($temp_file, 'w');
fwrite($fp, "臨時資料內容");
fclose($fp);

// 處理完畢後清理
unlink($temp_file);
?>

大檔案分塊上傳暫存

<?php
$chunk_dir = sys_get_temp_dir() . '/upload_chunks_' . session_id();
if (!is_dir($chunk_dir)) mkdir($chunk_dir, 0700, true);

$chunk_file = $chunk_dir . '/chunk_' . $_POST['chunk_index'];
file_put_contents($chunk_file, file_get_contents('php://input'));

// 合併邏輯...
?>

內部實作原理(PHP 核心源碼邏輯)

<?php
// 簡化版邏輯
function sys_get_temp_dir_polyfill() {
    // 1. 環境變數優先順序
    foreach (['TMPDIR', 'TMP', 'TEMP'] as $env) {
        if (!empty($_ENV[$env])) return realpath($_ENV[$env]);
        if (!empty(getenv($env))) return realpath(getenv($env));
    }
    
    // 2. 建立臨時檔案反推目錄
    $temp = tempnam(uniqid('php_', true), '');
    if ($temp) {
        unlink($temp);
        return realpath(dirname($temp));
    }
    
    // 3. 最後備援
    return '/tmp';
}
?>

權限與安全注意事項

  • 返回目錄通常全域可寫,嚴禁直接信任檔名,必須使用 tempnam()、uniqid()、random_bytes() 產生唯一檔名
  • 敏感資料寫入臨時檔案後,立即 chmod($file, 0600) 限制權限
  • 定期清理舊臨時檔(cron + find /tmp -name 'myapp_*' -mtime +1 -delete)
  • 共享主機環境注意其他用戶可讀取 /tmp 檔案,機密資料勿落地

相關函數對照

函數用途自動清理
tempnam()建立唯一臨時檔案否,需手動 unlink
tmpfile()建立匿名臨時檔案資源是,fclose/腳本結束自動刪除
sys_get_temp_dir()取得臨時目錄路徑不適用

遷移建議

PHP 5.2.1+ 內建,舊版專案可用上方 polyfill 相容。現代框架(Laravel, Symfony)皆封裝為 storage_path('temp') 或 kernel.getCacheDir,建議使用框架抽象層而非直接呼叫。

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