PHP Conference Japan 2024

sys_get_temp_dir

(PHP 5 >= 5.2.1, PHP 7, PHP 8)

sys_get_temp_dir傳回用於暫存檔案的目錄路徑

說明

sys_get_temp_dir(): 字串

傳回 PHP 預設儲存暫存檔案的目錄路徑。

參數

此函式沒有參數。

回傳值

傳回暫存目錄的路徑。

範例

範例 #1 sys_get_temp_dir() 範例

<?php
// 使用 sys_get_temp_dir() 在暫存檔案目錄中
// 建立一個暫存檔案
$temp_file = tempnam(sys_get_temp_dir(), 'Tux');

echo
$temp_file;
?>

上述範例會輸出類似以下的內容:

C:\Windows\Temp\TuxA318.tmp

另請參閱

新增註解

使用者貢獻的註解 9 則註解

OsakaWebbie
7 年前
如果在啟用 systemd 且 PrivateTmp=true 的 Linux 系統上運行(這是 CentOS 7 和其他較新發行版的預設值),則此函式只會返回 "/tmp",而不是真正的、更長、有點動態的路徑。
royanee at yahoo dot com
10 年前
從 PHP 5.5.0 開始,您可以設定 sys_temp_dir INI 設定,以便在預設暫存目錄不可用時,此函式會返回一個有用的值。
匿名
16 年前
此函式並非總是會加上結尾斜線。 這種行為在不同系統上並不一致,因此您必須注意這一點。
Ismail Asci
10 年前
文件中沒有說明,但此函式不會傳送帶有結尾空格的路徑,實際上它會刪除斜線(如果存在)。

https://github.com/php/php-src/blob/af6c11c5f060870d052a2b765dc634d9e47d0f18/main/php_open_temporary_file.c#L238
匿名
9 年前
應該要提到的是,sys_get_temp_dir() 的返回值可以使用 ini 指令 `sys_temp_dir` 全域設定,也可以使用以下方式針對每個目錄設定:
php_admin_value sys_temp_dir /path/to/tmp
Nimja
9 年前
在 Linux 上使用時,這一點非常有用

如果您從命令列運行 PHP,您可以使用環境變數:TMPDIR - 來更改位置,而無需修改 php.ini。- 這應該適用於大多數版本的 PHP。

範例檔案:test.php
<?php
echo sys_get_temp_dir() . PHP_EOL;
?>

然後執行

php test.php
/tmp

TMPDIR=/custom/location php test.php
/custom/location
Arthur Clifford
4 年前
重要的是,為了透過串接建構路徑,需要知道 sys_get_temp_dir 的結尾不包含路徑分隔符號。

因此,sys_get_temp_dir() 預設會返回您設定的任何暫存目錄

/tmp

如果您嘗試串接另一個目錄名稱 temp 並使用以下程式碼

mkdir(sys_get_temp_dir() . 'some_dir');

這樣實際上會嘗試生成
/tmpsome_dir

除非您以超級使用者的身分執行 PHP 腳本,否則可能會導致權限錯誤。

您應該改用
mkdir( sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'some_dir' );

這樣會建立
/tmp/some_dir

我不確定 Windows 或其他平台是否在結尾包含目錄分隔符號。因此,如果您正在編寫更通用的程式碼,您可能需要檢查路徑結尾是否有分隔符號,如果沒有,則附加它。
bert-jan at bugbyte dot nl
14 年前
此函數未考慮到針對虛擬主機對暫存路徑和/或 open_basedir 的修改

<Virtualhost>
php_admin_value open_basedir /home/user
php_admin_value upload_tmp_dir /home/user/tmp
php_admin_value session.save_path /home/user/tmp
</Virtualhost>

在此設定中,它仍然返回 /tmp
ohcc at 163 dot com
8 年前
當 sys_temp_dir 指令未設定時,sys_get_temp_dir() 在我的 Windows 系統上返回 C:\Windows。
To Top