php:访问/tmp文件夹中文件会报错:file does not exist

一,php访问/tmp文件夹中文件会报错:

代码:

            $filePath = "/tmp/php-temp/keji.jpeg";
            $is_ex = file_exists($filePath);
            //print_r("is_ex: ".$is_ex);
            if ($is_ex){
                echo "文件".$filePath."存在"."<br/>";
            } else {
                echo "文件".$filePath."不存在"."<br/>";
            }

报错信息:

文件/tmp/php-temp/keji.jpeg不存在

以上是通过nginx+php-fpm访问,

而相同的代码通过命令行访问则不存在这个问题:

文件/tmp/php-temp/keji.jpeg存在

 

二,原因:

php-fpm服务是通过systemd管理的,service文件如下:

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target


[Service]
Type=forking
PIDFile=/usr/local/soft/php8.3.9/var/run/php-fpm.pid
ExecStart=/usr/local/soft/php8.3.9/sbin/php-fpm
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true


[Install]
WantedBy=multi-user.target 

PrivateTmp=true表示使得服务拥有独立的临时文件系统,增加服务之间的隔离性,
此时/tmp目录下的文件禁止通过php访问,访问时即使文件存在也会报不存在
把PrivateTmp值改为false后则允许php访问/tmp目录下的文件

 

posted @ 2024-07-12 19:17  刘宏缔的架构森林  阅读(132)  评论(0编辑  收藏  举报