注意:使用未定义的常量STDOUT - 假设为'STDOUT'

Sat*_*hJM 20 php xampp stdout amazon-s3 amazon-web-services

我正在尝试在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);
?>
Run Code Online (Sandbox Code Playgroud)

现在从我的浏览器执行此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
Run Code Online (Sandbox Code Playgroud)

最后3个警告是由于第一个通知而发生的,因为不是资源,而是传递字符串'STDOUT'.

第一次通知的原因是什么?此通知的代码段是

if ($this->debug) {
            $this->addDebugListener($sync, is_bool($this->debug) ? STDOUT : $this->debug);
        }
Run Code Online (Sandbox Code Playgroud)

这是SDK的一部分.而fwrite警告代码的罪魁祸首是addDebugListener函数

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

我的PHP版本是5.4.16

Ron*_*rer 25

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'));
Run Code Online (Sandbox Code Playgroud)

  • 请参阅:http://php.net/manual/zh-cn/features.commandline.io-streams.php PHP的CLI接口定义了“ STDIN”,“ STDOUT”和“ STDERR”,它们是引用具有以下功能的文件句柄的常量:从(STDIN)读取或向(STDOUT,STDERR)标准I / O流写入。由于这些仅由CLI界面定义,因此除非您自己定义它们,否则不能在Web应用程序中使用它们。上面的三行代码可以做到这一点,但前提是不仅要对其进行定义,而且要使其安全。实际上,Web应用程序可能不需要足够频繁地访问它们以使其成为常数。 (4认同)
  • 你可以通过解释代码的作用来改进这个答案吗? (2认同)

小智 -5

您应该在自己的代码中添加类似以下内容的内容:

define("STDOUT", fopen('log.txt', 'w'));
Run Code Online (Sandbox Code Playgroud)

有关传输文件的信息将记录到文件“log.txt”中。