无法在php中通过shell_exec()函数运行wkhtmltopdf commad,但在命令行上使用相同的命令
我遇到了麻烦,对php shell_exec命令感到非常困惑。 当命令由PHP执行时,我没有错误,但执行失败。如果我从终端使用完全相同的命令,它就会工作 命令如下:无法在php中通过shell_exec()函数运行wkhtmltopdf commad,但在命令行上使用相同的命令,php,wkhtmltopdf,shell-exec,Php,Wkhtmltopdf,Shell Exec,我遇到了麻烦,对php shell_exec命令感到非常困惑。 当命令由PHP执行时,我没有错误,但执行失败。如果我从终端使用完全相同的命令,它就会工作 命令如下: /usr/bin/wkhtmltopdf --lowquality --dpi 300 --encoding utf-8 "/tmp/knplabs_snappyxa9otq.html" "/tmp/knplabs_snappyv3pD7h.pdf" $no_output = shell_exec($command); echo
/usr/bin/wkhtmltopdf --lowquality --dpi 300 --encoding utf-8 "/tmp/knplabs_snappyxa9otq.html" "/tmp/knplabs_snappyv3pD7h.pdf"
$no_output = shell_exec($command);
echo $no_output; // nothing
$output = shell_exec($command . ' 2>&1');
echo $output; // in my case : "cannot connect to X server"
当我从终端启动时:
$ /usr/bin/wkhtmltopdf --lowquality --dpi 300 --encoding utf-8 "/tmp/knplabs_snappyWG9XTd.html" "/tmp/knplabs_snappyv3pD7h.pdf"
Loading page (1/2)
Printing pages (2/2)
Done
但在我的php脚本中:
// Construct the previous command
$command = $this->buildCommand($url, $path);
../..
shell_exec($command);
../..
$content = file_get_contents($path);
../..
我已经测试了shell_exec的输出,它是空的
日志:
Warning: file_get_contents(/tmp/knplabs_snappyv3pD7h.pdf): failed to open stream: No such file or directory in /*****/lib/snappy/SnappyMedia.class.php on line 64
/tmp目录中没有权限pb:
$ ls -la /tmp
total 448
drwxrwxrwt 16 root root 4096 mars 12 21:51 .
../..
我尝试了使用avec和PHP exec()函数来获取错误信息,我只在return_var中得到了一个“1”错误代码,而在输出中没有得到任何结果
有关此问题的信息,请参见我的测试服务器、桌面计算机,但不在笔记本上。这三个版本都使用相同的PHP、Apache和Mysql版本。
我什么都不懂
谢谢你的帮助,我快疯了。
David。看起来像是用户权限问题 从终端运行命令时,当前使用的用户帐户具有在/usr/bin中运行命令并执行特定文件的正确权限 当您从php脚本运行它时,它是系统上的http服务器帐户,它需要在/usr/bin中执行文件的权限。通常这是apache用户
如何设置权限取决于您的系统。请记住,apache允许的内容允许任何人访问您的http服务器。它是共享主机吗?shell_exec似乎是一个受限函数。尝试运行
错误报告(E\u ALL);ini设置(“显示错误”,1)代码>在调用shell_exec之前。我在这里找到了解决方案:
多亏了克鲁兹楚
首先要从shell_exec
命令获取信息,请在命令末尾添加“2>&1”。这样,您将在命令返回时获得信息:
/usr/bin/wkhtmltopdf --lowquality --dpi 300 --encoding utf-8 "/tmp/knplabs_snappyxa9otq.html" "/tmp/knplabs_snappyv3pD7h.pdf"
$no_output = shell_exec($command);
echo $no_output; // nothing
$output = shell_exec($command . ' 2>&1');
echo $output; // in my case : "cannot connect to X server"
解决方案:
不使用该软件包(0.9.9-4)
使用来自
因此无需安装xvfb(这个建议我已经看过很多次了)我有这个问题已经很久了<代码>'2>&1'
在$命令
以某种方式解决了问题之后
这:
而不是:
$output = shell_exec($command);
不知道为什么,但它可以工作,我很感激。我偶然发现了同样的问题,在我的例子中,exec命令中的absolut路径(如/var/www)不起作用,我必须使用从执行php文件的点开始的相对路径
我还想注意,它在使用shell_exec时不起作用,但是它在使用普通的exec命令时起作用,不知道这里的区别在哪里 不,不是,apache服务器使用“david”uid(不是www数据)运行。这不会改变这一点。我已成功获取错误消息,命令执行结束时出现了2>&1:
$output=shell_exec($commande.2>&1”);echo$输出代码>我得到“无法连接到X服务器”。很高兴您找到了解决方案。我在想,您不允许使用该函数,错误报告将打开“投诉模式”,因此您会看到类似的内容:shell\u exec()由于安全原因在第1行被禁用。