PHP ImageMagick委托错误-找不到指定的文件

PHP ImageMagick委托错误-找不到指定的文件,php,imagemagick,Php,Imagemagick,我正在尝试使用PHP中的ImageMagick将PDF转换为图像。初始化构造函数会给我一个“委托错误,找不到指定的文件” 请注意,从命令行运行convert确实有效。它成功地将PDF的所有页面转换为每页的图像 我尝试过的事情: 卸载ImageMagick和Ghostscript,重新启动,安装Ghostscript(32),重新启动,安装ImageMagick,重新启动 将Ghostscript文件夹的路径添加到windows中的path变量并重新启动(当前在我检查时添加) 在正确配置Imag

我正在尝试使用PHP中的ImageMagick将PDF转换为图像。初始化构造函数会给我一个“委托错误,找不到指定的文件”

请注意,从命令行运行convert确实有效。它成功地将PDF的所有页面转换为每页的图像

我尝试过的事情:

  • 卸载ImageMagick和Ghostscript,重新启动,安装Ghostscript(32),重新启动,安装ImageMagick,重新启动

  • 将Ghostscript文件夹的路径添加到windows中的path变量并重新启动(当前在我检查时添加)

  • 在正确配置ImageMagick且没有错误的服务器上运行相同的PHP脚本-因此PHP脚本不应该成为问题

让我知道,如果有更多的信息,我应该提供。在过去的两个小时里,我一直在寻找解决方案,现在已经没有任何想法了

多谢各位

另外,我运行的是Windows10,XAMPP


ImageMagick中的delegates.xml

<?xml version="1.0"?>
<!DOCTYPE delegatemap [
<!ELEMENT delegatemap (delegate)+>
<!ELEMENT delegate (#PCDATA)>
<!ATTLIST delegate decode CDATA #IMPLIED>
<!ATTLIST delegate encode CDATA #IMPLIED>
<!ATTLIST delegate mode CDATA #IMPLIED>
<!ATTLIST delegate spawn CDATA #IMPLIED>
<!ATTLIST delegate stealth CDATA #IMPLIED>
<!ATTLIST delegate thread-support CDATA #IMPLIED>
<!ATTLIST delegate command CDATA #REQUIRED>
]>
<!--
  Delegate command file.

  Commands which specify

    decode="in_format" encode="out_format"

  specify the rules for converting from in_format to out_format These
  rules may be used to translate directly between formats.

  Commands which specify only

    decode="in_format"

  specify the rules for converting from in_format to some format that
  ImageMagick will automatically recognize. These rules are used to
  decode formats.

  Commands which specify only

   encode="out_format"

  specify the rules for an "encoder" which may accept any input format.

  For delegates other than ps:alpha, ps:color, ps:mono, and mpeg-encode the
  substitution rules are as follows:

    %i  input image filename
    %o  output image filename
    %u  unique temporary filename
    %#  input image signature
    %b  image file size
    %c  input image comment
    %g  image geometry
    %h  image rows (height)
    %k  input image number colors
    %l  image label
    %m  input image format
    %p  page number
    %q  input image depth
    %s  scene number
    %w  image columns (width)
    %x  input image x resolution
    %y  input image y resolution

-->
<delegatemap>
  <delegate decode="bpg" command="cmd.exe /c (&quot;bpgdec&quot; -b 16 -o &quot;%o.png&quot; &quot;%i&quot;) &amp; (move &quot;%o.png&quot; &quot;%o&quot; >nul)"/>
  <delegate decode="png" encode="bpg" command="&quot;bpgenc&quot; -b 12 -q %~ -o &quot;%o&quot; &quot;%i&quot;"/>
  <delegate decode="browse" stealth="True" spawn="True" command="cmd.exe /c start &quot;&quot; http://www.imagemagick.org/"/>
  <delegate decode="dng:decode" stealth="True" command="dcraw.exe -6 -W -O &quot;%u.ppm&quot; &quot;%i&quot;"/>
  <delegate decode="dot" command="dot -Tps &quot;%i&quot; -o &quot;%o&quot;"/>
  <delegate decode="dvi" command="dvips -q -o &quot;%o&quot; &quot;%i&quot;"/>
  <delegate decode="edit" stealth="True" command="notepad &quot;%o&quot;"/>
  <delegate decode="eps" encode="pdf" mode="bi" command="&quot;@PSDelegate@&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -sDEVICE=pdfwrite &quot;-sOutputFile=%o&quot; -- &quot;%i&quot;"/>
  <delegate decode="eps" encode="ps" mode="bi" command="&quot;@PSDelegate@&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -sDEVICE=ps2write &quot;-sOutputFile=%o&quot; -- &quot;%i&quot;"/>
  <delegate decode="hpg" command="hp2xx -q -m eps -f &quot;%o&quot; &quot;%i&quot;"/>
  <delegate decode="hpgl" command="hp2xx -q -m eps -f &quot;%o&quot; &quot;%i&quot;"/>
  <delegate decode="htm" command="html2ps -U -o &quot;%o&quot; &quot;%i&quot;"/>
  <delegate decode="html" command="html2ps -U -o &quot;%o&quot; &quot;%i&quot;"/>
  <delegate decode="jxr" command="cmd.exe /c (move &quot;%i&quot; &quot;%i.jxr&quot; >nul) &amp; (&quot;JXRDecApp.exe&quot; -i &quot;%i.jxr&quot; -o &quot;%o.pnm&quot;) &amp; (move &quot;%i.jxr&quot; &quot;%i&quot; >nul) &amp; (move &quot;%o.pnm&quot; &quot;%o&quot; >nul)"/>
  <delegate decode="mpeg:decode" command="&quot;ffmpeg.exe&quot; -nostdin -v -1 -i &quot;%i&quot; -vframes %S -vcodec pam -an -f rawvideo -y &quot;%u.pam&quot;"/>
  <delegate decode="pcl:cmyk" stealth="True" command="&quot;pcl6.exe&quot; -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pamcmyk32&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;%s&quot;"/>
  <delegate decode="pcl:color" stealth="True" command="&quot;pcl6.exe&quot; -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=ppmraw&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;%s&quot;"/>
  <delegate decode="pcl:mono" stealth="True" command="&quot;pcl6.exe&quot; -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pbmraw&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;%s&quot;"/>
  <delegate decode="pdf" encode="eps" mode="bi" command="&quot;@PSDelegate@&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -sDEVICE=eps2write -sPDFPassword=&quot;%a&quot; &quot;-sOutputFile=%o&quot; -- &quot;%i&quot;"/>
  <delegate decode="pdf" encode="ps" mode="bi" command="&quot;@PSDelegate@&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -sDEVICE=ps2write -sPDFPassword=&quot;%a&quot; &quot;-sOutputFile=%o&quot; -- &quot;%i&quot;"/>
  <delegate decode="pgp" command="pgpv -fq &quot;%i&quot;"/>
  <delegate decode="png" encode="launch" spawn="True" mode="encode" command="imdisplay &quot;%i&quot;" />
  <delegate decode="png" encode="show" spawn="True" mode="encode" command="imdisplay &quot;%i&quot;" />
  <delegate decode="png" encode="win" spawn="True" mode="encode" command="imdisplay &quot;%i&quot;" />
  <delegate decode="pnm" encode="ilbm" mode="encode" command="ppmtoilbm -24if &quot;%i&quot; &gt; &quot;%o&quot;"/>
  <delegate decode="pnm" encode="jxr" command="cmd.exe /c (move &quot;%i&quot; &quot;%i.pnm&quot; >nul) &amp; (&quot;JXREncApp.exe&quot; -i &quot;%i.pnm&quot; -o &quot;%o.jxr&quot;) &amp; (move &quot;%i.pnm&quot; &quot;%i&quot; >nul) &amp; (move &quot;%o.jxr&quot; &quot;%o&quot; >nul)"/>
  <delegate decode="pnm" encode="wdp" command="cmd.exe /c (move &quot;%i&quot; &quot;%i.pnm&quot; >nul) &amp; (&quot;JXREncApp.exe&quot; -i &quot;%i.pnm&quot; -o &quot;%o.jxr&quot;) &amp; (move &quot;%i.pnm&quot; &quot;%i&quot; >nul) &amp; (move &quot;%o.jxr&quot; &quot;%o&quot; >nul)"/>
  <delegate decode="ps:alpha" stealth="True" command="&quot;@PSDelegate@&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pngalpha&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;-f%s&quot; &quot;-f%s&quot;"/>
  <delegate decode="ps:cmyk" stealth="True" command="&quot;@PSDelegate@&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pamcmyk32&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;-f%s&quot; &quot;-f%s&quot;"/>
  <delegate decode="ps:color" stealth="True" command="&quot;@PSDelegate@&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pnmraw&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;-f%s&quot; &quot;-f%s&quot;"/>
  <delegate decode="ps" encode="eps" mode="bi" command="&quot;@PSDelegate@&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -sDEVICE=eps2write &quot;-sOutputFile=%o&quot; -- &quot;%i&quot;"/>
  <delegate decode="ps" encode="pdf" mode="bi" command="&quot;@PSDelegate@&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -sDEVICE=pdfwrite &quot;-sOutputFile=%o&quot; -- &quot;%i&quot;"/>
  <delegate decode="ps:mono" stealth="True" command="&quot;@PSDelegate@&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pnmraw&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;-f%s&quot; &quot;-f%s&quot;"/>
  <delegate decode="shtml" command="html2ps -U -o &quot;%o&quot; &quot;%i&quot;"/>
  <delegate decode="svg" command="&quot;rsvg-convert&quot; -o &quot;%o&quot; &quot;%i&quot;"/>
  <!-- Remove the extra space in - -export in the line below when you want to use inkscape -->
  <!--<delegate decode="svg:decode" stealth="True" command="&quot;inkscape&quot; &quot;%s&quot; - -export-eps=&quot;%s&quot; - -export-dpi=&quot;%s&quot; - -export-background=&quot;%s&quot; - -export-background-opacity=&quot;%s&quot; &gt; &quot;%s&quot; 2&gt;&amp;1"/>-->
  <delegate decode="wdp" command="cmd.exe /c (move &quot;%i&quot; &quot;%i.jxr&quot; >nul) &amp; (&quot;JXRDecApp.exe&quot; -i &quot;%i.jxr&quot; -o &quot;%o.pnm&quot;) &amp; (move &quot;%i.jxr&quot; &quot;%i&quot; >nul) &amp; (move &quot;%o.pnm&quot; &quot;%o&quot; >nul)"/>
  <delegate decode="xps:cmyk" stealth="True" command="&quot;gxps.exe&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pamcmyk32&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;%s&quot;"/>
  <delegate decode="xps:color" stealth="True" command="&quot;gxps.exe&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pnmraw&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;%s&quot;"/>
  <delegate decode="xps:mono" stealth="True" command="&quot;gxps.exe&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=pbmraw&quot; -dTextAlphaBits=%u -dGraphicsAlphaBits=%u &quot;-r%s&quot; %s &quot;-sOutputFile=%s&quot; &quot;%s&quot;"/>
  <delegate encode="mpeg:encode" stealth="True" command="&quot;ffmpeg.exe&quot; -nostdin -v -1 -i &quot;%M%%d.jpg&quot; &quot;%u.%m&quot;"/>
</delegatemap>

我认为PHP根本不使用系统路径变量。我认为您需要找到ImageMagick
delegates.xml文件,查找包含
pdf
gs
(ghostscript)的行,并将完整路径放在
gs
二进制文件所在的位置。运行
php-m
;它是否显示模块已加载?能够从CLI使用
convert
与此无关。还提供一个最小的PHP脚本,它将为您重现问题。@miken32是的,它确实显示模块已加载。PHP脚本只是一个构造函数,抛出一个异常并显示错误消息:
try{$imagick=new imagick($pdf_path);}catch(exception$ex){var_dump($ex);exit;}
@MarkSetchell实际上,查看
delegates.xml
时,我根本找不到包含
gs
的行。有些文件包含
pdf
,但不包含
gs
。现在我将添加我在原始问题中看到的代码。谢谢。是否将
PSDelegate
设置在其中的某个位置?我认为PHP根本不使用系统路径变量。我认为您需要找到ImageMagick
delegates.xml文件,查找包含
pdf
gs
(ghostscript)的行,并将完整路径放在
gs
二进制文件所在的位置。运行
php-m
;它是否显示模块已加载?能够从CLI使用
convert
与此无关。还提供一个最小的PHP脚本,它将为您重现问题。@miken32是的,它确实显示模块已加载。PHP脚本只是一个构造函数,抛出一个异常并显示错误消息:
try{$imagick=new imagick($pdf_path);}catch(exception$ex){var_dump($ex);exit;}
@MarkSetchell实际上,查看
delegates.xml
时,我根本找不到包含
gs
的行。有些文件包含
pdf
,但不包含
gs
。现在我将添加我在原始问题中看到的代码。谢谢。
PSDelegate
是否设置在那里?
object(ImagickException)#805 (7) {
  ["message":protected]=>
  string(95) "PDFDelegateFailed `The system cannot find the file specified.
' @ error/pdf.c/ReadPDFImage/801"
  ["string":"Exception":private]=>
  string(0) ""
  ["code":protected]=>
  int(415)
  ["file":protected]=>
  string(70) "D:\xampp\htdocs\pdfshare\wp-content\plugins\pdfshare\lib\class.pdf.php"
  ["line":protected]=>
  int(57)
  ["trace":"Exception":private]=>
  array(6) {
    [0]=>
    array(6) {
      ["file"]=>
      string(70) "D:\xampp\htdocs\pdfshare\wp-content\plugins\pdfshare\lib\class.pdf.php"
      ["line"]=>
      int(57)
      ["function"]=>
      string(11) "__construct"
      ["class"]=>
      string(7) "Imagick"
      ["type"]=>
      string(2) "->"
      ["args"]=>
      array(1) {
        [0]=>
        string(62) "D:\xampp\htdocs\pdfshare\wp-content\uploads\2019\05\2А-74.pdf"
      }
    }
    [1]=>
    array(6) {
      ["file"]=>
      string(65) "D:\xampp\htdocs\pdfshare\wp-content\plugins\pdfshare\inc\ajax.php"
      ["line"]=>
      int(94)
      ["function"]=>
      string(15) "generate_images"
      ["class"]=>
      string(12) "PDFShare_PDF"
      ["type"]=>
      string(2) "->"
      ["args"]=>
      array(0) {
      }
    }
    [2]=>
    array(4) {
      ["file"]=>
      string(54) "D:\xampp\htdocs\pdfshare\wp-includes\class-wp-hook.php"
      ["line"]=>
      int(286)
      ["function"]=>
      string(30) "PDFShare\AJAX\upload_pdf_entry"
      ["args"]=>
      array(1) {
        [0]=>
        string(0) ""
      }
    }
    [3]=>
    array(6) {
      ["file"]=>
      string(54) "D:\xampp\htdocs\pdfshare\wp-includes\class-wp-hook.php"
      ["line"]=>
      int(310)
      ["function"]=>
      string(13) "apply_filters"
      ["class"]=>
      string(7) "WP_Hook"
      ["type"]=>
      string(2) "->"
      ["args"]=>
      array(2) {
        [0]=>
        string(0) ""
        [1]=>
        array(1) {
          [0]=>
          string(0) ""
        }
      }
    }
    [4]=>
    array(6) {
      ["file"]=>
      string(47) "D:\xampp\htdocs\pdfshare\wp-includes\plugin.php"
      ["line"]=>
      int(465)
      ["function"]=>
      string(9) "do_action"
      ["class"]=>
      string(7) "WP_Hook"
      ["type"]=>
      string(2) "->"
      ["args"]=>
      array(1) {
        [0]=>
        array(1) {
          [0]=>
          string(0) ""
        }
      }
    }
    [5]=>
    array(4) {
      ["file"]=>
      string(48) "D:\xampp\htdocs\pdfshare\wp-admin\admin-ajax.php"
      ["line"]=>
      int(167)
      ["function"]=>
      string(9) "do_action"
      ["args"]=>
      array(1) {
        [0]=>
        string(33) "wp_ajax_pdfshare_upload_pdf_entry"
      }
    }
  }
  ["previous":"Exception":private]=>
  NULL
}