Список аргументов слишком длинная ошибка для wkhtmltoimage - PullRequest
3 голосов
/ 05 июля 2019

Я хочу сделать снимок экрана и сохранить его на сервере. Я использовал приведенную ниже команду для получения снимка экрана в своем 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 (mockbuild@c1bl.rdu2.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) )

Спасибо, Ravichandran

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

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


$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
0 голосов
/ 11 июля 2019

Я не могу его протестировать, но считаю, что приведенный ниже обходной путь должен помочь вам решить проблему. Вероятно, лучше оставить значение 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);
...