gpt4 book ai didi

PHP:获取真实/tmp 路径的方法?

转载 作者:行者123 更新时间:2023-12-03 21:27:41 32 4
gpt4 key购买 nike

我正在将我的 Web 应用程序从 CentOS 5 迁移到 CentOS 7,关于/tmp 目录的新安全功能正在破坏我的代码。我想知道如何最好地处理它。

我有创建 LaTeX 文件的 PHP 代码,然后执行命令将其转换为 PDF,然后使用适当的标题将其提供给用户。以下是目前的一些相关代码行:

$fileroot = "/tmp/addr".getmypid();
ob_start();
/* echo all the LaTeX stuff */
file_put_contents($fileroot.".tex",ob_get_contents());
ob_end_clean();
exec("cd /tmp;uplatex -interaction=batchmode --output-directory=/tmp $fileroot", $output, $return);

/usr/lib/systemd/system/php-fpm.service 中的设置包括 PrivateTmp=true ,这会导致 /tmp在 PHP 函数中调用真的是 /tmp/systemd-private-6898f2d665d64b998981bc479ddc2306-php-fpm.service-KU8XML/tmp .哎呀!这对安全来说很好,但 exec() 使用 /tmp字面上的路径,所以它找不到 file_put_contents() 的文件刚刚创建。 PHP函数 sys_get_temp_dir()刚刚返回 /tmp ,我在其中找不到任何带有该路径的环境变量。有没有办法以编程方式获得该路径?还是我需要关闭 PrivateTmp?或者有没有更好的方法来做我需要做的事情?是的,我可以使用完全开放的权限创建自己的特殊位置,但似乎只使用普通的临时目录应该更干净。

最佳答案

在我看来,只有两种选择:

  • 请勿使用 /tmp而是一个不同的目录,您在应用程序的配置文件中预定义了该目录。我最近做了类似的事情,我使用了 /var/run/myapplication目录而不是 /tmp . (我还必须添加一个 cron 作业来清理它。)
  • 禁用 PrivateTmp在 php-frm 服务中。这是执行此操作的一种方法:
    # mkdir  /usr/lib/systemd/system/php-fpm.service.d
    # echo -e "[Service]\nPrivateTmp=no" > /etc/systemd/system/php-fpm.service.d/privatetmp.conf
    # systemctl daemon-reload
    # systemctl restart php-fpm

    # systemctl show php-fpm | grep PrivateTmp
    PrivateTmp=no
  • 关于PHP:获取真实/tmp 路径的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43918979/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com