首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在php中使用wkhtmltoimage

在php中使用wkhtmltoimage
EN

Stack Overflow用户
提问于 2013-01-31 10:55:38
回答 2查看 7.2K关注 0票数 4

当我在终端使用wkhtmltoimage时,它工作得很好。但它在php中使用时会出现一些问题。问题是: php代码:

代码语言:javascript
复制
<?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当我在终端中尝试相同的命令时,它也工作得很好。

但当我尝试其他链接时,它不能很好地工作。

代码语言:javascript
复制
<?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!请帮帮我。

EN

回答 2

Stack Overflow用户

发布于 2013-01-31 11:08:43

我猜是出于安全原因,在用于web服务器的php.ini文件中禁用了passthru。尝试执行以下代码:

代码语言:javascript
复制
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文件,否则您将无能为力。

编辑:此外,请确保在代码中启用错误报告,如果您尝试使用禁用的函数,它也应该显示某种警告。将以下代码放入您的代码中:

代码语言:javascript
复制
error_reporting(-1);
ini_set('display_errors', 'On');

编辑:

如果启用了passthru,那么我认为命令应该通过命令行正确执行的唯一原因是它没有被正确地传递到命令行。尝试使用escapeshellarg在参数两边添加引号。

代码语言:javascript
复制
$url = escapeshellarg('http://codante.org/linux-php-screenshot');
$command = "./wkhtmltoimage --width 164 --height 105 --quality 100 --zoom 0.2 $url file/test.jpg";

您可能还希望利用passthru的第二个参数,该参数返回命令的退出状态。非零值表示存在错误。

代码语言:javascript
复制
passthru($command, $status);
if ($status != 0) {
    echo "There was an error executing the command. Died with exit code: $status";
}

有关这些退出代码的列表,以帮助您调试正在发生的情况,请参见Exit codes with special meanings

票数 4
EN

Stack Overflow用户

发布于 2014-04-02 05:47:12

我在批处理文件中使用了PHP exec关键字。

它与wkhtmltoimage完美配合:

如下所示:我创建了1.html、1.bat和1.php,并将这3个文件保存到htdocs中。

1.bat:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<?php
    exec("1.bat");
    echo "done c:\howzit.jpg";
?>

PS由于localhost内部的安全设置,这些将不起作用:

代码语言:javascript
复制
<img src = "c:\howzit.jpg">
<img src = "file:///c:/howzit.jpg">
But you will find the new jpg file in your C: directory (WinXP)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14617720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档