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