23

Xampp で Amazon Aws Php SDK をセットアップしようとしています。

SDK をインストールした後、次のコードを使用して Amazon S3 からバケットをダウンロードしようとしています。

<?php

error_reporting(-1);
ini_set('display_errors', 'on');

include_once ('aws/aws-autoloader.php');
use Aws\S3\S3Client;

$client = S3Client::factory(array(
     'key'    => '__my__key__',
     'secret' => '__secret__key__'
));

$destination = 'downloaded_bucket';
$source_bucket = '__my__bucket__name';
$key_prefix = '';
$options = array('debug'=>true);

$client -> downloadBucket($destination,$source_bucket,$key_prefix,$options);
?>

ブラウザからこのphpを実行すると、次のエラーが発生します。

Notice: Use of undefined constant STDOUT - assumed 'STDOUT' in __my__path\Aws\S3\Sync\AbstractSyncBuilder.php on line 294
STDOUT
Warning: fwrite() expects parameter 1 to be resource, string given in __my__path\Aws\S3\Sync\DownloadSyncBuilder.php on line 124
STDOUT
Warning: fwrite() expects parameter 1 to be resource, string given in __my__path\Aws\S3\Sync\DownloadSyncBuilder.php on line 124
STDOUT
Warning: fwrite() expects parameter 1 to be resource, string given in __my__path\Aws\S3\Sync\DownloadSyncBuilder.php on line 124

リソースの代わりに文字列 'STDOUT' が渡されるため、最初の通知が原因で最後の 3 つの警告が発生します。

最初の通知の理由は何ですか?この通知のコード セグメントは次のとおりです。

if ($this->debug) {
            $this->addDebugListener($sync, is_bool($this->debug) ? STDOUT : $this->debug);
        }

これは SDK の一部です。そして、fwrite 警告コードの犯人は addDebugListener 関数です

protected function addDebugListener(AbstractSync $sync, $resource)
    {
       //blah blah
       fwrite($resource, "Downloading {$from} -> {$to}\n");
       //blah blah
    }

私のPHPバージョンは5.4.16です

4

2 に答える 2

38

この場合の問題は、定数STDOUTが定義されていないことです。コマンドラインを使用するときに利用できる定数なので、他の設定で使用するには、次のようにします。

if(!defined('STDIN'))  define('STDIN',  fopen('php://stdin',  'rb'));
if(!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'wb'));
if(!defined('STDERR')) define('STDERR', fopen('php://stderr', 'wb'));

これにより、定数が定義されているかどうかがチェックされ、定義されていない場合は、期待される動作に従って定義されます。

定数の詳細については、PHP ドキュメント を参照してください

于 2015-03-06T11:49:13.133 に答える
-4

独自のコードに次のようなものを追加する必要があります。

define("STDOUT", fopen('log.txt', 'w'));

転送されたファイルに関する情報は、ファイル「log.txt」に記録されます。

于 2015-02-24T17:49:30.647 に答える