linux php shell_exec,关于linux:无法在PHP shell_exec()命令中运行inkscape

我有一个设计工具扩展,用于我正在处理的网站上。设计工具使用inkscape命令行导出图像。有一个php接口可以使用最终调用shell_exec($inkscapeCmd)的命令行操作。在注意到图像文件没有被导出之后,我创建了一些测试来尝试和调试。我将执行行更改为shell_exec($inkscapeCmd . ' 2>&1')以查看错误消息:

sh: inkscape: command not found

...这是奇怪的,因为它肯定安装和访问。我在测试页面上添加了对用户的检查,以确保有权访问inkscape的用户执行命令:

$processUser = posix_getpwuid(posix_geteuid());

echo 'user: ' . $processUser['name'];

然后我ssh进入服务器以确认我可以运行与该用户相同的命令,并且能够运行它们而没有任何问题(这也确认了inkscape在PATH中)。我可以从PHP运行其他基本shell命令而不会出现问题,如下所示:

echo shell_exec('ls');

但现在我不知所措;我不知道还有什么可以检查以确定为什么我收到'命令未找到'错误。任何方向都会有所帮助。

服务器(相当陈旧,我知道):

CentOS 6.7

PHP 5.3.3

Inkscape v0.47

为什么这会被贬低? 我以为我问了一个合理的问题,我最终得到了我想要的答案; 设计工具需要可执行文件的路径(它在配置文件中定义不正确)。

该进程在其路径中没有inkscape的位置。

您必须提供可执行文件的完整路径。

在/ usr/ bin中/ Inkscape中

在命令行中键入'whereis inkscape'来查找位置。

这样做了。您是否有机会解释为什么在这种情况下该过程需要完整路径?它不使用进程用户的路径吗?

您登录的用户与运行Web服务器的用户不同。在命令行上执行'echo $ PATH'。这将显示您的路径。您可以运行可执行文件而无需指定完整的程序路径。 Web服务器在更多可能的情况下运行的用户被条带化到最低限度。这就是为什么如果你看一下很多基于网络的软件,你需要填写某些系统软件的路径。

以前,当我从命令行测试时,我确实以Web服务器用户身份登录。当Web服务器是启动器时,是否存在某种已修改的设置/路径?不确定这是否是提出问题的正确方法?

你将不得不进入CentOS的深处并假设apache。要了解发生了什么。我确信有很多事情可以保护网络服务器。我自己就是想在配置文件中填写完整路径。一方面的好处是你需要拥有主要发行版上不同版本的内容,你可以将它放在一个不同的位置供你访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值