我在我的服务器上使用 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=ImAAmAVeryLongStringThatDoNothing 它也不起作用。
我在 CentOS 5 上使用 WHM/cPanel。提前感谢您的帮助!
编辑:
我试过 urlencode(),没用。
我尝试了 escapeshellarg(),命令正确传递但不起作用。
我尝试使用短参数,命令正确传递但不起作用。
编辑2:
使用 exec()、system() 或 passthru() 时是否有字符串长度限制?
编辑3:
最后,感谢Wrikken,问题是我在 URL 中传递了 session_id(),然后我在 exec() 中重新使用了它。我不得不添加 session_write_close(); 在我的 exec() 之前,PHP 会解锁当前会话以使其可被 exec() 中的脚本更改为红色。有关更多信息,请参阅下面的评论。