当我在终端使用wkhtmltoimage时,它工作得很好。但它在php中使用时会出现一些问题。问题是: php代码:
<?php
$command = './wkhtmltoimage --width 164 --height 105 --quality 100 --zoom 0.2 http://www.google.com file/test.jpg';
ob_start();
passthru($command);
$content = ob_get_clean();
echo $command;
echo $content;
?>It works.And当我在终端中尝试相同的命令时,它也工作得很好。
但当我尝试其他链接时,它不能很好地工作。
<?php
$command = './wkhtmltoimage --width 164 --height 105 --quality 100 --zoom 0.2 http://codante.org/linux-php-screenshot file/test.jpg';
ob_start();
passthru($command);
$content = ob_get_clean();
echo $command;
echo $content;
?>当我在terminal.It works中尝试相同的命令时,它会发生work.But!请帮帮我。
发布于 2013-01-31 11:08:43
我猜是出于安全原因,在用于web服务器的php.ini文件中禁用了passthru。尝试执行以下代码:
function passthru_enabled() {
$disabled = explode(', ', ini_get('disable_functions'));
return !in_array('exec', $disabled);
}
if (passthru_enabled()) {
echo "passthru is enabled";
} else {
echo "passthru is disabled";
}如果它被禁用,那么除非您可以编辑php.ini文件,否则您将无能为力。
编辑:此外,请确保在代码中启用错误报告,如果您尝试使用禁用的函数,它也应该显示某种警告。将以下代码放入您的代码中:
error_reporting(-1);
ini_set('display_errors', 'On');编辑:
如果启用了passthru,那么我认为命令应该通过命令行正确执行的唯一原因是它没有被正确地传递到命令行。尝试使用escapeshellarg在参数两边添加引号。
$url = escapeshellarg('http://codante.org/linux-php-screenshot');
$command = "./wkhtmltoimage --width 164 --height 105 --quality 100 --zoom 0.2 $url file/test.jpg";您可能还希望利用passthru的第二个参数,该参数返回命令的退出状态。非零值表示存在错误。
passthru($command, $status);
if ($status != 0) {
echo "There was an error executing the command. Died with exit code: $status";
}有关这些退出代码的列表,以帮助您调试正在发生的情况,请参见Exit codes with special meanings
发布于 2014-04-02 05:47:12
我在批处理文件中使用了PHP exec关键字。
它与wkhtmltoimage完美配合:
如下所示:我创建了1.html、1.bat和1.php,并将这3个文件保存到htdocs中。
1.bat:
cd\
cd c:\program files\wkhtmltopdf\bin
wkhtmltoimage http://localhost/1.html C:\howzit.jpg
rem (you can write to C: but not write to htdocs folder.)1.php:
<?php
exec("1.bat");
echo "done c:\howzit.jpg";
?>PS由于localhost内部的安全设置,这些将不起作用:
<img src = "c:\howzit.jpg">
<img src = "file:///c:/howzit.jpg">
But you will find the new jpg file in your C: directory (WinXP)https://stackoverflow.com/questions/14617720
复制相似问题