Domande frequenti sull'AWS SDK for PHPVersione 3 - AWS SDK for PHP

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Domande frequenti sull'AWS SDK for PHPVersione 3

Quali metodi sono disponibili su un client?

L'AWS SDK for PHP utilizza descrizioni del servizio e metodi magic __call () dinamici per eseguire le operazioni API. Puoi trovare un elenco completo dei metodi disponibili per i client del servizio Web nella documentazione API del client.

Cosa devo fare in caso di errore cURL di un certificato SSL?

Questo problema può verificarsi se utilizzi un bundle CA obsoleto con cURL e SSL. Puoi risolvere il problema aggiornando il bundle CA sul server o scaricando una versione più aggiornata del bundle CA direttamente dal sito Web cURL.

Per impostazione predefinita, l'AWS SDK for PHP utilizzerà il bundle CA configurato al momento della compilazione di PHP. Puoi modificare il bundle CA predefinito utilizzato da PHP modificando l'impostazione di configurazione openssl.cafile del file PHP.ini impostandola sul percorso di un file CA sul disco.

Quali versioni dell'API sono disponibili per un client?

L'opzione version è obbligatoria durante la creazione di un client. Puoi trovare un elenco delle versioni dell'API disponibili nella pagina della documentazione API di ciascun client ::aws-php-class:<index.html>. Se non riesci a caricare una versione dell'API specifica, potrebbe essere necessario aggiornare la copia dell'AWS SDK for PHP.

Puoi specificare la stringa latest nel valore di configurazione "versione" per utilizzare la versione dell'API più recente disponibile che il provider dell'API del client è in grado di trovare (l'api_provider predefinito analizzerà la directory src/data dell'SDK per cercare i modelli di API).

avvertimento

Non è consigliabile utilizzare latest in un'applicazione di produzione, perché l'importazione di una nuova versione secondaria dell'SDK che include un aggiornamento dell'API potrebbe interrompere il funzionamento di tale applicazione di produzione.

Quali versioni della regione sono disponibili per un client?

L'opzione region è obbligatoria durante la creazione di un client e viene specificata tramite un valore di stringa. Per un elenco di disponibiliAWSConsulta la sezione Regioni ed endpointAWSRegioni ed endpointnellaAWSRiferimenti generali.

// Set the Region to the EU (Frankfurt) Region. $s3 = new Aws\S3\S3Client([ 'region' => 'eu-central-1', 'version' => '2006-03-01' ]);

Perché non riesco a caricare o scaricare i file di dimensioni superiori a 2 GB?

Dal momento che il tipo di numero intero di PHP è firmato e molte delle piattaforme utilizzano i numeri interi a 32 bit, l'AWS SDK for PHP non è in grado di gestire correttamente i file di dimensioni superiori a 2 GB su uno stack a 32 bit (dove lo "stack" include CPU, sistema operativo, server Web e sistema binario PHP). Si tratta di un problema noto di PHP. Nel caso di Microsoft Windows, soltanto le build di PHP 7 supportano i numeri interi a 64 bit.

La soluzione consigliata è utilizzare uno stack di Linux a 64 bit, come l'AMI Amazon Linux a 64 bit, con la versione più recente di PHP installata.

Per ulteriori informazioni, consultaDimensioni file PHP: Return values.

Come è possibile controllare i dati che vengono trasmessi in rete?

Utilizzando l'opzione debug in un costruttore di client, puoi ottenere le informazioni di debug, tra cui quelle relative ai dati trasmessi in rete. Se questa opzione è impostata su true, tutte le mutazioni del comando in esecuzione, la richiesta in fase di invio, la risposta in fase di ricezione e il risultato in fase di elaborazione vengono emessi in STDOUT. Sono inclusi i dati inviati e ricevuti in rete.

$s3Client = new Aws\S3\S3Client([ 'region' => 'us-standard', 'version' => '2006-03-01', 'debug' => true ]);

Come è possibile impostare delle intestazioni arbitrarie su una richiesta?

Puoi aggiungere intestazioni arbitrarie a un'operazione di servizio aggiungendo un middleware personalizzato all'Aws\HandlerList di una Aws\CommandInterface o Aws\ClientInterface. Gli esempi seguenti mostrano come aggiungere unX-Foo-Bazintestazione su uno specifico Amazon S3PutObjectoperazione utilizzando ilAws\Middleware::mapRequestmetodo helper.

Consulta mapRequest per ulteriori informazioni.

Come posso firmare una richiesta arbitraria?

Puoi firmare una classe arbitraria:aws-php: Richiesta PSR-7 <class-Psr.Http.Message.RequestInterface.html>usando la classe SDK:AWS-PHP: Classe Signature v4 <class-Aws.Signature.SignatureV4.html>.

Consulta .Firma delle richieste di dominio Amazon CloudSearch personalizzate conAWS SDK for PHPVersione 3per un esempio completo di come eseguire questa operazione.

Come posso modificare un comando prima di inviarlo?

Puoi modificare un comando prima di inviarlo aggiungendo un middleware personalizzato all'Aws\HandlerList di una Aws\CommandInterface o Aws\ClientInterface. L'esempio seguente mostra come aggiungere dei parametri di comando personalizzati a un comando prima dell'invio, essenzialmente tramite l'aggiunta delle opzioni predefinite. In questo esempio viene utilizzato il metodo helper Aws\Middleware::mapCommand.

Consulta mapCommand per ulteriori informazioni.

Che cos'è una CredentialsException?

Se visualizzi una Aws\Exception\CredentialsException durante l'uso dell'AWS SDK for PHP, vuol dire che l'SDK non dispone di credenziali e che non è stato in grado di trovarle nell'ambiente.

Se crei istanze di un client senza credenziali, la prima volta che effettui un'operazione di servizio, l'SDK tenterà di cercare le credenziali. In primo luogo, controlla in specifiche variabili di ambiente, quindi passa a cercare le credenziali del profilo, disponibili solo sulle istanze Amazon EC2 configurate. Se le credenziali non vengono specificate o trovate, viene generata una Aws\Exception\CredentialsException.

Se visualizzi questo errore e intendi utilizzare le credenziali del profilo dell'istanza, devi assicurarti che l'istanza Amazon EC2 su cui è in esecuzione l'SDK sia configurata con un ruolo IAM appropriato.

Se visualizzi questo errore e non intendi utilizzare le credenziali del profilo dell'istanza, devi assicurarti di specificare le credenziali corrette nell'SDK.

Per ulteriori informazioni, consultaCredenziali perAWS SDK for PHPVersione 3.

L'AWS SDK for PHP funziona su HHVM?

Al momento, non puoi eseguire l'AWS SDK for PHP su HHVM finché non verrà risolto il problema con la semantica di rendimento in HHVM.

Come posso disabilitare il protocollo SSL?

Puoi disabilitare il protocollo SSL impostando il parametro scheme in un metodo client factory su "http". È importante tenere presente che non tutti i servizi supportano l'accesso http. Consulta .AWSRegioni ed endpointnellaAWSRiferimenti generali per un elenco di regioni, endpoint e schemi supportati.

$client = new Aws\DynamoDb\DynamoDbClient([ 'version' => '2012-08-10', 'region' => 'us-west-2', 'scheme' => 'http' ]);
avvertimento

Dal momento che, rispetto al protocollo TCP, il protocollo SSL richiede la crittografia di tutti i dati e più pacchetti TCP per il completamento di un handshake connessione, la sua disabilitazione può comportare un leggero miglioramento delle prestazioni. Tuttavia, con il protocollo SSL disabilitato, tutti i dati vengono trasmessi in rete senza essere crittografati. Prima di disabilitare il protocollo SSL, valuta attentamente le implicazioni a livello di protezione e le probabilità di intercettazione sulla rete.

Cosa devo fare se visualizzo un "Errore di analisi"?

Il motore PHP genera degli errori di analisi quando incontra una sintassi che non è in grado di interpretare. Ciò si verifica quasi sempre quando tenti di eseguire il codice scritto per una versione diversa di PHP.

Se si verifica un errore di analisi, controlla il sistema e accertati che soddisfi l'SDKRequisiti e suggerimenti per l'AWS SDK for PHPVersione 3.

Perché il client Amazon S3 decomprime i file gzipped?

Per impostazione predefinita, alcuni gestori HTTP, incluso il gestore predefinito Guzzle 6 HTTP, decomprimono i corpi della di risposta compressi. Puoi sostituire questo comportamento impostando l'opzione HTTP decode_content su false. Per motivi di compatibilità con le versioni precedenti, questa impostazione predefinita non può essere modificata, ma ti consigliamo di disabilitare la decodifica dei contenuti al livello del client S3.

Consulta decode_content per un esempio di come disabilitare la decodifica automatica dei contenuti.

Come faccio a disabilitare la firma del corpo in Amazon S3?

Puoi disabilitare la firma del corpo impostando il parametro ContentSHA256 nell'oggetto comando su Aws\Signature\S3SignatureV4::UNSIGNED_PAYLOAD. Quindi, l'AWS SDK for PHP lo utilizzerà come intestazione "x-amz-content-sha-256" e checksum del corpo nella richiesta standard.

$s3Client = new Aws\S3\S3Client([ 'version' => '2006-03-01', 'region' => 'us-standard' ]); $params = [ 'Bucket' => 'foo', 'Key' => 'baz', 'ContentSHA256' => Aws\Signature\S3SignatureV4::UNSIGNED_PAYLOAD ]; // Using operation methods creates command implicitly $result = $s3Client->putObject($params); // Using commands explicitly. $command = $s3Client->getCommand('PutObject', $params); $result = $s3Client->execute($command);

Come viene gestito lo schema dei nuovi tentativi nell'AWS SDK for PHP?

L'AWS SDK for PHP dispone di un RetryMiddleware che gestisce il comportamento relativo ai nuovi tentativi. In termini dei codici di stato HTTP 5xx relativi agli errori del server, l'SDK ritenta su 500, 502, 503 e 504.

Con i nuovi tentativi vengono gestite anche le eccezioni di throttling, incluse RequestLimitExceeded, Throttling, ProvisionedThroughputExceededException, ThrottlingException, RequestThrottled e BandwidthLimitExceeded.

L'AWS SDK for PHP integra inoltre il ritardo esponenziale con un algoritmo jitter e di backoff nello schema dei nuovi tentativi. Inoltre, il comportamento dei tentativi predefinito è configurato come3per tutti i servizi tranne Amazon DynamoDB, che è10.

Come posso gestire le eccezioni con codici di errore?

inoltreAWS SDK for PHP-personalizzatoExceptionclassi, ognunaAWSil client del servizio dispone della propria classe di eccezioni ereditata daAwsExceptionAwsException. Puoi determinare i tipi di errore più specifici da individuare con gli errori specifici dell'API elencati nella sezione Errors di ciascun metodo.

Le informazioni sul codice di errore sono disponibili con getAwsErrorCode () dalla Aws\Exception\AwsException.

$sns = new \Aws\Sns\SnsClient([ 'region' => 'us-west-2', 'version' => 'latest', ]); try { $sns->publish([ // parameters ... ]); // Do something } catch (SnsException $e) { switch ($e->getAwsErrorCode()) { case 'EndpointDisabled': case 'NotFound': // Do something break; } }