質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

imagick

IMagickは、PHPからImageMagickを使う場合に使用する拡張インターフェースです。PHPで簡単にImageMagickの機能が利用できます。

解決済

【AWS-S3×ImageMagick(imagick)】アップロードされたPDFをPDFとして保存し、1ページ目をサムネイル(jpeg)として保存したい

CyberMergina
CyberMergina

総合スコア295

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

imagick

IMagickは、PHPからImageMagickを使う場合に使用する拡張インターフェースです。PHPで簡単にImageMagickの機能が利用できます。

2回答

0評価

0クリップ

4126閲覧

投稿2016/12/12 09:49

編集2016/12/13 02:59

###前提・実現したいこと
CentOS6.7の環境にCakePHPで管理画面を作っており、
資料を管理する画面を作成しております。

HTMLのFileタグにセットされたものをController側で取得、
そのままPDFの1ページ目をJPEG変換しS3に保存したいのですが
詳細なエラーメッセージも出ずに困っております。。。
※ PDFをS3に保存することは出来ております。

S3への保存はAWS SDK for PHPを使っており
画像の変換にはImageMagick,imagick,jpegsrc.v8c等をインストールしております。

###発生している問題・エラーメッセージ

ImagickException Object ( [message:protected] => not authorized `https://s3-ap-northeast-1.amazonaws.com/xxxx.xxxx.jp/xxxx/thumb_xxxxxxxxxxxxxxx.jpg' @ error/constitute.c/WriteImage/1060 ...

###該当のソースコード

DocumentController.php

php

private function _createThumnail($fileName){ $thumbname = "thumb_".pathinfo($fileName, PATHINFO_FILENAME).".jpg"; //サムネイルのファイル名 /* 画像の読み込み */ $thumbImg = new Imagick(); /* サムネイルの作成 */ $thumbImg->readImage(AWS_S3_HOSTNAME.AWS_S3_BUCKET."/xxxx/".$fileName); $ret = $this->Amazon->putObject($thumbname, $thumbImg); $thumbImg->thumbnailImage(100, 0); $thumbImg->setImageFormat ("jpeg"); try { $thumbImg->writeImage(AWS_S3_HOSTNAME.AWS_S3_BUCKET."/xxxx/".$thumbname); } catch (Exception $e) { pr($e); // ここにきてます } exit(); $thumbImg->clear(); return $thumbname; }

AmazonComponent.php

php

function putObject($key, $file){ try { $credentials = new Credentials(AWS_S3_KEY, AWS_S3_SECURITY); $aws = S3Client::factory([ 'version' => AWS_S3_VERSION, 'credentials' => $credentials, 'region' => AWS_S3_REGION, ]); $result = $aws->putObject([ 'Bucket' => AWS_S3_BUCKET, 'Key' => $key, 'SourceFile' => $file, 'StorageClass' => AWS_S3_STORAGE, ]); return $result['ObjectURL']; } catch (Exception $e) { return ""; } }

###試したこと

error/constitute.c/WriteImage/1060 でググってみると、幾つかページを見つけましたが、
未だ回答には至っておりません。
(ここでjpegsrcをインストールしました)

  • CLI上でPDF->PNGへの置換には成功しております
  • システム上でPDF->PNGへの置換、アップは出来ておりません
  • こちらのように、表示させるだけなら成功しました。

(ファイルとしての保存が出来ていない?)

  • try...catch を入れないと下記のようなエラーが出ます
Fatal error: Uncaught exception 'FatalErrorException' with message ' in /var/www/xxxx/xxxx_site/lib/Cake/Error/ErrorHandler.php on line 138 ( ! ) FatalErrorException: [CakeException] Unknown status code #0 /var/www/xxxx/xxxx_site/lib/Cake/Error/ExceptionRenderer.php(225): CakeResponse->statusCode(499) #1 [internal function]: ExceptionRenderer->error400(Object(ImagickException)) #2 /var/www/xxxx/xxxx_site/lib/Cake/Error/ExceptionRenderer.php(187): call_user_func_array(Array, Array) #3 /var/www/xxxx/xxxx_site/lib/Cake/Error/ErrorHandler.php(127): ExceptionRenderer->render() #4 [internal function]: ErrorHandler::handleException(Object(ImagickException)) #5 {main} in /var/www/xxxx/xxxx_site/lib/Cake/Error/ErrorHandler.php on line 138 Call Stack # Time Memory Function Location 1 3.1805 4366368 ErrorHandler::handleException( ) .../ErrorHandler.php:0 2 3.2308 4473304 trigger_error ( ) .../ErrorHandler.php:138 3 3.2308 4475704 ErrorHandler::handleError( ) .../ErrorHandler.php:138 4 3.2309 4476408 ErrorHandler::handleFatalError( ) .../ErrorHandler.php:213

###補足情報(言語/FW/ツール等のバージョンなど)

CentOS6.7
CakePHP2系
S3
ImageMagick(imagick)

以上です。
足りない情報等あれば、随時追記させて頂きますので
ご教授の程よろしくお願い致します。

###追記1

putObjectでアップするように、ソースコードを下記の通り変更してみました。

php

private function _createThumnail($fileName){ $thumbname = "thumb_".pathinfo($fileName, PATHINFO_FILENAME).".jpg"; //サムネイルのファイル名 /* 画像の読み込み */ $thumbImg = new Imagick(); /* サムネイルの作成 */ $thumbImg->readImage(AWS_S3_HOSTNAME.AWS_S3_BUCKET."/xxxx/".$fileName); $thumbImg->thumbnailImage(100, 0); $thumbImg->setImageFormat ("jpeg"); try { $ret = $this->Amazon->putObject("xxxx/".$thumbname, $thumbImg->getImageBlob()); } catch (Exception $e) { } $thumbImg->clear(); return $ret; }

ハッシュの形式が違う?とかでファイルが開けないと怒られました・・・。

php

A sha256 checksum could not be calculated for the provided upload body, because it was not seekable. To prevent this error you can either 1) include the ContentMD5 or ContentSHA256 parameters with your request, 2) use a seekable stream for the body, or 3) wrap the non-seekable stream in a GuzzleHttp\Psr7\CachingStream object. You should be careful though and remember that the CachingStream utilizes PHP temp streams. This means that the stream will be temporarily stored on the local disk.

一旦ファイルを生成してからアップする方が良いみたいですかね・・・

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

popobot

2016/12/12 22:51 編集

切り分けとして、writeImageでローカルに書き込むことはできるのでしょうか。 そもそもwriteImageで直接パスを渡しているように見えますが、putObjectとかじゃないとアップできないということはないですかね...(s3cmdぐらいしか使ったことないので参考程度に)

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

imagick

IMagickは、PHPからImageMagickを使う場合に使用する拡張インターフェースです。PHPで簡単にImageMagickの機能が利用できます。