Примечание: использование undefined константы STDOUT - предполагается 'STDOUT'

Я пытаюсь настроить Amazon Aws Php SDK в Xampp.

После установки 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

Последние 3 предупреждения происходят из-за первого уведомления, потому что вместо ресурса передается строка 'STDOUT'.

В чем причина первого уведомления? Сегмент кода для этого уведомления

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

Ответ 1

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'));

Ответ 2

Вы должны добавить в свой собственный код что-то вроде:

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

Информация о перенесенных файлах будет записана в файл "log.txt".