PHP 选项/信息 函数
在线手册:中文 英文
PHP手册

sys_get_temp_dir

(PHP 5 >= 5.2.1)

sys_get_temp_dirReturns directory path used for temporary files

说明

string sys_get_temp_dir ( void )

Returns the path of the directory PHP stores temporary files in by default.

返回值

Returns the path of the temporary directory.

范例

Example #1 sys_get_temp_dir() example

<?php
// Create a temporary file in the temporary 
// files directory using sys_get_temp_dir()
$temp_file tempnam(sys_get_temp_dir(), 'Tux');

echo 
$temp_file;
?>

以上例程的输出类似于:

C:\Windows\Temp\TuxA318.tmp

参见


PHP 选项/信息 函数
在线手册:中文 英文
PHP手册
PHP手册 - N: Returns directory path used for temporary files

用户评论:

wiseman1024 at gmail dot com (04-Apr-2012 09:41)

Or just use /tmp which is the default temporary directory.

BTW, in my system, I have no environment variables pointing to any temporary directory.

bert-jan at bugbyte dot nl (29-Mar-2010 09:06)

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

php at ktools.eu (17-Oct-2009 07:29)

-better to use the php methode 'getenv()' to access the enviroment vars
-the original 'sys_get_temp_dir()' don't use realpath, than it's better to make 'realpath(sys_get_temp_dir())'

<?php
 
if ( !function_exists('sys_get_temp_dir')) {
  function
sys_get_temp_dir() {
      if(
$temp=getenv('TMP') )        return $temp;
      if(
$temp=getenv('TEMP') )        return $temp;
      if(
$temp=getenv('TMPDIR') )    return $temp;
     
$temp=tempnam(__FILE__,'');
      if (
file_exists($temp)) {
         
unlink($temp);
          return
dirname($temp);
      }
      return
null;
  }
 }

 echo
realpath(sys_get_temp_dir());
?>

dannel at aaronexodus dot com (07-Sep-2009 09:11)

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).

Improving on the last post...

<?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;
  }
}
?>

php [spat] hm2k.org (22-Aug-2008 12:20)

I went ahead and slightly improved the function provided.

<?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(uniqid(rand(),TRUE),'');
    if (
file_exists($tempfile)) {
   
unlink($tempfile);
    return
realpath(dirname($tempfile));
    }
  }
}
?>

radon8472 at hotmail dot com (01-Aug-2008 09:31)

better use
tempnam(":\n\\/?><","");

To detect path by creating a temporary file.
A random directoryname can exist  (the chance is low, but it can be).
Better is to use signs, like :\n\\/?>< which are not valid, so realy NEVER a directory with this name can exist.

Anonymous (29-Jan-2008 12:08)

This function does not always add trailing slash. This behaviour is inconsistent across systems, so you have keep an eye on it.

minghong at gmail dot com (23-Nov-2006 02:04)

To add support of sys_get_temp_dir for PHP4/5, use the following code:

<?php
if ( !function_exists('sys_get_temp_dir') )
{
   
// Based on http://www.phpit.net/
    // article/creating-zip-tar-archives-dynamically-php/2/
   
function sys_get_temp_dir()
    {
       
// Try to get from environment variable
       
if ( !empty($_ENV['TMP']) )
        {
            return
realpath( $_ENV['TMP'] );
        }
        else if ( !empty(
$_ENV['TMPDIR']) )
        {
            return
realpath( $_ENV['TMPDIR'] );
        }
        else if ( !empty(
$_ENV['TEMP']) )
        {
            return
realpath( $_ENV['TEMP'] );
        }

       
// Detect by creating a temporary file
       
else
        {
           
// Try to use system's temporary directory
            // as random name shouldn't exist
           
$temp_file = tempnam( md5(uniqid(rand(), TRUE)), '' );
            if (
$temp_file )
            {
               
$temp_dir = realpath( dirname($temp_file) );
               
unlink( $temp_file );
                return
$temp_dir;
            }
            else
            {
                return
FALSE;
            }
        }
    }
}
?>