Fehlerbehandlung - AWS SDK für PHP

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Fehlerbehandlung

S3 Transfer Manager verwendet Promises für asynchrone Operationen. Sie können Fehler mit der then Methode otherwise oder des Versprechens behandeln. Sie können Ihre Implementierung auch in einen try-catch Block packen.

Promise Fehlerbehandlung

Verwenden von otherwise:

<?php use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, []); $uploadPromise = $transferManager->upload( new UploadRequest( '/path/to/file.txt', [ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'file.txt', ] ) ); $uploadPromise->otherwise(function (Throwable $reason) { echo "Upload failed: " . $reason->getMessage() . "\n"; });

Verwenden von then:

<?php use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\Models\UploadResult; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, []); $uploadPromise = $transferManager->upload( new UploadRequest( '/path/to/file.txt', [ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'file.txt', ] ) ); $uploadPromise->then( function (UploadResult $result) { echo "Upload succeeded!\n"; }, function (Throwable $error) { echo "Upload failed: " . $error->getMessage() . "\n"; } )->wait();

Try-Catch-Block verwenden

<?php use Aws\S3\S3Transfer\Exception\S3TransferException; use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, []); $uploadPromise = $transferManager->upload( new UploadRequest( '/path/to/file.txt', [ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'file.txt', ] ) ); try { $uploadPromise->wait(); } catch (S3TransferException $exception) { echo "Upload failed: " . $exception->getMessage() . "\n"; }

<Add more details about S3TransferManager exception and also a link to the API reference for it.>

Richtlinien für den Ausfall von Verzeichnisvorgängen

Für Verzeichnisoperationen können Sie auch einen Rückruf für Fehlerrichtlinien angeben. Dieser Callback behandelt Fehler bei einzelnen Dateien und entscheidet, ob der Verzeichnisupload fortgesetzt werden soll.

Beispiel der Verwendung einer 'failure_policy'-Funktion für den Betrieb uploadDirectory
<?php use Aws\S3\S3Transfer\Models\UploadDirectoryRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, []); $uploadDirPromise = $transferManager->uploadDirectory( new UploadDirectoryRequest( '/path/to/directory', 'amzn-s3-demo-bucket', [], [ 'failure_policy' => function ( $requestArgs, $uploadDirectoryRequestArgs, $reason, $uploadDirectoryResponse ) { echo "Failed to upload {$requestArgs['Key']}: " . "{$reason->getMessage()}\n"; echo "So far, uploaded: " . "{$uploadDirectoryResponse->getObjectsUploaded()}, " . "failed: {$uploadDirectoryResponse->getObjectsFailed()}\n"; // Return true to continue with other files, // or throw an exception to abort. return true; }, ] ) ); $uploadDirPromise->wait();
Beispiel der Verwendung einer 'failure_policy'-Funktion für den Betrieb downloadDirectory
<?php use Aws\S3\S3Transfer\Models\DownloadDirectoryRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, []); // Log errors but continue with other files. $downloadDirPromise = $transferManager->downloadDirectory( new DownloadDirectoryRequest( 'amzn-s3-demo-bucket', '/path/to/directory', [], [ 'failure_policy' => function ( $requestArgs, $downloadDirectoryRequestArgs, $reason, $downloadDirectoryResponse ) { error_log("Failed to download {$requestArgs['Key']}: " . "{$reason->getMessage()}"); // If we've had too many failures, abort the entire operation. if ($downloadDirectoryResponse->getObjectsFailed() > 10) { throw new \Exception( "Too many download failures, aborting operation" ); } // Return void to continue with other files. return; }, ] ) ); $downloadDirPromise->wait();