1

我正在尝试使用以下代码将 PDF 转换为 JPG 文件:

$pdf_file = 'text.pdf';
$save_to = 'demo.jpg'; //make sure that apache has permissions to write in this folder! (common problem)
//execute ImageMagick command 'convert' and convert PDF to JPG with applied settings
exec('convert '.$pdf_file.' '.$save_to, $output, $return_var);

if($return_var == 0) { //if exec successfuly converted pdf to jpg
print "Conversion OK";
}
else print "Conversion failed.<br />".$output;

我收到消息 Conversion OK 但没有创建图像文件。当我在不同的服务器上尝试这个时,一切正常。根目录的权限设置为 777。我不知道为什么它不起作用……我不知道两台服务器上都安装了哪些版本的 Imagemagick。也许这就是问题所在?在 phpinfo() 中没有关于版本或任何内容的信息。

4

3 回答 3

2

您在运行“转换”时遇到问题,因为 PHP 函数 exec() 已在您的 php.ini 文件中禁用。

当 exec() 命令失败时,可以采取多个步骤来解决问题:

  1. 验证是否打开了安全模式。具体来说,文档说:

    注意:启用安全模式后,您只能执行 safe_mode_exec_dir 中的文件。出于实际原因,目前不允许在可执行文件的路径中包含 .. 组件。

  2. 打开错误报告,看看是否提供更多信息。这可以通过在脚本顶部添加如下代码来完成:

    ini_set('display_errors', 1);
    ini_set('error_reporting', E_ALL);
    
  3. 将 exec() 命令简化为应该始终有效的命令:

    exec('/bin/echo helloWorld',$output);
    var_dump($output);
    

在您尝试上面的步骤 3 时的特定情况下,它返回 null。Null 是当 exec() 函数被禁用时 PHP 返回的。此外,如果您能够打开错误报告(步骤 #2),输出将类似于以下内容:

PHP Warning:  exec() has been disabled for security reasons in /home/path/to/file.php on line 2
NULL

解决这个问题的方法是在php.ini中启用exec功能或者去一个允许使用该功能的主机/服务器。

于 2012-10-11T20:22:13.013 回答
0

尝试明确的错误报告:error_reporting(E_ALL),也许它会给出有关 exec 权限的警告。

另外:“根目录的权限”是指执行和保存文件的文件夹?

于 2012-10-10T21:35:24.427 回答
0

服务器上是否启用了安全模式?

启用安全模式后,您只能执行

安全模式执行目录

有关其他信息,请参见此处:

http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode-exec-dir

于 2012-10-10T21:38:45.903 回答