createBucket([ "Bucket" => $bucket, ]); // Create an iterator that yields files from a directory $files = new DirectoryIterator(__DIR__); // Create a generator that converts the SplFileInfo objects into // Aws\CommandInterface objects. This generator accepts the iterator that // yields files and the name of the bucket to upload the files to. $commandGenerator = function (Iterator $files, $bucket) use ($client) { /** @var DirectoryIterator $file */ foreach ($files as $file) { // Skip "." and ".." files as well as directories if ($file->isDot() || $file->isDir()) { continue; } $filename = $file->getPath() . '/' . $file->getFilename(); // Yield a command that will be executed by the pool yield $client->getCommand('PutObject', [ 'Bucket' => $bucket, 'Key' => $file->getBaseName(), 'Body' => fopen($filename, 'r') ]); } }; // Now create the generator using the files iterator $commands = $commandGenerator($files, $bucket); // Create a pool and provide an optional configuration array $pool = new CommandPool($client, $commands, [ // Only send 5 files at a time (this is set to 25 by default) 'concurrency' => 5, // Invoke this function before executing each command 'before' => function (CommandInterface $cmd, $iterKey) { echo "About to send {$iterKey}: " . print_r($cmd->toArray(), true) . "\n"; }, // Invoke this function for each successful transfer 'fulfilled' => function ( ResultInterface $result, $iterKey, PromiseInterface $aggregatePromise ) { echo "Completed {$iterKey}: {$result}\n"; }, // Invoke this function for each failed transfer 'rejected' => function ( AwsException $reason, $iterKey, PromiseInterface $aggregatePromise ) { echo "Failed {$iterKey}: {$reason}\n"; }, ]); // Initiate the pool transfers $promise = $pool->promise(); // Force the pool to complete synchronously $promise->wait(); // Or you can chain the calls off of the pool $promise->then(function () { echo "Done\n"; }); //Clean up the created bucket $s3Service->emptyAndDeleteBucket($bucket); # snippet-end:[php.class_examples.command_pool.main] # snippet-end:[php.class_examples.command_pool.complete]