更新:通过从 php exec 重定向 stderr,我现在可以看到运行 maxima 会产生分段错误,增加了这实际上是一个错误的可能性。
重要提示:这曾经在旧版本的 PHP/Ubuntu 上完美运行。
我试图让 PHP exec() (或 shell_exec() )将 maxima 调用的输出(stdout)重定向到文本文件。我得到的只是一个空文件。
我尝试了最简单的命令:
exec( "maxima -b /var/www/tmpIn.txt > /var/www/tmp/tmpOut.txt");
(tmpIn.txt仅包含文本“1+1;”,所有权限均已正确设置)。
如果我将此命令粘贴到终端中,它会正常工作,php 的 exec() 只会生成一个空文件。然而,这仅适用于最大二元; cat/echo/ls 等重定向就好了。
对我来说,这似乎非常奇怪,特别是因为这段代码过去工作得很好,如上所述。有没有办法解决这个“bug”?
系统信息: ubuntu 20.04 Apache2 上的 PHP 版本 7.4 千里马5.43.2 重击
我最终通过将 Apache 2 用户从 www-data 更改为计算机上的另一个用户来解决该问题,以便该用户受到某种限制。我认为这仍然应该被视为一个错误,因为如果这些限制是故意的,则分段错误消息应该被实际的错误消息替换。
更新:新的 apache2 用户(从 envvars 文件设置)必须有一个主目录(例如通过 adduser 而不是 useradd 添加),否则问题将持续存在。如果将此设置为活动用户,则如果该用户从外部登录/注销,服务器可能会关闭。这些发现可能表明 maxima 中存在假设用户目录或类似目录的错误。我不确定采取相反的方式(为 www-data 添加主目录)是否可以解决此错误。
假设安装路径为/usr/local/maxima5.43.2
请尝试使用以下方法:
exec( "/usr/local/maxima5.43.2/maxima -b /var/www/tmpIn.txt > /var/www/tmp/tmpOut.txt");
请根据自己的安装路径调整路径。另外请给apache添加maxima的读取和执行权限,也可以尝试使用sudo运行
还不能发表评论,因为代表...
在 Ubuntu 20.04 上,我安装了 gnuplot-nox、maxima(无推荐和无建议以防止拉入 X11/GNOME)和 maxima-share。
作为 root 工作正常,但 www-data 出现段错误。根据这里其他答案中的信息,我确定它需要写入 $HOME,因此将 /var/www chown'ed /var/www 更改为 www-data:www-data,因为默认情况下它是 root:root 。现在它可以正常工作了,不确定出于安全原因我是否应该将 www-data 的 homedir 更改为其他位置。