Browse Source

Implemented Feature #60524 (sys_temp_dir)

Added a new configuration directive which allows it to change the
temporary directory, the default behavior is unchanged.

This is a useful option if you use all/some hosts inside of one .ini file
with sections and want to change the temp dir per user (maybe it's not
allowed to write outside the users home directory). Since the TMPDIR
variable affects the whole php that way can not be used for this scenario.

(see https://bugs.php.net/bug.php?id=60524)
pull/262/merge
ALeX Kazik 14 years ago
committed by Stanislav Malyshev
parent
commit
475a644bd8
  1. 1
      main/main.c
  2. 1
      main/php_globals.h
  3. 15
      main/php_open_temporary_file.c
  4. 4
      php.ini-development
  5. 4
      php.ini-production
  6. 8
      tests/basic/req60524.phpt

1
main/main.c

@ -521,6 +521,7 @@ PHP_INI_BEGIN()
STD_PHP_INI_ENTRY("default_mimetype", SAPI_DEFAULT_MIMETYPE, PHP_INI_ALL, OnUpdateString, default_mimetype, sapi_globals_struct,sapi_globals)
STD_PHP_INI_ENTRY("error_log", NULL, PHP_INI_ALL, OnUpdateErrorLog, error_log, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("extension_dir", PHP_EXTENSION_DIR, PHP_INI_SYSTEM, OnUpdateStringUnempty, extension_dir, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("sys_temp_dir", NULL, PHP_INI_SYSTEM, OnUpdateStringUnempty, sys_temp_dir, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("include_path", PHP_INCLUDE_PATH, PHP_INI_ALL, OnUpdateStringUnempty, include_path, php_core_globals, core_globals)
PHP_INI_ENTRY("max_execution_time", "30", PHP_INI_ALL, OnUpdateTimeout)
STD_PHP_INI_ENTRY("open_basedir", NULL, PHP_INI_ALL, OnUpdateBaseDir, open_basedir, php_core_globals, core_globals)

1
main/php_globals.h

@ -85,6 +85,7 @@ struct _php_core_globals {
char *open_basedir;
char *extension_dir;
char *php_binary;
char *sys_temp_dir;
char *upload_tmp_dir;
long upload_max_filesize;

15
main/php_open_temporary_file.c

@ -196,6 +196,21 @@ PHPAPI const char* php_get_temporary_directory(void)
return temporary_directory;
}
/* Is there a temporary directory "sys_temp_dir" in .ini defined? */
{
char *sys_temp_dir = PG(sys_temp_dir);
if (sys_temp_dir) {
int len = strlen(sys_temp_dir);
if (len >= 2 && sys_temp_dir[len - 1] == DEFAULT_SLASH) {
temporary_directory = zend_strndup(sys_temp_dir, len - 1);
return temporary_directory;
} else if (len >= 1 && sys_temp_dir[len - 1] != DEFAULT_SLASH) {
temporary_directory = zend_strndup(sys_temp_dir, len);
return temporary_directory;
}
}
}
#ifdef PHP_WIN32
/* We can't count on the environment variables TEMP or TMP,
* and so must make the Win32 API call to get the default

4
php.ini-development

@ -729,6 +729,10 @@ user_dir =
; On windows:
; extension_dir = "ext"
; Directory where the temporary files should be placed.
; Defaults to the system default (see sys_get_temp_dir)
; sys_temp_dir = "/tmp"
; Whether or not to enable the dl() function. The dl() function does NOT work
; properly in multithreaded servers, such as IIS or Zeus, and is automatically
; disabled on them.

4
php.ini-production

@ -729,6 +729,10 @@ user_dir =
; On windows:
; extension_dir = "ext"
; Directory where the temporary files should be placed.
; Defaults to the system default (see sys_get_temp_dir)
; sys_temp_dir = "/tmp"
; Whether or not to enable the dl() function. The dl() function does NOT work
; properly in multithreaded servers, such as IIS or Zeus, and is automatically
; disabled on them.

8
tests/basic/req60524.phpt

@ -0,0 +1,8 @@
--TEST--
Req #60524 (Specify temporary directory)
--INI--
sys_temp_dir=/path/to/temp/dir
--FILE--
<?php echo sys_get_temp_dir(); ?>
--EXPECT--
/path/to/temp/dir
Loading…
Cancel
Save