在PHP中传递给exec的命令长度是否有限制?

Currently I need to merge that 50+ PDF files into 1 PDF. I am using PDFTK. Using the guide from: http://www.johnboy.com/blog/merge-multiple-pdf-files-with-php

But it is not working. I have verified the following:

  1. I have tried the command to merge 2 pdfs from my PHP and it is working.
  2. I have echo the final command and copied that command and paste into command prompt and run manually and all the 50 PDFs are successfully merged.

Thus exec in my PHP and the command to merge 50 PDFs are both correct but it is not working when done together in PHP. I have also stated set_time_limit(0) to prevent any timeout but still not working.

Any idea what's wrong?

Thanks In Advance.

I am not sure if there is a length restriction on how long a single command can be but I am pretty sure you can split it accross multiple lines with "\" just to check if thats the problem. Again I dont think it is... Is there any error output when you try to run the full command with PHP and exec, also try system() instead of exec().

You can try to find out yourself:

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

I think it's 8192, at least on my system, because it fails with strings larger than 10K, but it still works with strings shorter than 7K

PDFTK versions prior to 1.45 are limited to merge 26 files cuz use "handles"

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

as you can see "A" and "B" are "handles", but should be a single upper-case letter, so only A-Z can be used, if u reach that limit, maybe you script outputs an error like

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

but in 1.45 this limitation was removed, changelog extract

You can now use multi-character input handles. Prior versions were limited to a single character, imposing an arbitrary limitation on the number of input PDFs when using handles. Handles still must be all upper-case ASCII.

maybe you only need update your lib ;)