2013-07-21 70 views
10

Tôi đang cố thiết lập Amazon Aws Php SDK trong Xampp.Lưu ý: Sử dụng hằng số không xác định STDOUT - giả định 'STDOUT'

Sau khi cài đặt SDK, tôi đang cố tải xuống một thùng từ Amazon S3, sử dụng mã sau đây.

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

Bây giờ khi thực hiện php này từ trình duyệt của mình, tôi nhận được lỗi sau.

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 cảnh báo cuối cùng xảy ra do Thông báo đầu tiên, vì thay vì tài nguyên, chuỗi 'STDOUT' được chuyển.

Lý do cho thông báo đầu tiên là gì? Đoạn mã cho thông báo này là

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

là một phần của SDK. Và thủ phạm cho mã cảnh báo fwrite là hàm addDebugListener

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

phiên bản PHP của tôi là 5.4.16

+0

bạn có thể cần phải xác định STDOUT nếu nó không được định nghĩa, whats trong dòng 124 – DevZer0

+0

Tôi nghĩ rằng có một số tập tin bootstrap khác mà không được bao gồm mà nên .. một trong đó đã 'define ("STDOUT", "php: // output"); ' – Orangepill

+0

@ DevZer0 Một cuộc gọi fwrite. Đã cập nhật câu hỏi. – SatheeshJM

Trả lời

-1

Bạn nên thêm, trong mã của riêng bạn, một cái gì đó như:

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

Thông tin về các tệp được chuyển sẽ được ghi vào tệp 'log.txt'.

10
if(!defined('STDIN')) define('STDIN', fopen('php://stdin', 'r')); 
if(!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'w')); 
if(!defined('STDERR')) define('STDERR', fopen('php://stderr', 'w')); 
+2

Bạn có thể vui lòng cải thiện câu trả lời này bằng cách giải thích những gì mã không? –

+1

Xem: http://php.net/manual/en/features.commandline.io-streams.php Giao diện CLI của PHP xác định 'STDIN',' STDOUT' và 'STDERR', là các hằng số tham chiếu đến tệp các thẻ điều khiển có khả năng đọc từ ('STDIN') hoặc ghi vào luồng I/O chuẩn (' STDOUT', 'STDERR'). Bởi vì chúng chỉ được xác định bởi giao diện CLI, bạn không thể sử dụng chúng trong ứng dụng web trừ khi bạn tự xác định chúng. Ba dòng trên chỉ làm điều đó, nhưng chỉ khi chúng không chỉ được xác định, làm cho nó an toàn. Trong thực tế, một ứng dụng web có thể không cần phải truy cập chúng thường xuyên, đủ để làm cho chúng trở thành hằng số. Cảnh báo – Mark

+0

, trong ngữ cảnh FPM, STDIN là php: // input, không phải php: // stdin, và STDOUT là php: // output, không phải php: // stdout (nhưng tôi nghĩ STDERR vẫn là php: // stderr) – hanshenrik