gpt4 book ai didi

php - PHP 中长命令的 exec() 问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:15 24 4
gpt4 key购买 nike

我在我的服务器上使用 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 它也不起作用。

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

编辑:

我试过 urlencode(),没有用。
我尝试了 escapeshellarg(),命令正确传递但不起作用。
我尝试使用短参数,命令正确传递但不起作用。

编辑 2:

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

编辑 3:

最后感谢Wrikken ,问题是我在 URL 中传递了 session_id(),然后我在 exec() 中重新使用它。我不得不添加 session_write_close();在我的 exec() 之前,因此 PHP 解锁当前 session 以使其可由 exec() 中的脚本重新访问。有关详细信息,请参阅下面的评论。

最佳答案

让我们将评论更新为一个答案:传递给命令行的任何和所有变量参数应该使用escapeshellarg 进行转义。

关于php - PHP 中长命令的 exec() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6928171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com