我正在使用 PHP 在如下所示的脚本上运行 exec():
exec("pdftk xx.pdf fill_form xx.fdf output xx.pdf flatten");
最奇怪的是,当我登录 ssh 并手动输入命令时 - 它工作正常!它输出 224k pdf。但是当我使用 exec() 命令时,只有脚本的前 36k 出来。(我检查了 - 好文件的前 36k 与坏文件相同)
没有继承人奇怪的事情 - 这与 exec() 工作正常,直到我向 fdf 文件添加了更多变量,使其更长。由于新数据,我认为这是 fdf 的问题 - 但是为什么这个过程可以从 ssh 正常运行?
更新:我也尝试运行 php -f test.php (其中只有一个 exec 行)。正确输出整个文件。但即使我去http://mydomain.com/test.php我也只能得到文件的一部分。
脚本没有超时,因为我让它在 exec() 命令之后回显一些东西,它工作正常。
这不可能是权限问题(ssh 以 root 身份登录),因为它仍然能够写入文件
另外 - 当我尝试从 exec 或 passthru 获取返回或退出值时,我什么也得不到。返回值始终为 0。
更新:在 apache 错误日志中,我得到
[2010 年 9 月 17 日星期五 20:00:57] [错误] 未处理的 Java 异常:[2010 年 9 月 17 日星期五 20:00:57] [错误] java.lang.OutOfMemoryError [2010 年 9 月 17 日星期五 20:00:57] [错误] <>
我将 php_ini 从 32M 更改为 64M - 仍然得到它。考虑到这些都是小文件,我不认为就是这样。但是 PHP 能够像这样限制子进程的内存吗?在某个地方还有其他设置吗?
帮助!