PHP中传递给exec的命令长度有限制吗

  • 本文关键字:命令 有限制 exec PHP php pdftk
  • 更新时间 :
  • 英文 :


目前我需要将50多个PDF文件合并为1个PDF文件。我正在使用PDFTK。使用以下指南:http://www.johnboy.com/blog/merge-multiple-pdf-files-with-php

但它不起作用。我已经验证了以下内容:

  1. 我已经尝试了从我的PHP中合并2个PDF的命令,它正在工作
  2. 我已经回显了最后一个命令,并复制了该命令并粘贴到命令提示符中,手动运行,所有50个PDF都成功合并

因此,我的PHP中的exec和合并50个PDF的命令都是正确的,但在PHP中一起执行时不起作用。我还声明了set_time_limit(0)以防止任何超时,但仍然不起作用。

知道怎么了吗?

您可以尝试了解自己:

print exec(str_repeat(' ', 5000) . 'whoami');

我认为它是8192,至少在我的系统上是这样,因为它在大于10K的字符串时失败,但在小于7K的字符串中仍然有效

我不确定一个命令的长度是否有限制,但我很确定你可以用"\"将它拆分成多行,只是为了检查是否有问题。同样,我不认为是…当你尝试用PHP和exec运行完整命令时,是否有任何错误输出,也尝试使用system()而不是exec()。

1.45之前的PDFTK版本仅限于合并26个文件,因为使用"handles"

/* Collate scanned pages sample */
pdftk A=even.pdf B=odd.pdf shuffle A B output collated.pdf

正如你所看到的,"A"one_answers"B"是"句柄",但应该是一个大写字母,所以只有A-Z可以使用,如果你达到了这个极限,也许你的脚本输出了一个错误,比如

Error: Handle can only be a single, upper-case letter

但在1.45中,这个限制被取消了,更改日志提取

现在可以使用多字符输入控制柄。以前的版本是仅限于一个字符,对使用句柄时输入PDF的数量。手柄仍然必须全部大写ASCII。

也许你只需要更新你的lib;)

最新更新