【问题标题】:PHP ImagickException: not authorizedPHP ImagickException:未授权
【发布时间】:2016-10-02 15:43:36
【问题描述】:

任何想法如何解决这个问题?

 ImagickException: not authorized `/tmp/magick-1552lvf2nIjaqx1W' @ error/constitute.c/ReadImage/412 

我认为这是一个权限问题,所以只是为了测试它,我将我的 /tmp 目录设置为 777。没有变化。这让我疯狂。

命令:

<?php


$image = new \Imagick();
$image->readImageBlob('<?xml version="1.0" encoding="UTF-8" standalone="no"?>' . $graph);

【问题讨论】:

  • 告诉我们是什么命令导致了这个怎么样?
  • 粘贴您的命令可能会提供一些见解 - 您是否能够让 Imagick 工作?根据您的服务器,CHMOD 可能是 755
  • 您是否尝试过设置环境变量MAGICK_TMPDIR并将其导出到您的脚本/CGI/程序可以编写的其他地方?
  • 可能是您的 policy.xml 在 &lt;policymap&gt; 中包含 [意外?] 包含该文件类型作为匹配模式的内容。
  • 我尝试了 775 并更改了位置:仍然有问题。

标签: php ubuntu imagemagick


【解决方案1】:

我已按照以下步骤修复致命错误:

Uncaught ImagickException: not authorized `../../c02_001.pdf'
@ error/constitute.c/ReadImage/412 

  1. sudo vi policy.xml from etc/Imagemagick-6/
  2. 评论下面一行

    <!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
    
  3. 改写下面一行

    <policy domain="coder" rights="none" pattern="PDF" />
    

    <policy domain="coder" rights="read|write" pattern="PDF" />
    
  4. sudo apt-get install inkscape

  5. 使用以下命令重新启动 apache sudo restart apache2

【讨论】:

  • 这对我有用。
  • 如果您使用的是 php-fpm,请使用 sudo service php7.2-fpm restart(或您的 PHP 版本)而不是重新启动 apache。
  • thnx,你拯救了我的一天
  • 谢谢。我确实使用 vim 进行此更改。显然不是纳米! #realCoder
  • 为什么是步骤 4 sudo apt-get install inkscape?没有它一切正常。谢谢,你也拯救了我的一天!
【解决方案2】:

您的政策“MVG”可能是原因。随便评论

<policy domain="coder" rights="none" pattern="MVG" />

/etc/ImageMagick/policy.xml 中并重新启动 Apache 服务器。

【讨论】:

  • 感谢您的回答!我用 brew 安装东西。我的 /ImageMagick/policy.xml 等位于 usr/local/ 中 - 就像其他人最终使用我的设置一样
  • 您可以运行locate policy.xm 来查找文件,以防位置不同。然后进行替换:sudo sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml,也请参见下面的stackoverflow.com/a/52677573/367456
  • 那么 NGINX 呢?
  • @kspr - 对于 nginx,您将重新启动 php-fpm - 使用 apache,php 运行时作为模块加载,对于 nginx(和其他 Web 服务器),它是单独的 fastcgi 版本的 php
【解决方案3】:

我希望这个解决方案能帮助你 我面临着同样的问题,我在实时服务器上,我试图按照Mikel Annjuk and hakre 的回答,所以我无法更改文件 /etc/ImageMagick/policy.xml 所以我联系服务器提供商进行编辑文件并发送此网址以执行步骤,但有人回答我

" 我仍在努力。上面链接中给出的解决方案需要对服务器的 root 访问权限,这在共享服务器中是不可能的。但是 imagick 与 php 有关。所以让我尝试更改 php 版本,看看是否帮助”

当我厌倦了解决这个问题时,我想可能是我保存文件的文件路径的问题,所以我改为base path to FCPATH,问题就解决了。 我正在使用 Codeigniter base_url() 到 php FCPATH 这是解决这个问题的关键

但在 svg 转换器上显示“无解码委托”问题

在文件或代码的开头添加以下行

喜欢这个

$usmap = file_get_contents(base_url('convert/plus.svg')); 
     $find_string   = '<svg';
$position = strpos($usmap, $find_string);

   $svg_file_new ='<?xml version="1.0" encoding="UTF-8" standalone="no"?>'.substr($usmap, $position).'</svg>';
       file_put_contents(FCPATH.'convert/plus.svg', $svg_file_new);

        $usmap = base_url('convert/plus.svg'); 
$im = new Imagick($usmap);  
$im->setImageFormat("jpg"); 

$im->writeImage(FCPATH .'convert/plus.jpg');
$im->clear();
$im->destroy();

上面的代码首先,从文件中获取SVG代码并添加XML版本代码然后将其放入文件中,然后将SVG转换为jpg等任何类型的图像

对不起我的英语

【讨论】:

  • 我不确定 XML/SVG 文件是否应该被读取为 blob。尝试以普通图像读取。
  • 只是简单的代码 $pdfPath = base_url('convert/ResumeAnusShahbaz0.jpeg'); $im = new imagick($pdfPath); $im->setImageFormat('pdf'); $im->writeImage(FCPATH .'convert/ResumeAnusShahbaz0.pdf'); $im->clear(); $im->destroy();
  • 它适用于多种图像格式,但我发现一个问题 svg 到其他 12 以上我已经检查了它的工作,我正在尝试转换另一种格式,以免有多少格式适用于此代码跨度>
  • 我有 svg 转换器的解决方案更新我的答案
【解决方案4】:

PHP 进程的“strace”显示如下:

sh: inkscape: 找不到命令

我通过以下方式解决了这个问题:

apt-get install inkscape

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2013-11-01
    • 2018-04-28
    • 2018-06-15
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多