wkhtmltoimage的参数列表过长错误

时间:2019-07-05 06:42:14

标签: php arguments 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的参数时,当我回显$resCommand的值时,它将抛出错误代码127(找不到命令)。而且当我尝试在腻子中执行命令时,也会引发如下错误,

-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) )

谢谢, 拉维坎德兰

2 个答案:

答案 0 :(得分:0)

我无法对其进行测试,但是我认为以下解决方法可以帮助您解决问题。最好不要更改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);

答案 1 :(得分:0)

我建议您像下面那样运行它


$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