2013-07-21 18 views
10

Próbuję skonfigurować zestaw SDK Amazon Aws Php w Xampp.Uwaga: Wykorzystanie niezdefiniowanej stałej STDOUT - przyjęto "STDOUT"

Po zainstalowaniu pakietu SDK próbuję pobrać wiadro z serwisu Amazon S3, korzystając z następującego kodu.

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

Teraz po uruchomieniu tego php z przeglądarki, pojawia się następujący błąd.

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 

Ostatnie 3 ostrzeżenia pojawiają się z powodu pierwszego powiadomienia, ponieważ zamiast zasobu przekazywany jest ciąg "STDOUT".

Jaki jest powód pierwszego powiadomienia? Segment kodu tego ogłoszenia jest

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

który jest częścią pakietu SDK. A winowajcą kodu ostrzegawczego fwrite jest funkcja addDebugListener

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

Moja wersja PHP 5.4.16

+0

może trzeba zdefiniować STDOUT jeśli jej nie zdefiniowano, co jest zgodne 124 – DevZer0

+0

myślę, że jest jakiś inny plik bootstrap, który nie jest zawarte, że powinien być jeden, który .. 'define („STDOUT” "php: // output"); ' – Orangepill

+0

@ DevZer0 Połączenie fwrite. Mam zaktualizowane pytanie. – SatheeshJM

Odpowiedz

-1

Należy dodać w swoim własnym kodzie, coś takiego:

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

Informacje o przeniesionych plikach będą rejestrowane w pliku "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

Czy możesz poprawić odpowiedź, wyjaśniając, co robi kod? –

+1

Zobacz: http://php.net/manual/en/features.commandline.io-streams.php Interfejs CLI PHP definiuje 'STDIN',' STDOUT' i 'STDERR', które są stałymi, które odnoszą się do pliku uchwyty zdolne do odczytu z (STDIN') lub zapisu do (STDOUT', 'STDERR') standardowych strumieni We/Wy. Ponieważ są one zdefiniowane tylko przez interfejs CLI, nie można ich używać w aplikacji internetowej, chyba że użytkownik sam je zdefiniuje. Trzy powyższe linie właśnie to robią, ale tylko wtedy, gdy nie są zdefiniowane, dzięki czemu są bezpieczne. W rzeczywistości aplikacja internetowa prawdopodobnie nie musi mieć do nich dostępu na tyle często, aby stała się stała. – Mark

+0

ostrzeżenie, w kontekście FPM, STDIN to php: // input, a nie php: // stdin, a STDOUT to php: // output, a nie php: // stdout (ale myślę, że STDERR to nadal php: // stderr) – hanshenrik