Я использую 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 и заменяю его на? Any = ImAmAVeryLongStringThatDoNothing, он тоже не работает.
Я на CentOS 5 использую WHM / cPanel.
Заранее спасибо за любую помощь!
Edit:
Я пробовал urlencode (), не работает.
Я пробовал escapeshellarg (), команда правильно прошла, но не работает.
Я пытался использовать короткие параметры, команда правильно прошла, но не работает.
Редактировать 2:
Существует ли ограничение длины строки при использовании exec (), system () или passthru ()?
Редактировать 3:
Наконец, благодаря Wrikken , проблема заключалась в том, что я передавал session_id () в URL, а затем снова использовал его в exec (). Мне пришлось добавить session_write_close (); до моего exec (), поэтому PHP разблокирует текущий сеанс, чтобы сделать его доступным для редактирования сценарием exec () См. Комментарии ниже для получения дополнительной информации.