2014-08-27 152 views
2

我有一个大的functions.php文件,其中包含我在我的应用程序中使用的所有功能。在它的顶部,我包含了use Aws\S3\S3Client;命名空间。在该文件的唯一内容下面是一大串函数。AWS S3文件上传:S3Client类未找到

我已经一个函数调用uploadFile这原本只是加载的文件到本地磁盘,并插入一条记录到数据库中。现在,我要上传的文件到AWS S3存储,但是当我尝试使用AWS的代码,我发现在这里:http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpPHP.html

它给我这个错误:

Fatal error: Class 'Aws\S3\S3Client' not found in C:\wamp\www\project\functions.php 

这里是我的本地执行:

function uploadFile($file_name, $target_directory, $files = null) { 
    $bucket = getS3Bucket(); 
    $keyname = getS3Key(); 
    // $filepath should be absolute path to a file on disk 
    $filepath = $file_name; 

    // Instantiate the client. 
    $s3 = S3Client::factory(); 

    // Upload a file. 
    $result = $s3->putObject(array(
     'Bucket'  => $bucket, 
     'Key'   => $keyname, 
     'SourceFile' => $file_name, 
     'ContentType' => 'text/plain', 
     'ACL'   => 'public-read', 
     'StorageClass' => 'REDUCED_REDUNDANCY', 
     'Metadata'  => array(
      'param1' => 'value 1', 
      'param2' => 'value 2' 
     ) 
    )); 

    return $result; 
} 

看来我正面临着使用S3 API和我的程序代码的问题。有没有办法处理这个问题,而不必重写所有我上传文件的地方? (换句话说,我会做任何需要改变的功能,但我讨厌必须重写该函数的每个实现。)

+0

您是如何安装SDK的?您的functions.php文件是否包含为SDK设置自动加载的内容(例如'require'vendor/autoload.php';')? – 2014-08-27 22:01:41

+0

我在根目录中有一个名为'thirdparty'的目录,其中有'aws' SDK。愚蠢的是,我没有建立任何连接,虽然我没有在其中看到一个'vendor/autoload.php'(尽管我现在正在研究它)。 – Bing 2014-08-27 22:20:58

+0

解决了这个问题!现在弄清楚它为什么不认证我。感谢Jeremy Lindblom!如果你提交作为一个真棒,我会接受它。 – Bing 2014-08-27 23:07:17

回答

0

听起来像问题是你没有包含任何东西您的functions.php启用自动加载SDK类。您所包含的内容取决于您安装SDK的方式。如果您使用Composer,则要使用的自动加载器将位于<your-project-root>/vendor/autoload.php中。您可以查看SDK's Getting Started Guide以了解如何执行其他安装方法(例如,aws.pharaws.zip)。