web-dev-qa-db-ja.com

Imagickは「ファイルの読み取りに失敗しました」例外でPDFファイルを開きません

PhpスクリプトからPDFファイルを開こうとすると、エラーが発生します。

Uncaught ImagickException: Failed to read the file in ...

私はOSX、Brew、PHP 7.0、php70-imagick --HEAD、ImageMagick --with-ghostscript、GhostScriptを実行しています

コマンドラインテストは正常に機能します。

convert 1.pdf 1.jpg

ファイルのアクセス許可は問題ありません。 URLとrealpath関数を使用したローカルファイルの両方を試してください。ファイルパスも問題ありません。 jpegを開くと、スクリプトは正常に機能します。

phpinfo() -> ImageMagick supported formats: EPDF, PDF, PDFA, etc.

更新:解決しました。以下の解決策。

8
oleg

この問題は、ghostscriptへのパスにありました。 「/ usr/local/bin」にありますが、このパスはApacheでは使用できません。 (phpinfo-> Apache環境-> PATH)

解決策は、ファイルを別のパスにシンボリックリンクすることです。

 Sudo ln -s /usr/local/bin/gs /usr/bin/gs

OS X El Capitan Note! OS X 10.11+の/ usr/bin /は保護されています。次の手順に従う必要があります。

1. Reboot to Recovery Mode. Reboot and hold "Cmd + R" after start sound.
2. In Recovery Mode go to Utilities -> Terminal.
3. Run: csrutil disable
4. Reboot in Normal Mode.
5. Do the "Sudo ln -s /usr/local/bin/gs /usr/bin/gs" in terminal.
6. Do the 1 and 2 step. In terminal enable back csrutil by run: csrutil enable
17
oleg

シンボリックリンクを必要としない(したがってSIPを無効にする必要がない)OSXでApacheパス変数を更新するためのより良い方法は次のとおりです。

https://www.euperia.com/development/solved-php-imagick-unable-to-open-image-pdf

2
Matt Sims