当前位置:  开发笔记 > 编程语言 > 正文

exec()在PHP中使用long命令的问题

如何解决《exec()在PHP中使用long命令的问题》经验,为你挑选了1个好方法。

我在我的服务器上使用wkhtmltopdf将HTML文档传输到PDF.当我使用短URL时它非常有效:

exec("/opt/wkhtmltopdf/bin/wkhtmltopdf --page-size 'Letter' --orientation 'Portrait' 'http://myurl.com/myPHPfile.php?id=12' '/tmp/myfile.pdf'")

当我使用长命令时会出现问题,例如:

exec("/opt/wkhtmltopdf/bin/wkhtmltopdf --title 'The name of my file' --page-size 'Letter' --orientation 'Portrait' 'http://myurl.com/myPHPfile.php?phpsid=d8dbfbb91c0748d91426441e67aaf2b6&id=436' '/tmp/The name of my file.pdf'")

请注意,当我直接从Putty运行这个长命令时,它可以很好地工作.

问题是,当我使用exec(或shell_exec()或system()或passthru())时,页面将永远加载,我的网络服务器不再响应.我必须自己从Putty(ps -x然后杀死PID)关闭进程.

请注意,如果我删除了?phpsid =它运行良好,这就是为什么我说只有长命令才会出现问题.如果我删除?phpsid = d8dbfbb91c0748d91426441e67aaf2b6并将其替换为?anything = ImAmAVeryLongStringThatDoNothing它也不起作用.

我在使用WHM/cPanel的CentOS 5上.在此先感谢您的帮助!

编辑:

我试过urlencode(),不行.
我试过escapeshellarg(),命令正确传递但不起作用.
我试图使用短参数,命令正确传递但不起作用.

编辑2:

使用exec(),system()或passthru()时是否有字符串长度限制?

编辑3:

最后,感谢Wrikken,问题是我在URL中传递了session_id(),然后我在exec()中重新使用它.我不得不添加session_write_close(); 在我的exec()之前,所以PHP解锁当前会话,使其可以通过exec()中的脚本进行修改.有关更多信息,请参阅下面的评论.



1> Wrikken..:

让我们将注释更新为答案:传递给命令行的任何和所有变量参数都应该被转义escapeshellarg

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有