今天用多贝云的API上传课件时,报了如下的错误,这个是是在PHP5.5中出现的问题,原来是PHP5.5废弃了’@’这种模式。
The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead
PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求。
传统上,PHP的cURL支持通过在数组数据中,使用“@+文件全路径”的语法附加文件,供cURL读取上传。这与命令行直接调用cURL程序的语法是一致的:
curl_setopt(ch, CURLOPT_POSTFIELDS, array( 'file' => '@'.realpath('image.png'), )); equals $ curl -F "file=@/absolute/path/to/image.png"
PHP 5.5另外引入了CURL_SAFE_UPLOAD选项,可以强制PHP的cURL模块拒绝旧的@语法,仅接受CURLFile式的文件。5.5的默认值为false,5.6的默认值为true。
解决方法:
对上传文件调用curl_file_create()创建CURLFile,代码如下:
public function uploadDocument($filename) { $params = $this->prepareParameters(array()); #$params["slidesFile"] = "@" . $filename; $params['slidesFile'] = curl_file_create($filename);//使用这种方式 $path = "/api/v3/documents/upload"; $result = $this->post($path, $params); return $result; }
在Redis中使用复制功能非常容易,只需要在从数据库的配置文件中加入“slaveof 主数据库IP 主数据库端口”即可,如果主数据库需要授权密码,还需要在从数据库的配置文件中加入主数据库的授权密码"masterauth 主数据库密码",主数据库无需进行任何配置。
原理
当一个从数据库启动后,会向主数据库发送SYNC命令,主数据库接收到SYNC命令后会开始在后台保存快照(即RDB持久化的过程),并将保存期间接收到的命令缓存起来。当快照完成后,Redis会将快照文件和所有缓存的命令发送给从数据库。从数据库收到后,会载入快照文件并执行收到的缓存的命令。当主从数据库断开重连后会重新执行上述操作,不支持断点续传。
拓扑图
/usr/local/redis-stable/bin/redis-server /usr/local/redis-stable/etc/redis.conf &
Redis的强劲性能很大程度上是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中以某种形式同步到硬盘中,这一过程就是持久化。
Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合使用。
RDB方式
RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照并存储在硬盘上。进行快照的条件可以由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。RDB是Redis默认采用的持久化方式,在配置文件中已经预置了3个条件:
save 900 1 save 300 10 save 60 10000
save参数指定了快照条件,可以存在多个条件,条件之间是“或”的关系。如上所说,save 900 1的意思是在15分钟(900秒钟)内有至少一个键被更改则进行快照。如果想要禁用自动快照,只需要将所有的save参数删除即可。
Redis默认会将快照文件存储在当前目录的dump.rdb文件中,可以通过配置dir和dbfilename两个参数分别指定快照文件的存储路径和文件名。
wget http://download.redis.io/releases/redis-stable.tar.gz tar zxvf redis-stable.tar.gz -C /usr/local/ cd /usr/local/redis-stable/ make && make install
mkdir /usr/local/redis-stable/bin mkdir /usr/local/redis-stable/etc cd /usr/local/redis-stable/src/ mv redis-server redis-cli redis-sentinel redis-check-dump redis-benchmark redis-check-aof mkreleasehdr.sh ../bin cd .. mv redis.conf etc/
/usr/local/redis-stable/bin/redis-server /usr/local/redis-stable/etc/redis.conf &
netstat -tnl
如果看到下面的显示说明,redis启动成功了,redis的默认端口为6379
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN
/usr/local/redis-stable/bin/redis-cli
/usr/local/redis-stable/bin/redis-cli shutdown #或 pkill redis-server #或 killall redis-server
yum -y install subversion
mkdir -p /svnrepos/Project1 mkdir -p /svnrepos/Project2
svnadmin create /svnrepos/Project1 svnadmin create /svnrepos/Project2
cp -r /svnrepos/Project1/conf /svnrepos/conf
cd /svnrepos/conf vim passwd
[users]
# harry = harryssecret
# sally = sallyssecret
lixia = lixia
yushushu = yushushu
chenlei = chenlei
zouxinru = zouxinru
caoxiaoying = caoxiaoying
chenbaoyu = chenbaoyu
liuyuchen = liuyuchen
liaoxiaoxue = liaoxiaoxue
wangtianyu = wangtianyu
huangzhonghua = huangzhonghua
vim authz
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
admin = lixia,yushushu
dev = yushushu,chenlei,zouxinru,wangtianyu
test = caoxiaoying,chenbaoyu
res = huangzhonghu