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

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

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

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

AWS(Amazon Web Services)

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

Q&A

解決済

1回答

850閲覧

Fuelphpで Error - Class 'EntityBody' not foundというエラー

lilac001

総合スコア23

PHP

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

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2018/07/04 04:49

前提・実現したいこと

PHPにてAWS S3にファイルをアップロードする仕組みが動作していましたが、
php composer.phar update した後から
Error - Class 'EntityBody' not found
というエラーでアップロードできなくなりました。

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

composer.phar updateのログの一部です。

  • Removing guzzlehttp/streams (2.1.0)
  • Removing guzzle/guzzle (v3.9.3)
  • Installing guzzlehttp/psr7 (1.4.2)
    Loading from cache
  • Installing guzzlehttp/promises (v1.3.1)
    Loading from cache
  • Removing guzzlehttp/guzzle (4.2.4)
  • Installing guzzlehttp/guzzle (6.3.3)
    Loading from cache
  • Removing aws/aws-sdk-php (2.8.31)
  • Installing aws/aws-sdk-php (3.62.8)

Writing lock file

Error - Class 'EntityBody' not found

該当のソースコード

PHP

1 use Guzzle\Http\EntityBody; 23 $s3->putObject(array( 4 'Bucket' => 'バケット名', 5 'Key' => 'ファイル名', 6 'Body' => EntityBody::factory(fopen($tmpFile, 'r')) 7 )); 8

試したこと

guzzleの新しいバージョンからguzzleではなくguzzlehttpと変更されているようですが、
use Guzzlehttp\EntityBody;
としてもだめでした。

guzzleのアップデートもしくはaws-sdkが2から3への変更どちらかの問題かと思います。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

AWS SDK for PHP 3.X のリファレンスを見ると、PutObjectの引数のarrayのBodyは<string || resource || Psr\Http\Message\StreamInterface>のいずれかの型が対応するとされています。
AWS SDK for PHP 3.X PutObject

fopen()はPHPの標準ライブラリのfunctionで、返却値はresourceとなりますので、これでもEntityBodyは使わずにfopen()の返却値をそのままBodyに設定して動くのではないでしょうか。
当方環境がないため動作確認は行っていません。悪しからず。

ついでに、EntityBodyはguzzleのライブラリから無くなっているように見受けられました。guzzleのバージョンをダウングレードすれば、今のコードのまま動作するかもしれません。
余裕があればこちらも試してみたは如何でしょうか。

投稿2018/07/04 07:10

SE-studying-now

総合スコア351

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lilac001

2018/07/04 16:29

ありがとうございます! おっしゃるとおりAWS SDK for PHP 3からはfopenの戻り値で動きました。 また、ダウングレードでも動きました。 的確なご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問