©
本文档使用 PHP中文网手册 发布
(PHP 5 >= 5.2.1, PHP 7)
sys_get_temp_dir — 返回用于临时文件的目录
返回 PHP 储存临时文件的默认目录的路径。
返回临时目录的路径。
Example #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
[#1] Nimja [2015-09-17 11:07:05]
A very helpful thing to note when on Linux:
If you are running PHP from the commandline you can use the environment variable: TMPDIR - to change the location without touching php.ini. - This should work on most versions of PHP.
Example file: test.php
<?php
echo sys_get_temp_dir() . PHP_EOL;
?>
And then running:
php test.php
/tmp
TMPDIR=/custom/location php test.php
/custom/location
[#2] Anonymous [2015-04-24 10:44:40]
it should be mentioned that the return value of sys_get_temp_dir() can be set using the ini-directive 'sys_temp_dir' globally as well as per directory by using
php_admin_value sys_temp_dir /path/to/tmp
[#3] antoine dot vermeersch at gmail dot com [2014-09-13 19:40:22]
<?php
$dir=sys_get_temp_dir();
?>
Fatal error: Call to undefined function sys_get_temp_dir() in C:\Program Files\EasyPHP 2.0b1\www\op_gestion\y_sys_get_temp_dir.php on line 2
[#4] royanee at yahoo dot com [2014-06-11 20:27:51]
As of PHP 5.5.0, you can set the sys_temp_dir INI setting so that this function will return a useful value when the default temporary directory is not an option.
[#5] Ismail Asci [2014-01-31 11:56:56]
It's not documented but this function does not send the path with trailing spaces, actually it drops the slash if it exists.
https://github.com/php/php-src/blob/af6c11c5f060870d052a2b765dc634d9e47d0f18/main/php_open_temporary_file.c#L238
[#6] bert-jan at bugbyte dot nl [2010-03-29 13:06:59]
This function does not account for virtualhost-specific modifications to the temp path and/or 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>
Within this config it still returns /tmp
[#7] dannel at aaronexodus dot com [2009-09-07 13:11:40]
There's no need to use a random name for the directory for tempnam.
Since a file and a directory can't share the same name on the filesystem, we can exploit this and simply use the name of the current file. It is guaranteed that the directory won't exist (because it's a file, of course).
<?php
if ( !function_exists('sys_get_temp_dir')) {
function sys_get_temp_dir() {
if (!empty($_ENV['TMP'])) { return realpath($_ENV['TMP']); }
if (!empty($_ENV['TMPDIR'])) { return realpath( $_ENV['TMPDIR']); }
if (!empty($_ENV['TEMP'])) { return realpath( $_ENV['TEMP']); }
$tempfile=tempnam(__FILE__,'');
if (file_exists($tempfile)) {
unlink($tempfile);
return realpath(dirname($tempfile));
}
return null;
}
}
?>
[#8] Anonymous [2008-01-29 04:08:41]
This function does not always add trailing slash. This behaviour is inconsistent across systems, so you have keep an eye on it.