Init Repo

This commit is contained in:
root
2019-09-06 23:53:10 +08:00
commit f0ef89dfbb
7905 changed files with 914138 additions and 0 deletions

49
oss/get.php Executable file
View File

@ -0,0 +1,49 @@
<?php
header('Access-Control-Allow-Origin:*');
function gmt_iso8601($time) {
$dtStr = date("c", $time);
$mydatetime = new DateTime($dtStr);
$expiration = $mydatetime->format(DateTime::ISO8601);
$pos = strpos($expiration, '+');
$expiration = substr($expiration, 0, $pos);
return $expiration."Z";
}
$id= 'LTAIfppBmzIHRPV0';
$key= 'OdsoQBa30zzPC38Jq9EmefbqSgFZnX';
$host = 'http://qlgmall.oss-cn-hongkong.aliyuncs.com';
$now = time();
$expire = 30; //设置该policy超时时间是10s. 即这个policy过了这个有效时间将不能访问
$end = $now + $expire;
$expiration = gmt_iso8601($end);
$save_dir = $_GET['dir'];
$dir = 'upload/'.$save_dir."/".date('Y-m').'/';
//最大文件大小.用户可以自己设置
$condition = array(0=>'content-length-range', 1=>0, 2=>1048576000);
$conditions[] = $condition;
//表示用户上传的数据,必须是以$dir开始, 不然上传会失败,这一步不是必须项,只是为了安全起见,防止用户通过policy上传到别人的目录
$start = array(0=>'starts-with', 1=>'$key', 2=>$dir);
$conditions[] = $start;
$arr = array('expiration'=>$expiration,'conditions'=>$conditions);
//echo json_encode($arr);
//return;
$policy = json_encode($arr);
$base64_policy = base64_encode($policy);
$string_to_sign = $base64_policy;
$signature = base64_encode(hash_hmac('sha1', $string_to_sign, $key, true));
$response = array();
$response['accessid'] = $id;
$response['host'] = $host;
$response['policy'] = $base64_policy;
$response['signature'] = $signature;
$response['expire'] = $end;
//这个参数是设置用户上传指定的前缀
$response['dir'] = $dir;
echo json_encode($response);
?>

295
oss/qiniu.php Executable file
View File

@ -0,0 +1,295 @@
<?php
class SDK implements ArrayAccess {
const QINIU_UP_HOST = 'http://up.qiniu.com';
const QINIU_RS_HOST = 'http://rs.qbox.me';
const QINIU_RSF_HOST= 'http://rsf.qbox.me';
protected $deadline = 0;
//查看
//删除
//复制 x
//移动 x
//上传
protected $access_token ;
protected $secret_token ;
protected $bucket;
protected $cache = array();
protected $aliases = array(); //文件别名, 针对文件名比较长的文件
//curl
protected $ch;
protected $headers;
protected $options = array();
protected $response;
protected $info;
protected $errno;
protected $error;
public function __construct($access_token, $secret_token, $bucket = null)
{
$this->access_token = $access_token;
$this->secret_token = $secret_token;
$this->bucket = $bucket;
$this->deadline = time()+3600;
}
public function setDeadline($deadline)
{
$this->deadline = $deadline;
}
//获取空间名称
public function getBucket()
{
return $this->bucket;
}
//设置空间
public function setBucket($bucket)
{
$this->bucket = $bucket;
}
/**
* 查看指定文件信息。
* @param string $key 文件名或者目录+文件名
* @return Array|boolean 成功返回文件内容否会返回false.
*/
public function stat($key)
{
list($bucket, $key) = $this->parseKey($key);
if ( is_null($bucket) )
{
die('error');
}
$url = self::QINIU_RS_HOST .'/stat/' . $this->encode("$bucket:$key");
$token = $this->accessToken($url);
$options[CURLOPT_HTTPHEADER] = array('Authorization: QBox '. $token);
return $this->get($url, $options);
}
/**
* 删除指定文件信息。
* @param string $key 文件名或者目录+文件名
* @return NULL
*/
public function delete($key)
{
list($bucket, $key) = $this->parseKey($key);
if ( is_null($bucket) )
{
die('error');
}
$url = self::QINIU_RS_HOST .'/delete/' . $this->encode("$bucket:$key");
$token = $this->accessToken($url);
$options[CURLOPT_HTTPHEADER] = array('Authorization: QBox '. $token);
return $this->get($url, $options);
}
public function upload($file, $name=null, $token = null)
{
if ( NULL === $token )
{
$token = $this->uploadToken($this->bucket);
}
if ( !file_exists($file) )
{
die('文件不存在,构建一个临时文件');
}
$hash = hash_file('crc32b', $file);
$array = unpack('N', pack('H*', $hash));
$postFields = array(
'token' => $token,
'file' => '@'.$file,
'key' => $name,
'crc32' => sprintf('%u', $array[1]),
);
//未指定文件名,使用七牛默认的随机文件名
if ( NULL === $name )
{
unset($postFields['key']);
}
else
{
//设置文件名后缀。
}
$options = array(
CURLOPT_POSTFIELDS => $postFields,
);
return $this->get(self::QINIU_UP_HOST, $options);
}
protected function parseKey($key)
{
$key = $this->getAlias($key);
if ( isset($this->cache[$key]) )
{
return $this->cache[$key];
}
$segments = explode("|", $key);
if ( count($segments) === 1 )
{
$this->cache[$key] = array($this->bucket, $segments[0]);
}
else
{
$temp = implode('|', array_slice($segments, 1));
$this->cache[$key] = array($segments[0], $temp);
}
return $this->cache[$key];
}
public function getAlias($key)
{
return isset($this->aliases[$key]) ? $this->aliases[$key] : $key;
}
public function uploadToken($config = array())
{
if ( is_string($config) )
{
$scope = $config;
$config = array();
}
else
{
$scope = $config['scope'];
}
$config['scope'] = $scope;
//硬编码,需修改。
$config['deadline'] = $this->deadline;
foreach ( $this->activeUploadSettings($config) as $key => $value )
{
if ( $value )
{
$config[$key] = $value;
}
}
//build token
$body = json_encode($config);
$body = $this->encode($body);
$sign = hash_hmac('sha1', $body, $this->secret_token, true);
return $this->access_token . ':' . $this->encode($sign) . ':' .$body;
}
public function uploadSettings()
{
return array(
'scope','deadline','callbackUrl', 'callbackBody', 'returnUrl',
'returnBody', 'asyncOps', 'endUser', 'exclusive', 'detectMime',
'fsizeLimit', 'saveKey', 'persistentOps', 'persistentNotifyUrl'
);
}
protected function activeUploadSettings($array)
{
return array_intersect_key($array, array_flip($this->uploadSettings()));
}
public function accessToken($url, $body = false)
{
$url = parse_url($url);
$result = '';
if (isset($url['path'])) {
$result = $url['path'];
}
if (isset($url['query'])) {
$result .= '?' . $url['query'];
}
$result .= "\n";
if ($body) {
$result .= $body;
}
$sign = hash_hmac('sha1', $result, $this->secret_token, true);
return $this->access_token . ':' . $this->encode($sign);
}
public function get($url, $options = array())
{
$this->ch = curl_init();
$this->options[CURLOPT_URL] = $url;
$this->options = $options + $this->options;
//临时处理逻辑
return $this->execute();
}
protected function execute()
{
if ( !$this->option(CURLOPT_RETURNTRANSFER) )
{
$this->option(CURLOPT_RETURNTRANSFER, true);
}
if ( !$this->option(CURLOPT_SSL_VERIFYPEER) )
{
$this->option(CURLOPT_SSL_VERIFYPEER, false);
}
if ( !$this->option(CURLOPT_SSL_VERIFYHOST) )
{
$this->option(CURLOPT_SSL_VERIFYHOST, false);
}
if ( !$this->option(CURLOPT_CUSTOMREQUEST) )
{
$this->option(CURLOPT_CUSTOMREQUEST, 'POST');
}
if ( $this->headers )
{
$this->option(CURLOPT_HTTPHEADER, $this->headers);
}
$this->setupCurlOptions();
$this->response = curl_exec($this->ch);
$this->info = curl_getinfo($this->ch);
if ( $this->response === false )
{
$this->error = curl_error($this->ch);
$this->errno = curl_errno($this->ch);
curl_close($this->ch);
return false;
}
else
{
curl_close($this->ch);
//未处理http_code。
if ( $this->info['content_type'] == 'application/json' )
{
$this->response = json_decode($this->response, true);
}
return $this->response;
}
}
public function setupCurlOptions()
{
curl_setopt_array($this->ch, $this->options);
}
public function option($key, $value = NULL)
{
if ( is_null($value) )
{
return !isset($this->options[$key]) ? null: $this->options[$key];
}
else
{
$this->options[$key] = $value;
return $this;
}
}
public function alias($key, $value)
{
$this->alias[$key] = $value;
}
protected function encode($str)
{
$trans = array("+" => "-", "/" => "_");
return strtr(base64_encode($str), $trans);
}
public function __get($key)
{
return $this->$key;
}
public function offsetExists($key)
{
//check response;
}
public function offsetGet($key)
{
return $this->stat($key);
}
public function offsetSet($key, $value)
{
//move or copy
}
public function offsetUnset($key)
{
return $this->delete();
}
}
$access_token = 's0etbUw8isXaxMNp1hM02Ud1RLpeBzS6I_gVDMlR';
$secret_token = 'Ix9LwSpAk0QpsH2vAMup0QLEKMVK5UstDxWCIb-_';
$bucket = 'qlgmall';
$ql = new SDK($access_token, $secret_token, $bucket);
$response['token'] = $ql->uploadToken($bucket);
$response['url'] = 'http://qlg.ect99.com/';//'http://ppzpdlj0h.bkt.clouddn.com';
echo json_encode($response);