首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:无法exec() wkhtmltopdf:"sh: /usr/bin/wkhtmltopdf:许可权被拒绝“

PHP:无法exec() wkhtmltopdf:"sh: /usr/bin/wkhtmltopdf:许可权被拒绝“
EN

Stack Overflow用户
提问于 2014-03-21 13:54:32
回答 4查看 9.1K关注 0票数 2

我对unix并不感兴趣,这就是为什么这个东西对我来说有点奇怪的原因。

操作系统是CentOS 6。

我读过几乎所有关于wkhtmltopdf的主题,但我的问题仍然存在。实际上,这不是wkhtmltopdf问题,而是权限问题。

总而言之: wkhtmltopdf在命令行中工作,而不是使用php exec()。

但是wget在php exec()中工作得很好:

我可以在命令行中执行wkhtmltopdf,工作正常:

/usr/bin/wkhtmltopdf "test.de" "/var/www/html/test/test.pdf" 2>&1

我可以用php执行wget,工作得很好:

exec('/usr/bin/wget -O /var/www/html/test/test123.txt "test.de" 2>&1', $output, $return_var);

但是,我无法使用php执行wkhtmltopdf:

exec('/usr/bin/wkhtmltopdf "test.de" "/var/www/html/test/test.pdf" 2>&1', $output, $return_var);

这导致"sh: /usr/bin/wkhtmltopdf:拒绝“

我检查了/usr/bin/wkhtmltopdf,并将其与/usr/bin/wget进行了比较。

权限相同: rwxr-xr-x或0755。

即使我将/usr/bin/wkhtmltopdf的chmod设置为777并将所有者设置为apache,错误仍然是相同的。

也许是百胜的事?!因为我通过yum和wkhtmltopdf安装了wget。这是我唯一能想到的不同之处。

我安装了wkhtmltopdf,如下所示:

tar -vxjf wkhtmltopdf-0.9.9-static-amd64.tar.bz2

mv wkhtmltopdf-amd64 /usr/bin/wkhtmltopdf

chmod +x /usr/bin/wkhtmltopdf

或者这会是SELinux的问题吗?我对此不太了解,但我阅读了我的研究,"httpd_ssi_exec“和"httpd_execmem”可能会有所帮助,我把两者都说为“是”,但拒绝许可的问题仍然存在。

因此,我想知道为什么wget与php和wkhtmltopdf不一起工作?希望有人能帮助我,我可以停止在这件事上生气;)

向你问好,亚历克斯

P.S.:test.de在我的脚本中是http://test.de,但是我不能发布两个以上的链接。

EN

回答 4

Stack Overflow用户

发布于 2014-03-21 16:44:58

尽管权限是777,但作为www user.There执行的命令将受到很大的限制,因为www具有非常低的权限levels.So使用setuid文件权限

setuid意思是在执行时设置用户ID。如果setuid位打开了一个文件,执行该可执行文件的用户将获得拥有file.Hence的个人或组的权限,您可以以root/高特权用户的身份执行该命令。

票数 1
EN

Stack Overflow用户

发布于 2014-08-20 20:38:35

您可以使用:

代码语言:javascript
复制
exec('/usr/local/bin/wkhtmltopdf --print-media-type index.html termo590.pdf 2>&1');
票数 1
EN

Stack Overflow用户

发布于 2014-03-26 13:38:46

如果不想禁用SELinux,另一种方法是使用cron运行此命令./usr/bin/wkhtmltopdf "test.de" "/var/www/html/test/test.pdf" 2>&1

1)从php程序中将参数名写入文件。

代码语言:javascript
复制
 $Handle = fopen("myfile", 'w');
 fwrite($Handle, "test.de");
 fclose($Handle);

2)创建一个bash脚本来读取该参数名并将其转换为pdf。

代码语言:javascript
复制
#!/bin/sh
arg=$(head -n 1 myfile)   
/usr/bin/wkhtmltopdf arg "/var/www/html/test/test.pdf" 2>&1

保存为pdf_converter.sh

代码语言:javascript
复制
chmod +x pdf_converter.sh

3)在crontab中配置脚本

crontab -e和粘贴这个

代码语言:javascript
复制
* * * * * pdf_converter.sh
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22560792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档