网上很多教程都没有说清楚为什么整合会报错,究其原因是因为七牛云的php-sdk文件采用的命名空间不符合ThinkPHP的规范,那么我们应该从命名空间规范入手,通过配置类库映射,让ThinkPHP能够正确的判断use关键字指向的类库,并自动加载。
正确的整合方法如下:
第一步,注册七牛云,创建空间,下载sdk
第二步,将下载的php-sdk-7.1.3.zip解压,提取php-sdk-7.1.3\src路径下的Qiniu文件夹到ThinkPHP/Library/Vendor路径下
第三步,在模块配置目录下面,例如:Application/Home/Conf,创建alias.php文件用于定义类库映射,该文件会自动加载,定义方式如下:
<?php
/**
* 作者: 景向后山
* 时间: 2017/7/15
* 七牛云PHP-SDK的类库映射文件
*/
return array(
'Qiniu\Auth' => VENDOR_PATH . 'Qiniu/Auth.php',
'Qiniu\Zone' => VENDOR_PATH . 'Qiniu/Zone.php',
'Qiniu\Config' => VENDOR_PATH . 'Qiniu/Config.php',
'Qiniu\Etag' => VENDOR_PATH . 'Qiniu/Etag.php',
'Qiniu\Http\Client' => VENDOR_PATH . 'Qiniu/Http/Client.php',
'Qiniu\Http\Request' => VENDOR_PATH . 'Qiniu/Http/Request.php',
'Qiniu\Http\Response' => VENDOR_PATH . 'Qiniu/Http/Response.php',
'Qiniu\Http\Error' => VENDOR_PATH . 'Qiniu/Http/Error.php',
'Qiniu\Processing\ImageUrlBuilder' => VENDOR_PATH . 'Qiniu/Processing/Request.php',
'Qiniu\Processing\Operation' => VENDOR_PATH . 'Qiniu/Processing/Operation.php',
'Qiniu\Processing\PersistentFop' => VENDOR_PATH . 'Qiniu/Processing/PersistentFop.php',
'Qiniu\Storage\BucketManager' => VENDOR_PATH . 'Qiniu/Storage/BucketManager.php',
'Qiniu\Storage\FormUploader' => VENDOR_PATH . 'Qiniu/Storage/FormUploader.php',
'Qiniu\Storage\ResumeUploader' => VENDOR_PATH . 'Qiniu/Storage/ResumeUploader.php',
'Qiniu\Storage\UploadManager' => VENDOR_PATH . 'Qiniu/Storage/UploadManager.php',
);
然后在需要调用七牛云sdk的地方使用如下方式,即可成功调用,无需修改sdk代码:
$bucket = C("BUCKET");
$accessKey = C("ACCESSKEY");
$secretKey = C("SECRETKEY");
Vendor('Qiniu.functions'); //功能文件引入
$auth = new \Qiniu\Auth($accessKey, $secretKey);
// 生成上传Token
$token = $auth->uploadToken($bucket);
echo $token;