文档中心 > 容器服务

PHP SDK

更新时间:2017/01/18 访问次数:56223

1、开通服务

开通服务,创建空间用于文件存储,参考接入指引

2、SDK下载

点击下面链接下载 PHP SDK (含 Demo)

PHP SDK

3、运行 Demo

下载 PHP SDK 后解压缩可见如下目录,其中PHP示例位于 SDK 压缩包的 demo 目录下。

|—— alimedia: 该文件夹即为PHP SDK。
  |—— alimage.class.php: 用户使用PHP SDK需要引入该文件
|—— demo: 该文件夹下包含SDK中所有接口的调用示例。
  |—— image: 用于上传测试的文件
  |—— upload.php: 调用上传接口,进行文件上传的示例
  |—— uploadData.php: 调用上传接口,进行字符串上传的示例
  |—— uploadMutipart.php: 调用分片上传接口,创建分片上传任务的示例
  |—— manage.php: 调用管理接口,进行资源管理和使用特色服务的示例
|—— README.md: 介绍文档

以 upload.php 文件为例,开发者填入自己的AK、SK 和 namespace 后,运行即可。

$ak = '<user app key>';                           // 用户的AK (user app key)
$sk = '<user secret key)>';                       // 用户的SK (user secret key)
$namespace = '<user namespace>';                  // 空间名称  (user namespace)

//第一步:(必须)引入AlibabaImage类,并设置AK和SK
$aliImage  = new AlibabaImage($ak, $sk);        //设置AK和SK

//第二步:(必须)在上传策略UploadPolicy中指定用户空间名。也可以根据需要设置其他参数
$uploadPolicy = new UploadPolicy( $namespace ); // 上传策略。并设置空间名

//第三步:(必须)进行文件上传
$res = $aliImage->upload( 'image/tinyImg.jpg', $uploadPolicy );
var_dump($res);

如何获取 AK 和 SK?

4、SDK 上传接口

4.1 统一说明

所有接口都是集成到AlibabaImage类中。返回值为PHP 数组array结构。根据array中isSuccess判断是否调用成功。

array(13) {
  'eTag' =>  string(32) "E523542F5F69268CC1999081B405E7DE"
  'requestId' =>  string(36) "a4de8f2b-0808-433f-ac4b-b9e4eeca5336"
  'code' =>  string(2) "OK"
  'url' =>  string(73) "http://test.image.alimmdn.com/image_c1449469480"
  'isSuccess' =>  bool(true)
}

如果失败具体详细信息请参考code, message字段内容。

array(4) {
  ["message"]=>  string(13) "InternalError"
  ["requestId"]=>  string(36) "390671e3-d2a8-4425-be76-c081119d5813"
  ["code"]=>  string(13) "InternalError"
  ["isSuccess"]=>  bool(false)
}

4.2 上传策略与上传选项

上传策略可以参照RestAPI文档2.1节介绍。上传时必须在上传策略中指定空间名 namespace

上传选项可以参照RestAPI文档2.6节介绍。上传时根据用户需要选择使用。

4.3 初始化

require_once('alimedia/alimage.class.php');
$aliImage  = new AlibabaImage($ak, $sk);        //设置AK和SK

初始化传入参数:

AK: 开发者的AccessKeyId。

SK: 开发者的AccessKeySecret。

用户AK/SK的获取方式请参照第 3 节 Demo 中的描述。

4.4 上传文件

指定需要上传的文件路径,调用上传接口完成文件上传。该上传方法会根据文件大小,自动进行分片,开发者无需关心大文件分片上传的问题,开发者可以通过UploadOption设置分片大小。同时,上传的文件默认会覆盖服务端已存在的同名文件。调用示例如下:

简单上传

/*使用如下方法上传文件。上传的文件默认存储在空间根目录下,服务端的文件名采用本地文件默认名称。*/
$aliImage  = new AlibabaImage($ak, $sk);        //设置AK和SK
$uploadPolicy = new UploadPolicy( $namespace ); // 上传策略。并设置空间名
$res = $aliImage->upload( 'image/tinyImg.jpg', $uploadPolicy );

上传并通过UploadPolicy指定文件路径和名称

/*使用如下方法上传文件。通过UploadPolicy设置文件上传到服务端的名称和路径。*/
$aliImage  = new AlibabaImage($ak, $sk);        //设置AK和SK
$uploadPolicy = new UploadPolicy( $namespace ); // 上传策略。并设置空间名
$uploadPolicy->dir = '/temp'; // 文件路径,(默认根目录"/")
$uploadPolicy->name = 'image_'.time(); // 文件名,(若为空,则默认使用文件名)
$res = $aliImage->upload( 'image/tinyImg.jpg', $uploadPolicy );

上传并通过UploadOption指定文件路径和名称

/*使用如下方法上传文件。通过UploadOption设置文件上传到服务端的名称和路径。*/
$aliImage  = new AlibabaImage($ak, $sk);        //设置AK和SK
$uploadPolicy = new UploadPolicy( $namespace ); // 上传策略。并设置空间名
$uploadOption = new UploadOption();
$uploadOption->dir = '/temp';  // 文件路径,(默认根目录"/")
$uploadOption->name = 'image_'.time(); // 文件名,(若为空,则默认使用文件名)
$res = $aliImage->upload( 'image/tinyImg.jpg', $uploadPolicy, $uploadOption );

上传字符串保存到文件

/*将字符串上传并保存到文件。并设置文件的名称和路径。*/
$aliImage  = new AlibabaImage($ak, $sk);        //设置AK和SK
$uploadPolicy = new UploadPolicy($namespace);   // 上传策略。并设置空间名
$uploadPolicy->dir = '/temp'; // 文件路径,(默认根目录"/")
$uploadPolicy->name = 'text_'.time(); // 文件名,(若为空,则默认使用文件名)
$res = $aliImage->uploadData( 'Hello! Ali Media Service!', $uploadPolicy );

以字节方式上传文件

/*以字节的方式上传文件。并设置文件的名称和路径。*/
$aliImage  = new AlibabaImage($ak, $sk);        //设置AK和SK
$uploadPolicy = new UploadPolicy($namespace);   // 上传策略。并设置空间名
$uploadPolicy->dir = '/temp'; // 文件路径,(默认根目录"/")
$uploadPolicy->name = 'image_'.time(); // 文件名,(若为空,则默认使用文件名)
$data = file_get_contents ( 'image/tinyImg.jpg' ); //读本地图片内容到字符串中
$res = $aliImage->uploadData( $data, $uploadPolicy );

4.5 分片上传

如果开发者想要在代码中调用分片上传接口,控制并了解分片上传的细节,SDK中封装了分片上传相关的方法。如下所示:

设置分片上传的参数

$aliImage  = new AlibabaImage($ak, $sk);        //设置AK和SK
$uploadPolicy = new UploadPolicy($namespace);   // 上传策略。并设置空间名
$uploadPolicy->dir = '/temp'; // 文件路径,(默认根目录"/")
$uploadPolicy->name = 'image_'.time(); // 文件名,(若为空,则默认使用文件名)
//(可选)开发者可以在UploadOption中设置文件分片的大小(范围100K < size < 10M)
//如果不指定分块大小,则为默认值2M
$uploadOption = new UploadOption();
$uploadOption->blockSize = 1*1024*1024;     //设置分块大小为1M

初始化分片上传

/*根据设置的参数,初始化分片上传*/
$filePath = 'image/largeImg.jpg';
$httpRes = $aliImage->multipartInit( $filePath, $uploadPolicy, $uploadOption );

分片上传文件

/*开发者需要根据分片大小,计算出文件块数,然后调用如下方法上传每个文件块*/
$uploadOption->setPartNumber($i);   //待上传的文件块编号
$httpRes = $aliImage->multipartUpload( $filePath, $uploadPolicy, $uploadOption );

分片上传完成

/*当所有文件块都上传成功后,需要计算整个文件的md5,然后调用分片上传完成接口*/
$uploadOption->setMd5(md5_file ( iconv('UTF-8','GB2312',$filePath) ));
$httpRes = $aliImage->multipartComplete( $uploadPolicy, $uploadOption );

分片上传取消

/*当某个文件块上传失败后,取消分片上传*/
$httpRes = $aliImage->multipartCancel( $uploadPolicy, $uploadOption );

5、SDK 管理接口

5.1 文件管理

判断文件是否存在

/**文件是否存在 
 * @param sting $namespace 空间名,必须
 * @param sting $dir 路径
 * @param sting $filename 文件名
 * @return array
 */
public function existsFile($namespace, $dir, $filename);

获取文件信息

/**获取文件的元信息(meta信息)
 * @param sting $namespace 空间名,必须
 * @param sting $dir 路径
 * @param sting $filename 文件名
 * @return array
 */
public function getFileInfo($namespace, $dir, $filename);

重命名文件

/**重命名文件,若新的路径newDir与老的路径dir不一致,则视为文件移动
     * @param string $namespace 空间名,必须
     * @param string $dir 路径
     * @param string $filename 文件名
     * @param string $newDir 新的路径
     * @param string $newName 新的文件名
     * @return array
     */
    public function renameFile($namespace, $dir, $filename, $newDir, $newName)

列出文件夹下文件列表

/**获取指定目录下的文件列表
 * @param sting $namespace 空间名,必须
 * @param sting $dir 路径
 * @param number $page 页数
 * @param number $pageSize 每页显示的记录数
 */
public function listFiles($namespace, $dir, $page = 1, $pageSize = 100)

删除文件

/**删除文件
 * @param sting $namespace 空间名,必须
 * @param sting $dir 路径
 * @param sting $filename 文件名
 * @return array
 */
public function deleteFile($namespace, $dir, $filename)

5.2 文件夹管理

判断文件夹是否存在

/**文件夹是否存在
 * @param sting $namespace 空间名,必须
 * @param sting $dir 路径,即文件夹
 * @return array
 */
public function existsFolder($namespace, $dir)

创建文件夹

/**创建文件夹
 * @param sting $namespace 空间名,必须
 * @param sting $dir 路径,即文件夹
 * @return array
 */
public function createDir($namespace, $dir)

列出文件夹列表

/**获取指定目录下的文件夹列表
 * @param sting $namespace 空间名,必须
 * @param sting $dir 路径,指定目录
 * @param number $page 页数
 * @param number $pageSize 每页显示的记录数
 */
public function listDirs($namespace, $dir, $page = 1, $pageSize = 100)

删除文件夹

/**删除文件夹
 * @param sting $namespace 空间名,必须
 * @param sting $dir 路径,即文件夹
 * @return array
 */
public function deleteDir($namespace, $dir)

5.3 鉴黄服务接口

黄图扫描接口

/**黄图扫描接口
 * @param ManageOption $resInfos 待扫描图片资源
 * @return array
 */
public function scanPorn( ManageOption $resInfos );

/**添加待扫描文件信息。*/
ManageOption::addResource($namespace, $dir, $name);

/**添加待扫描URL信息。*/
ManageOption::addUrl($url);

图片扫描结果反馈接口

/**鉴黄反馈feedback接口
 * @param ManageOption $pornFbInfos 反馈信息
 * @return array
 */
public function pornFeedback( ManageOption $pornFbInfos );

/**添加鉴黄反馈信息。
 * @param string $namespace 空间名[必须]。
 * @param string $dir 路径。为空则默认根目录
 * @param string $name 文件名。不能为空
 * @param bool $type 黄图类型[必须]。0或者1,0是非黄图,1是黄图
 * @param bool $wrong 鉴黄判断[必须]。true代表用户认为多媒体鉴黄服务的结果有问题。当为true的时候必须传score
 * @param decimal $score 黄图分值。[可选]取值范围[0-1],值越高则是黄图可能性越高
 */
ManageOption::addPornFbInfo($namespace, $dir, $name, $type, $wrong, $score)

示例代码

  • 扫描指定的资源文件是否为黄图

    $resourceInfos = new ManageOption();
    $resourceInfos->addResource($namespace,$dir,"test1.png");//可以指定多个
    $resourceInfos->addResource("testSpace",null,"test2.jpg");
    $res = $aliImage->scanPorn( $resourceInfos );//扫描指定的图片

  • 扫描指定的URL是否为黄图

    $resourceInfos = new ManageOption();
    $resourceInfos->addUrl("http://test2.image.alimmdn.com/testImg1.jpg");
    $resourceInfos->addUrl("http://test2.image.alimmdn.com/testImg2.jpg");
    $res = $aliImage->scanPorn( $resourceInfos );

    注意:黄图扫描接口,文件资源和URL无法同时添加。

  • 反馈黄图扫描结果

    $pornFbInfos = new ManageOption();
    //反馈"testImg1.jpg"不是黄图
    $pornFbInfos->addPornFbInfo($namespace, $dir, "testImg1.jpg", 0, false);
    //反馈"testImg2.jpg"是黄图,且设置评分为0.99
    $pornFbInfos->addPornFbInfo($namespace, $dir, "testImg2.jpg", 1, true, 0.99);
    $res = $aliImage->pornFeedback( $pornFbInfos );

5.4 多媒体转码接口

多媒体转码接口

/**多媒体(音视频)转码服务接口
 * @param MediaEncodeOption $encodeOption 转码参数选项
 * @return array
 */
public function mediaEncode( MediaEncodeOption $encodeOption );

/**多媒体转码的参数*/
class MediaEncodeOption extends MediaResOption{
    /* 以下属性是"视频转码"方法必须的属性 */
    private $encodeTemplate;          //模板名称。可以设置系统或者用户自定义模板。用户模板名称可以登录后台查看和设置,系统模板见附录系统模板列表
    public $usePreset = 0;            //是否使用系统模板。默认0。如果为1,则encodeTemplate必须设置系统模板名称
    public $force = 0;                //是否强制覆盖。默认0,如果为1,当output文件已经存在的时候会强制覆盖,否则不执行转码并结束任务
    /* 以下属性是"视频转码"方法可选的属性 */
    private $watermark;               //水印资源
    private $watermarkTemplate;       //用户自定义水印模板
    private $notifyUrl;               //通知url,任务结束之后会调用这个url
    private $seek;                    //截取音视频的开始位置
    private $duration;                //截取音视频的长度
}

多媒体转码任务查询接口

/**多媒体转码任务查询接口
 * @param string $taskId 转码任务ID
 */
public function mediaEncodeQuery($taskId);

示例代码

  • 将指定视频的格式转码为mp4格式,并指定转码后保存的文件名和路径

    $encodeOption = new MediaEncodeOption();
    $encodeOption->setInputResource($namespace, "/video", "test.wmv"); //待转码的文件
    $encodeOption->setOutputResource($namespace, "/video", "test_out.mp4"); //转码后的文件
    $encodeOption->usePreset = 1; //指定使用系统的转码模板
    $encodeOption->setEncodeTemplate("video-generic-AVC-360p-16_9"); //根据usePreset参数,决定使用用户模板还是系统模板
    $res = $aliImage->mediaEncode($encodeOption); //返回结果包含任务ID

  • 查询多媒体转码任务的进度和结果

    $taskId = "55a53a16e1720ed0c67005ae43a0a0c335d8b5a7e37e"; //转码任务ID
    $res = $aliImage->mediaEncodeQuery($taskId);

5.5 视频截图接口

视频截图接口

/**视频截图接口
 * @param SnapShotOption $snapshotOption 截图参数选项
 * @return array
 */
public function videoSnapshot( SnapShotOption $snapshotOption );

/**视频截图的参数*/
class SnapShotOption extends MediaResOption{
    /** 视频截图的位置,单位为毫秒。该属性必须*/
    private $time;
    /** 通知url,任务结束之后会调用这个url。该属性可选 */
    private $notifyUrl;
}

视频截图结果查询接口

/**视频截图结果查询接口
 * @param string $taskId 转码任务ID
 */
public function vSnapshotQuery( $taskId )

示例代码

  • 获取视频在指定时刻的截图

    $snapshotOption = new SnapShotOption();
    $snapshotOption->setInputResource($namespace, "/video", "test.wmv"); //待截图的视频文件
    $snapshotOption->setOutputResource($namespace, "/temp", "test_snap.jpg"); //得到的截图文件
    $snapshotOption->setTime(2000); //设置截图的位置。单位毫秒
    $res = $aliImage->videoSnapshot($snapshotOption); //返回结果包含任务ID

  • 查询视频截图的结果

    $taskId = "f3150e6fa2d84eeda7ea0777474f87a1";//截图任务ID
    $res = $aliImage->vSnapshotQuery($taskId);

5.6 广告图扫描接口(beta)

广告图扫描接口

/**
 * 广告图扫描接口(beta)
 * @param ManageOption $resInfos 待扫描图片资源
 * @return array
 */
public function scanAdvertising( ManageOption $resInfos )

/**添加待扫描文件信息。*/
ManageOption::addResource($namespace, $dir, $name);

/**添加待扫描URL信息。*/
ManageOption::addUrl($url);

示例代码

  • 扫描指定的资源文件是否为广告图

    $adInfos = new ManageOption();
    $adInfos->addResource($namespace,$dir,"test1.png");//可以指定多个
    $adInfos->addResource("tempSpace",null,"test2.jpg");
    $res = $aliImage->scanAdvertising( $adInfos );//扫描指定的图片

  • 扫描指定的URL是否为广告图

    $adInfos = new ManageOption();
    $adInfos->addUrl("http://test2.image.alimmdn.com/testImg1.jpg");
    $adInfos->addUrl("http://test2.image.alimmdn.com/testImg2.jpg");
    $res = $aliImage->scanAdvertising( $adInfos );

    注意:广告图扫描接口,文件资源和URL无法同时添加。

FAQ

关于此文档暂时还没有FAQ
返回
顶部