第一步,注册七牛云,创建空间,将空间设为私有,需要记下的东西:
accessKey,secrectKey,domain,bucket
第二步配置ThinkPHP
在config.php添加
'UPLOAD_SITEIMG_QINIU' =>array (
'maxSize' =>5 * 1024 * 1024,//文件大小
'rootPath' =>'./',
'saveName' =>array ('uniqid', ''),
'driver' =>'Qiniu',
'driverConfig' =>array (
'accessKey' =>'<这里填七牛AK>',
'secrectKey' =>'<这里填七牛SK>',
'domain' =>'<这里填七牛外链默认域名>',
'bucket' =>'<这里填七牛空间名称>',
)
)
复制代码
第三步,上传文件
控制器
$setting=C('UPLOAD_SITEIMG_QINIU')
$Upload = new \Think\Upload($setting)
$info = $Upload->upload($_FILES)
复制代码
上传文件后得到的$info是这样的
array(1) {
["photo"] =>array(10) {
["name"] =>
["type"] =>
["size"] =>
["key"] =>
["ext"] =>
["sha1"] =>
["savename"] =>
["savepath"] =>
["url"] =>
}
}
复制代码
第四步,计算下载凭证
Common目录function.php添加方法
function Qiniu_Encode($str) // URLSafeBase64Encode
{
$find = array('+', '/')
$replace = array('-', '_')
return str_replace($find, $replace, base64_encode($str))
}
function Qiniu_Sign($url) {//$info里面的url
$setting = C ( 'UPLOAD_SITEIMG_QINIU' )
$duetime = NOW_TIME + 86400//下载凭证有效时间
$DownloadUrl = $url . '?e=' . $duetime
$Sign = hash_hmac ( 'sha1', $DownloadUrl, $setting ["driverConfig"] ["secrectKey"], true )
$EncodedSign = Qiniu_Encode ( $Sign )
$Token = $setting ["driverConfig"] ["accessKey"] . ':' . $EncodedSign
$RealDownloadUrl = $DownloadUrl . '&token=' . $Token
return $RealDownloadUrl
}
复制代码
$RealDownloadUrl为下载对应私有资源的可用URL
注意
我在开发中没有遇到QiniuStorage.class.php文件$ak和$sk值不对的问题,估计是官方已经修改这个bug。
但是我上传文件是都是提示上传地址不对,最后检查发现七牛现在存储区域已经支持华东,华北,华南等多个区域,但是官方还是华东的上传地址,需要手动修改QiniuStorage.class.php文件的配置
public $QINIU_RSF_HOST = ''
public $QINIU_RS_HOST = 'h'
//public $QINIU_UP_HOST = ''//华东
//public $QINIU_UP_HOST = ''//华北
public $QINIU_UP_HOST = ''//华南
public $timeout = ''
你的这个要根据你的需要来定:第一种可能性:【你的这台服务器只有这一个主域名(是不是泛解析与些无关)】
那么这种情况,根本不用开后面的所谓URL重写,只要设定一个主目录就可以了,我估计你就是这一个吧,那保持默认就行了,不用动它。
第二种可能:【你的服务器有多个主域名,这个主域名只是你多个主域名的其中一个】
那么这种情况就必须使用URL重写来实现了,那接下来我给你说一下这个:
你的<Directory "D:/APMServ/www/htdocs/company">这一行,是将服务器的目录设置为D:/APMServ/www/htdocs/company
那么这个目录将成为你网站的根目录,从而会让你解析到这台服务器上的其它域名也会被链接到这个目录下来。
而且 php_admin_value safe_mode On 这行设置,是在<Directory>之中么?这不是乱用一气么?它应该直接隶属于<VirtualHost>的吧:
它应该这样使用:
<VirtualHost *:80>
php_admin_value open_basedir "/usr/local/apache/htdocs/www:/tmp"
php_admin_value safe_mode On
</VirtualHost>
另外,URL重写不要放到任何标签之中去
为了方便,你可以放到httpd.conf文件的最后面,这样容易寻找,也就是下面的这一段:
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
另外,就算是你使用这一段URL重写好像也无法实现你的功能吧?
试试如下的重写规则:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^([a-z_0-9\-]+)\.chujushichang\.com$
RewriteRule ^(.*)$/company/$1 [L]
另外,如果重写了这条规则,就不要与去设定什么<Directory "D:/APMServ/www/htdocs/company">了,设置了之后反而会出问题。
因为这条规则就是为了只让chujushichang.com这个主域名下的所有二级域名,都对应到网站根目录下的company目录中去的。
————
这百度知道的编辑器真不是一般的不好用,换行不好用,鼠标拖远不好用,还莫名其妙地把我的文章顺序弄乱了。
这还是个“大”站!
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)