I used version 3 of the Amazon Web Services PHP SDK after being a long-time user of version 2.

Previously, you used to be able create a signed URL for an S3 object by specifying an expiry time as the third parameter for the getObjectUrl() method. However, this has changed in version 3 of the SDK.

Now, the code to get a pre-signed URL looks like this:

// Create S3 client

$command = $client->getCommand('GetObject', [
    'Bucket' => 'your-bucket',
    'Key' => 'your-object-key'

$request = $client->createPresignedRequest($command, '+10 minutes');

$presignedUrl = (string) $request->getUri();

It’s a bit more verbose, but hopefully this helps some one else after it had me stumped for a short while.