如果在systemd具有PrivateTmp=true的Linux系统上运行(这是CentOS 7和其他较新发行版上的默认值),此函数将只返回“/tmp”,而不是真正的、更长的、有点动态的路径。
<? php(电话)
//在临时文件中创建临时文件
//使用sys_get_temp_dir()的文件目录
$temp_file($temp_文件) = 坦普南 ( 系统获取模板目录 (), “燕鸥” );
回声 $temp_file(临时文件) ;
?>
C: \Windows\Temp\TuxA318.tmp
如果在systemd具有PrivateTmp=true的Linux系统上运行(这是CentOS 7和其他较新发行版上的默认值),此函数将只返回“/tmp”,而不是真正的、更长的、有点动态的路径。
它没有文档记录,但此函数不会发送带有尾随空格的路径,实际上,如果存在斜杠,它会删除它。
https://github.com/php/php-src/blob/af6c11c5f060870d052a2b765dc634d9e47d0f18/main/php_open_temporary_file.c#L238
应该提到的是,可以使用ini-directive“systempdir”全局设置sysgettempdir()的返回值,也可以使用
php_admin_value系统模板目录/路径/目标/tmp
在Linux上需要注意的一件非常有用的事情:
如果您从命令行运行PHP,则可以使用环境变量TMPDIR-来更改位置,而无需触摸PHP.ini 这应该适用于大多数版本的PHP。
示例文件:test.php
<? php(电话)
回声 系统获取模板目录 () . PHP_终止 ;
?>
然后运行:
php测试.php
/临时管理计划
TMPDIR=/自定义/位置php测试.php
/自定义/位置
此函数不考虑对临时路径和/或open_basedir的虚拟主机特定修改:
<虚拟主机>
php_admin_value open_basedir/home/user
php_admin_value上传tmp_dir/home/user/tmp
php_admin_value会话.save_path/home/user/tmp
</Virtualhost>
在该配置中,它仍然返回/tmp
这对于通过串联构建路径很重要,因为要知道sys_get_temp_dir末尾不包含路径分隔符。
因此,默认情况下,sys_get_temp_dir()将返回temp目录设置为的任何值:
/临时管理计划
如果您试图连接另一个目录名temp并使用以下命令:
mkdir(sys_get_temp_dir())。' some_dir’);
这实际上试图生成:
/tmpsome_目录
除非您以超级用户身份运行php脚本,否则可能会导致权限错误。
相反,您需要:
mkdir(sys_get_temp_dir())。 董事_合伙人。” some_dir');
这将创建:
/tmp/some_dir
我不知道Windows或其他平台是否在末尾包含目录分隔符。 因此,如果您正在编写更通用的内容,您可能需要检查末尾的路径分隔符,如果没有,请附加它。