【问题标题】:PHP exec works in terminal but not via URLPHP exec 在终端中工作,但不能通过 URL
【发布时间】:2020-06-04 16:19:11
【问题描述】:

我有一个在终端中运行良好的 PHP 文件 (PHP /Users/xxx/Sites/upload.php)。

在此运行:

 exec('cordova -v 2>&1', $output, $return_var);
 or
 exec('/usr/local/bin/cordova -v 2>&1', $output, $return_var);
 print_r($output);

如果我随后通过浏览器(同一台机器)运行相同的 php 文件,则无法报告未找到cordova。

我试过 putenv("CORDOVA_HOME=/usr/local/bin/cordova");并将 httpd.conf 设置为 USER = USERNAME & GROUP = _www 但我不确定这是否正确,它们以前都是 _www。 PHP 是 PHP 7.3.11 版本,在 Mac catalina 上运行

任何指针都会有所帮助。

【问题讨论】:

  • 您的网络服务器在什么帐户下运行?可能不是您的用户帐户
  • 您检查错误日志了吗?对于一些线索
  • /usr/local/bin/cordova -v 2>&1 也许?
  • 我得到的唯一错误是'cordova:找不到命令',这也在日志中。 apache 在 _www 下运行,因此看起来与权限冲突,因为在 USERNAME 下的终端中它可以正常工作。我已将 httpd.conf 更改为 USER = USERNAME 但离开了 GROUP = _www 并且失败了。我是否还需要更改 GROUP,如果需要怎么办?

标签: php macos cordova macos-catalina


【解决方案1】:

CLI 和 FPM 通常使用不同的配置。检查safe_mode_exec_dir 和相关的PHP FPM 配置。

https://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode-exec-dir

【讨论】:

  • 我查看了 /php-fpm.d/www.conf.defaulf 并且用户+组被设置为nobody。这些应该被 _www 或 USERNAME 弄湿吗?是否应该将 www.conf.default 重命名为 www.conf? safe_mode_exec_dir 也不在 www.conf.default 中,因为我正在运行 PHP 7.3.11,它在 5.4 中被删除。作为测试,我将 httpd.conf (apache) 和 www.conf (php) 设置为相同的 USERNAME 和 GROUPNAME (我的用户名和组),但不高兴...
  • 我从终端和 php 检查了同一用户的 PATH,它们看起来不同,所以我添加了 putenv("PATH=".getenv('PATH').":/Users/usertest/.sdkman/候选人/gradle/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Library/Frameworks/Mono.framework/Versions /当前/命令");到 PHP 文件。这现在允许科尔多瓦运行,但产生错误 [throw new ERR_INVALID_ARG_TYPE(name, 'string', value);] from php but works in termainl
  • 真的。在最初的问题中,您说您正在使用路径,而不仅仅是命令。这将排除环境路径问题。
  • 验证您传递的参数是否相似且有效。如果它适用于 CLI 版本,那么应该会出现错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
相关资源
最近更新 更多