php我听不懂,关于系统:PHP exec()在通过浏览器执行时不会执行shell命令

我有一个PHP脚本调用exec()来执行命令将PDF转换为JPG。这个命令在bash中工作正常。

要抢占您的初步故障排除猜测,请注意以下事项:

safe_mode =关闭

包含PDF和脚本的目录的权限设置为777,此目录也是写入JPG的位置。

我传递给exec()的命令显式指向正在使用的二进制文件(例如/ usr / local / bin / convert)。

display_errors = On

error_reporting = E_ALL

disable_functions = [空白]

我正在回显exec()的输出,它什么也没有返回。默认运行的命令不返回任何内容。

当我从浏览器调用此PHP脚本(访问http://www.example.com/script.php)时,exec()不会执行其参数。

重要提示:我知道我的脚本或构建bash命令的方式没有问题,因为从bash开始,我可以用'php'执行脚本并且它可以工作(例如'php script.php'转换文件)

我也尝试用system()切换exec()。

最后,我曾经有过这个问题,但是不记得我是怎么修的。

我知道有一些我缺少的东西,所以我希望其他人像我一样体验过这一点,并记得如何解决它!

提前感谢您提供的任何帮助。

亚历克斯

转换的参数是什么? 它们是否包含文件的完整路径?

在PHP 5中,请确保使用E_ALL | E_STRICT用于完整的错误报告。

更新 - 重要提示:我发现这是ImageMagick的一个问题,并使用GhostScript(使用更长的命令)完成了PDF到JPEG的转换,而不是使用ImageMagick作为中间人。 PHP,我的权限或exec()没有问题。 谢谢你的所有意见!

将2>&1添加到命令的末尾,以将错误从stderr重定向到stdout。这应该清楚地表明出了什么问题。

是的,我得到一个奇怪的ImageMagick错误:转换:缺少图像文件名`test.jpg'@ convert.c / ConvertImageCommand / 2766。 在与谷歌搜索了一下后,看起来它可能是一个错误的版本。 我正在重建最新的稳定版本并在几分钟内进行测试。

这是一个很好的提示!

我的天啊!!!!!!!!!!!!!!!!!!!

2>&1是什么意思? 那叫什么?

@duckx阅读:tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html

只是猜测一下,可能是您的Web服务器进程用户没有权限这样做。

优秀! 这是一个非常好的观点。 如果使用exec(通过php)调用bash脚本,请确保Apache也可以读取bash脚本。

因为它来自命令行(在你自己的用户帐户下),所以听起来像Web服务器运行的帐户(通常是"www-data")没有转换程序的执行权限。

有人如何授予权限?

你考虑过文件权限吗?在浏览器中,php在一个用户下运行,但是当你在bash中运行时,它可能会以你的用户权限运行。

这是我要检查的第一件事。

艾米

您的Apache / webserver用户是否具有运行shell命令的必要权限?

从cl运行时,您可能以不同的用户身份运行,这可能会解释哪些cl工作但是通过浏览器不能。

怎么检查是perrmiss?

需要为Apache的用户www-data授予使用sudo执行某些应用程序的权限。

运行命令sudo visudo。实际上我们想在etc/sudoers中编辑文件。为此,通过在终端中使用sudo visudo,它复制(temp)sudoers文件进行编辑。

在文件的末尾,添加以下例子: - 如果我们想要使用命令重新启动smokeping并使用mount命令执行另一个操作,

www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, /bin/mount

(这假设您希望使用超级用户运行restart和mount命令

(root)权限。)

但是,如果您希望使用每个应用程序运行

超级用户权限,然后添加以下内容而不是上面的内容。您可能不想这样做,而不是ALL命令,非常危险。

www-data ALL=NOPASSWD: ALL

3.编辑sudoers文件后(通过visudo编辑sudoers的临时文件,然后保存并退出临时文件(visudo)以写入sudoers文件。(wq!)

4.就是这样,现在在xxx.php script.keep中以下列方式使用exec(),记得在php脚本中使用命令之前使用sudo。

例如: -

exec ("sudo /etc/init.d/smokeping restart 2>&1");

因此,在您的问题中,将您希望使用的命令添加到step no (2.),因为我添加并更改您想要的PHP脚本。

这可能是由于不同的用户通过Web服务器运行脚本而脚本通过bash运行。

通常,脚本/ exec通过服务器调用,与用户'www'一样,并且该用户对您的区域没有任何写访问权限。但是当你在bash中运行脚本时,你就拥有了写权限。

默认输出设备已更改。

登录为www(启用后)通过shell提供输出,但不通过php。

我已经确定这是ImageMagick的问题,而不是PHP。我正在尝试一些修复,如果它们不起作用,我将最终使用一些PHP共享库(可能是想象力)来完成工作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值