Слишком длинный список аргументов для wkhtmltoimage

Я хочу сделать снимок экрана и сохранить его на сервере. Я использовал приведенную ниже команду для захвата экрана в моем php-коде.

$exec_command = "wkhtmltoimage --quality 10 --window-status 'wbcaptureready' --width 1200 --post 'estr' 
'JTNDVFZXQiUzRSUzQ3diJTIwc0lkJTNEJTIyd2I3NzYyNzVpeWFma3hya3Qy9UVldCJTNF' --post 'ispagehasdocument' '0' --height 1260 --enable-plugins --no-stop-slow-scripts https://example.org/page/capture/ '/data/screencapture/data/1234/1256/screenshots/screenshots/wbPage_^{4BEFBE59-EF14-4de4-9D08-3267BB76D8EA^}_0.png'";
$output = system($exec_command, $resCommand);

Когда я запускаю приведенный выше код, он работает нормально. Но когда я передал огромный текст значений параметру с именем estr, он выдает код ошибки 127 (команда не найдена), когда я повторяю значение $resCommand. А также, когда я пытаюсь выполнить команду в замазке, она выдает ошибку, как показано ниже,

-bash: /usr/bin/wkhtmltoimage: Argument list too long

Основываясь на вышеуказанной ошибке, я просматривал Интернет и получил предложение увеличить значение ARG_MAX. Но предложения не были четкими и расплывчатыми. Я не мог найти аргумент и как увеличить значение.

Пожалуйста, подскажите, где и как увеличить значение ARG_MAX, или подскажите, есть ли какое-либо другое решение для решения этой проблемы?

Моя версия ОС: - Linux version 2.6.32-696.6.3.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) )

Спасибо, Равичандран

Можете ли вы поделиться таким значением, которое вызывает ошибку? Если да, то имеет ли это значение какой-либо из символов $/\'"

Tarun Lalwani 08.07.2019 07:57

@TarunLalwani Нет, в нем нет $/\'" этих символов. Это текст в кодировке base64.

Ravichandran Jothi 08.07.2019 10:44

Наверно попал в это? stackoverflow.com/questions/14720253/…

Tarun Lalwani 08.07.2019 10:52

@TarunLalwani Я четко упомянул об ошибке Argument list too long. Как я могу это исправить?. Есть ли другой способ решить эту проблему?

Ravichandran Jothi 08.07.2019 11:25

Не могли бы вы подтвердить, сколько составляет длина, после которой вы получаете ошибку? по моему так и должно быть 8192

Tarun Lalwani 09.07.2019 19:37

@TarunLalwani Длина аргумента составляет почти 170535. Она может превышать в зависимости от введенного пользователем текста.

Ravichandran Jothi 10.07.2019 06:53

Я говорю, в какой момент вы получаете ошибку, можете ли вы подтвердить, что она после 8192?

Tarun Lalwani 10.07.2019 07:30

Не могли бы вы поделиться результатом system("getconf ARG_MAX", $resCommand);? Также можете ли вы поделиться реальной командой, я могу попытаться воспроизвести проблему?

Tarun Lalwani 12.07.2019 09:48

Любое обновление ответа, который я опубликовал?

Tarun Lalwani 16.07.2019 03:19

@RavichandranJothi Всегда приятно участвовать в ответах, которые дают люди, чтобы они знали, сработало ли что-то у вас или нет. Это также поможет другим людям, которые могут оказаться на этой странице позже, найти решения. Любая обратная связь всегда лучше, чем ее отсутствие.

Kamal Soni 16.07.2019 05:48

@KamalSoni Эй, ты прав. понял вашу озабоченность. Я проверю это и отвечу в ближайшее время. Он откладывается из-за некоторых других приоритетов.

Ravichandran Jothi 16.07.2019 06:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
11
719
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не могу проверить это, но я считаю, что приведенный ниже обходной путь должен помочь вам решить проблему. Вероятно, лучше оставить значение ARG_MAX нетронутым, поскольку оно может иметь побочные эффекты.

//This value can't have any spaces and as your string is base64encoded it shouldn't be a problem in your case.
$estrVal = 'JTNDVFZXQiUzRSUzQ3diJTIwc0lkJTNEJTIyd2I3NzYyNzVpeWFma3hya3Qy9UVldCJTNF';
//You can also create a unique file name instead of estr.txt & may be delete it later if not needed.
$estrFile = './path/to/estr.txt'; 
file_put_contents($estrFile, $estrVal);

$exec_command = "wkhtmltoimage --quality 10 --window-status 'wbcaptureready' --width 1200 --post 'estr' \"$(< ./path/to/estr.txt)\"
 --post 'ispagehasdocument' '0' --height 1260 --enable-plugins --no-stop-slow-scripts https://example.org/page/capture/ '/data/screencapture/data/1234/1256/screenshots/screenshots/wbPage_^{4BEFBE59-EF14-4de4-9D08-3267BB76D8EA^}_0.png'";

$output = system($exec_command, $resCommand);

Думаю, эта идея должна сработать. Нужно проверить и подтвердить. Спасибо за ответ

Ravichandran Jothi 16.07.2019 13:36

Я бы порекомендовал вам запустить его, как показано ниже.


$exec_command = "ulimit -s 65535 && wkhtmltoimage --quality 10 --window-status 'wbcaptureready' --width 1200 --post 'estr' 
'JTNDVFZXQiUzRSUzQ3diJTIwc0lkJTNEJTIyd2I3NzYyNzVpeWFma3hya3Qy9UVldCJTNF' --post 'ispagehasdocument' '0' --height 1260 --enable-plugins --no-stop-slow-scripts https://example.org/page/capture/ '/data/screencapture/data/1234/1256/screenshots/screenshots/wbPage_^{4BEFBE59-EF14-4de4-9D08-3267BB76D8EA^}_0.png'";
$output = system($exec_command, $resCommand);

Вероятно, это должно увеличить размер списка аргументов для вас.

php > $output = system("getconf ARG_MAX", $resCommand);
2097152
php > $output = system("ulimit -s 65535 && getconf ARG_MAX", $resCommand);
16776960

Другие вопросы по теме