php - Ubuntu 20.04 上的 Maxima 分段错误 PHP exec()
问题描述
更新:通过从 php exec 重定向 stderr,我现在可以看到运行最大值会产生分段错误,增加了这实际上是错误的可能性。
重要提示:这曾经在旧版本的 PHP/Ubuntu 上完美运行。
我试图让 PHP exec() (或 shell_exec() )将最大值调用的输出(stdout)重定向到文本文件。我得到的只是一个空文件。
我尝试了最简单的命令:
exec( "maxima -b /var/www/tmpIn.txt > /var/www/tmp/tmpOut.txt");
(tmpIn.txt 只包含文本“1+1;”,所有权限都设置正确)。
如果我将此命令粘贴到终端中,它将正常工作,php 的 exec() 只会产生一个空文件。但是,这仅适用于最大值二进制;cat/echo/ls 等重定向就好了。
对我来说,这似乎非常奇怪,特别是因为该代码曾经如前所述运行良好。这个“错误”有什么解决方法吗?
系统信息:Apache2 Maxima 5.43.2 bash 上的 ubuntu 20.04 PHP 7.4 版
解决方案
我终于通过将 Apache 2 用户从 www-data 更改为机器上的另一个用户来解决了这个问题,因此该用户在某种程度上受到了限制。我相信这仍然应该被视为一个错误,因为如果这些限制是故意的,则应该将分段错误消息替换为实际的错误消息。
更新:新的 apache2 用户(从 envvars 文件设置)必须有一个主目录(例如通过 adduser 而不是 useradd 添加)否则问题将持续存在。如果将此设置为活动用户,则如果该用户从外部登录/注销,服务器可能会关闭。这些发现可能指向假设用户目录或类似目录的最大值的错误。我不确定反过来(为 www-data 添加主目录)是否可以解决此错误。
推荐阅读
- python - 我应该如何遍历并展示本地文件夹中的几张图片?
- selenium - 在 Docker 容器中运行 Robot Framework Selenium 测试时出现 Geckodriver/Firefox 问题
- java - 在 Netbeans 中使用 OpenJ9
- java - 有没有更好的方法来摆脱目录遍历攻击?
- arrays - 在 SAS 中生成人口数据集
- node.js - Is there a way to pass PM2 cluster instance ID to a compiled webpack node.js server?
- swift - 无法在 gCloud 中部署 Swift Vapor 应用程序
- node.js - "Callback function is not a function" Error when following Google Cloud Scheduler / PubSub tutorial
- asp.net-mvc - 带有 HTML 页面的 MVC Web 应用程序
- reactjs - 为什么 react hot loader 仅适用于 hot(module)(App) 并在其他人中重置 reducer 状态?