Migrating to the AWS SDK for PHP
CloudFusion has now become the AWS SDK for PHP. This guide walks through the specific changes for migrating from CloudFusion 2.5 to the AWS SDK for PHP 1.0.
Submitted By: Craig@AWS
AWS Products Used: Amazon SQS, Amazon CloudFront, Amazon EC2, Amazon SimpleDB, Amazon S3
Language(s): PHP
Created On: September 27, 2010
Starting out as “Tarzan” in July 2005 with only support for the Product Advertising API, the project later known as “CloudFusion” grew to support more services over time. As of September 2010, CloudFusion has become the AWS SDK for PHP. Because the AWS SDK for PHP is based on CloudFusion, much of the code, design patterns and history are shared. If you’re already familiar with CloudFusion, then the AWS SDK for PHP should make you feel right at home.
General Changes
Including the SDK in your projects
The main cloudfusion.class.php
include file has been renamed to sdk.class.php
. Existing references to the old filename will no longer function.
Minimum requirements
To better support the use of JSON across the underlying AWS service APIs, the minimum supported version is now PHP 5.2. However, with the discontinued support for PHP 5.2, PHP developers are encouraged to move to 5.3.x.
Support for Amazon Associates/Product Advertising API
CloudFusion’s AmazonPAS
class is not included in the AWS SDK for PHP, which focuses on supporting AWS infrastructure services. However, the AmazonPAS
class is still available from the CloudFusion GitHub repository. You can find installation instructions there.
Class constants
To keep SDK code as self-contained as possible, we’ve generally moved away from global constants in favor of class constants. A limited number of global constants remain, but most of the constants you are likely refer to in your code have been modified.
For example, S3_GRANT_READ
is now $s3::GRANT_READ
assuming that you have an instance of the AmazonS3
class called $s3
. See the SDK Reference for a complete list of the available constants.
Swapping base classes
For those who are intentionally extending any of the base utility methods, you’ll need to update the names of the classes they extend.
-
RequestCore
,ResponseCore
, andSimpleXMLElement
are now extended byCFRequest
,CFResponse
, andCFSimpleXML
, respectively. These new classes are now used by default. - You must now extend
CFRequest
instead ofRequestCore
, and then pass that class name toset_request_class()
. - You must now extend
CFResponse
instead ofResponseCore
, and then pass that class name toset_response_class()
.
Also, if you’ve written code that extends the CloudFusion
class, you should modify it to extend the CFRuntime
class instead.
File structure
The package file structure has been refined in a few ways:
- All service-specific classes are inside the
/services/
directory. - All utility-specific classes are inside the
/utilities/
directory.
Base/Runtime
CFRuntime
The base CFRuntime
class (formerly the CloudFusion
class) — from which all Amazon classes extend — has had the following changes:
-
CloudFusion_Exception
has been renamed asCFRuntime_Exception
. - The following global constants have been added:
CFRUNTIME_NAME
,CFRUNTIME_VERSION
,CFRUNTIME_BUILD
,CFRUNTIME_URL
, andCFRUNTIME_USERAGENT
-
CFRuntime::disable_ssl()
no longer takes any parameters. Once SSL is off, it is always off for that class instance. - All date-related constants are now class constants of the
CFUtilities
class (e.g.,CFUtilities::DATE_FORMAT_ISO8601
).- Use
CFUtilities::konst()
if you’re extending classes and need to do something such as$this->util::DATE_FORMAT_ISO8601
but keep getting theT_PAAMAYIM_NEKUDOTAYIMM
error.
- Use
- All
x-cloudfusion-
andx-tarzan-
HTTP headers are nowx-aws-
. -
CloudFusion::autoloader()
is now in its own separate class:CFLoader::autoloader()
. This prevents it from being incorrectly inherited by extending classes. -
cache_response()
anddelete_cache_response()
have been replaced with new caching APIs:cache()
anddelete_cache()
. These methods work differently from the methods they replace. Search the SDK reference docs for more information.
Config file
The config.inc.php
file — which stores your various AWS keys — has had the following changes:
- Added
AWS_MFA_SERIAL
- Added
AWS_CLOUDFRONT_KEYPAIR_ID
- Added
AWS_CLOUDFRONT_PRIVATE_KEY_PEM
- Added
AWS_ENABLE_EXTENSIONS
- Removed
AWS_ASSOC_ID
- Removed
AWS_DEFAULT_LOCALE
View the instructions in config.inc.php
to configure these new values correctly.
Service Classes
While changes to each service class are generally staraightforward, there are a few backwards-incompatible changes that cleaned up older code. The following are specific service class changes.
AmazonCloudFront
- Replaced all of the
CDN_*
constants with class constants.
AmazonCloudWatch
- The global
CW_DEFAULT_URL
constant has been replaced with new region-specific class constants:DEFAULT_URL
,REGION_US_E1
,REGION_US_W1
,REGION_EU_W1
, andREGION_APAC_SE1
.
AmazonEC2
- The global
EC2_LOCATION_US
andEC2_LOCATION_EU
constants have been replaced with new class constants for regions:REGION_US_E1
,REGION_US_W1
,REGION_EU_W1
,REGION_APAC_SE1
. - The
set_locale()
method has been renamed toset_region()
. It accepts any of the region constants.
AmazonS3
- Added class constants for regions:
REGION_US_E1
,REGION_US_W1
,REGION_EU_W1
, andREGION_APAC_SE1
. - Added class constants for storage types:
STORAGE_STANDARD
andSTORAGE_REDUCED
. - Replaced all of the remaining
S3_*
constants with class constants:ACL_*
,GRANT_*
,USERS_*
, andPCRE_ALL
. - Removed
store_remote_file()
because its intended use repeatedly confused users, and had potential for misuse. If you were using it to upload from the local file system, you should be usingcreate_object()
instead. - Removed
copy_bucket()
,replace_bucket()
,duplicate_object()
,move_object()
, andrename_object()
because only a small number of users used them, and they weren’t very robust anyway. - Removed
get_bucket()
because it was just an alias forlist_objects()
anyway. Use the latter from now on — it’s identical. - Changed the function signature for
create_object()
. The filename is now passed as the second parameter, while the remaining options are now passed as the third parameter. This behavior now matches all of the other object-related methods. - Changed the function signature for
head_object()
,delete_object()
, andget_object_acl()
. The methods now accept optional parameters as the third parameter instead of simplyreturnCurlHandle
. - Changed the function signature for
get_object_url()
andget_torrent_url()
. Instead of passing a number of seconds until the URL expires, you now pass a string thatstrtotime()
understands (including60 seconds
). - Changed how
returnCurlHandle
is used. Instead of passingtrue
as the last parameter to most methods, you now need to explicitly setarray('returnCurlHandle' => true)
. This behavior is consistent with the implementation in other classes. - Optional parameter names changed in
list_objects()
:maxKeys
is nowmax-keys
. -
get_bucket_locale()
is now calledget_bucket_region()
, and returns the response body as a string for easier comparison with class constants. -
create_bucket()
has two backward-incompatible changes:- Method now requires the region (formerly locale) to be set.
- Method takes an
$acl
parameter so that the ACL can be set directly when creating a new bucket.
- Bucket names are now validated. Creating a new bucket now requires the more stringent DNS-valid guidelines, while the process of reading existing buckets follows the looser path-style guidelines. This change also means that the reading of path-style bucket names is now supported, when previously they weren’t.
AmazonSDB
- Changed the function signatures for
get_attributes()
anddelete_attributes()
to improve consistency.
AmazonSQS
- Because we now support multiple region endpoints, queue names alone are no longer sufficient for referencing your queues. As such, you must now use a full-queue URL instead of just the queue name.
- The global
SQS_LOCATION_US
andSQS_LOCATION_EU
constants have been replaced with new class constants for regions:REGION_US_E1
,REGION_US_W1
,REGION_EU_W1
, andREGION_APAC_SE1
. - Renamed
set_locale()
asset_region()
. It accepts any of the region constants. - Changed the function signature for
list_queues()
. See the updated API reference. - Changed the function signature for
set_queue_attributes()
. See the updated API reference. - Changed how
returnCurlHandle
is used. Instead of passingtrue
as the last parameter to most methods, you now need to explicitly setarray('returnCurlHandle' => true)
. This behavior is consistent with the implementation in other classes. - Function signature changed in
get_queue_attributes()
. The$attribute_name
parameter is now passed as a value in the$opt
parameter.
AmazonSQSQueue
-
AmazonSQSQueue
was a simple wrapper around theAmazonSDB
class. It generally failed as an object-centric approach to working with SQS, and as such, has been eliminated. Use theAmazonSQS
class instead.
Utility Classes
CFUtilities
-
convert_response_to_array()
has been fixed to correctly return an all-array response under both PHP 5.2 and 5.3. Previously, PHP 5.3 returned a mix ofarray
s andstdClass
objects. - Removed
json_encode_php51()
now that the minimum required version is PHP 5.2 (which includes the JSON extension by default).
Third-party Libraries
CacheCore
- Support for MySQL and PostgreSQL as storage mechanisms has been deprecated. Because they’re using PDO, they’ll continue to function (as we’re maintaining SQLite support via PDO), but we recommend migrating to using APC, XCache, Memcache, or SQLite if you’d like to continue using response caching.