我想知道如何为 Windows、Mac、Linux 上的每个值确定默认值:
- session.save_path
- soap.wsdl_cache_dir
upload_tmp_dir
还有您知道的涉及文件系统路径的任何其他 php.ini 变量吗?
根据我对 Windows 的调查,session.save_path 似乎是 C:\Windows\Temp。这是一个安全的地方吗?什么时候删除?
最佳答案
如何确定默认值
session.save_path
对于session.save_path
,默认使用php.ini定义的值,否则路径在这里确定:
https://github.com/php/php-src/blob/master/ext/session/mod_files.c#L264
这调用了定义在这里的 php_get_temporary_directory
:
https://github.com/php/php-src/blob/master/main/php_open_temporary_file.c#L192
- 如果您使用的是 Windows,它会使用 Win32 API 调用
GetTempPath
来获取临时文件夹路径(参见 http://msdn.microsoft.com/en-us/library/windows/desktop/aa364992%28v=vs.85%29.aspx) - 如果您使用的是 Unix,它会使用 TMPDIR 环境变量。
- 如果一切都失败了,它会回退到
/tmp
soap.wsdl_cache_dir
soap.wsdl_cache_dir
尝试使用定义的 php.ini 值。如果找不到,它将通过以下代码默认为 /tmp
:
https://github.com/php/php-src/blob/master/ext/soap/soap.c#L520
在此处阅读有关 STD_PHP_INI_ENTRY
的更多信息:http://docstore.mik.ua/orelly/webprog/php/ch14_12.htm
upload_tmp_dir
upload_tmp_dir
设置为 NULL(但将使用 php.ini 覆盖),以及许多默认值,在:
https://github.com/php/php-src/blob/master/main/main.c#L579
STD_PHP_INI_ENTRY("upload_tmp_dir", NULL, PHP_INI_SYSTEM, OnUpdateStringUnempty, upload_tmp_dir, php_core_globals, core_globals)
并在此处用于文件上传:
https://github.com/php/php-src/blob/master/main/rfc1867.c#L1006
fd = php_open_temporary_fd_ex(PG(upload_tmp_dir), "php", &temp_filename, 1 TSRMLS_CC);
这个函数,如果传入一个空的upload_tmp_dir
,默认使用我们之前提到的php_get_temporary_directory
函数。
还有您知道的涉及文件系统路径的任何其他 php.ini 变量吗?
有很多。快速浏览 https://github.com/php/php-src/blob/master/main/main.c显示大量使用路径的默认配置(open_basedir
、include_path
、sys_temp_dir
、extension_dir
和 error_log
仅举几例)。此外,扩展有自己的配置集合,其中可能包含路径参数。
根据我对 Windows 的调查,session.save_path 似乎是 C:\Windows\Temp。这是一个安全的地方吗?什么时候删除?
在 Windows 上打开临时文件时,PHP 将权限设置为运行您的网络服务器的用户独占,这应该意味着只有它和管理员才能访问文件的内容:
https://github.com/php/php-src/blob/master/main/php_open_temporary_file.c#L149
关于php - 默认 php.ini 变量路径位置(session.save_path、soap.wsdl_cache_dir、upload_tmp_dir),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24328564/