php file_put_contents文件找不到

今天线上的提现功能出了点小问题,用户提不了钱。最终确认到时一条sql语句有问题,因为sql使用laravel的orm写的,想看看具体执行的sql语句,就开启了sql监听日志,将sql语句写入日志文件。

 file_put_contents('/tmp/db.sql', $log . PHP_EOL, FILE_APPEND);

然后 ls /tmp 发现找不到文件,开发时明明在这个文件下,怎么会没有。于是我全局搜索了一下这个文件 find / -name db.sql 发现文件换了个目录 ,在/tmp/systemd-private-a49a7d738eb0461390d9948de3202b3c-php-fpm.service-0MJOaF/tmp/ 下。而且用命令行执行产生的文件还是在 /tmp目录下。联想几处的不同,猜想可能与服务器配置和执行的进程用户有关,还是上网搜。发现与服务器的 systemd 服务有关,systemd服务会将的/tmp/目录重定向到另外一个目录 。可以通过 grep -R PrivateTmp /etc/systemd 找到哪些开启了这个服务。如果想关闭php-fpm的重定向,编辑/etc/systemd/system/multi-user.target.wants/php-fpm.service 文件,将PrivateTmp=true 改成 PrivateTmp=false就行。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注