存档
今天编译memcache扩展,由于从别的机器拷过来的,忘记make clean,出了点插曲,备忘下
cd memcache-2.2.5
/usr/local/bin/phpize
make clean
./configure –enable-memcache –with-php-config=/usr/local/bin/php-config –with-zlib-dir
make
make install
编译后会生成memcache.so
例如我的是:
/usr/local/lib/php/extensions/no-debug-non-zts-20060613/
修改php.ini
将extension_dir改为以上目录或将生成的so文件移至extension目录
添加行
extension=memcache.so
PHP处理XML类文档主要有两个模块,一般简单点用SimpleXML,不过他只能作遍历、取值、取属性等操作,而不能进行删除修改节点的操作。使用libxml的DOMDocument功能比较强大,不过也比较麻烦。今天就遇见一问题,折腾很久~
有XML格式如下:
<foo xmlns="test">
<bar attr=’a'></bar>
<bar attr=’b'></bar>
<bar attr=’c'></bar>
</foo>
开始尝试解析
<?php
$dom = new DOMDocument;
$dom->loadXML($xmls);//xmls变量为以上XML的字符串内容
$messages = $dom->getElementsByTagName(’bar’);
foreach($messages as $k=>$message){
if(!is_object($message) || ($message->getAttribute(’attr’) == ‘a’)){
continue;//属性attr 为a的保留 [...]
对站长来说,丢失数据又没得恢复绝对是恶梦……因此,想到将linux下的数据库和www目录自动备份,因为有win主机闲置,那就存它那了。闲话少说,现在开工:
首先给win主机安装cwrsync(基于cgwin和rsync的同步软件)
…………
memcache是一个高效快速的,以内存存取的高速缓存,其保存方式通过“键”=>“值”的方式,对key进行hash存储,因而查询速度快,避免硬盘的反复擦写,也正如此,断电或重启就得重新为它“灌”内容了。
准备工作:
1.先安装libevent,因为memcached是依赖它的
2.memcached下载与安装
# ./memcached -d -m 50 -p 11211 -u root
参数说明 -m 指定使用多少兆的缓存空间;-p 指定要监听的端口; -u 指定以哪个用户来运行
3.启动./memcached -p 11211 如果报如下错
error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
那么,注册一下libevent扩展
# vi /etc/ld.so.conf.d/libevent-i386.conf
内容为你编译生成的libevent库的路径,默认为/usr/local/lib
运行
# ldconfig
好了,这样memcachd就装好了,接下来安装php支持,可以通过phpize或静态编译方式 ,我是通过后者
下载最新版pecl memcache包解压至phpdir/ext
#rm configure
#buildconf –force 当然这个需要
#./configure –with-memcache –enable-memcache
需要注意: 要运行“buildconf”脚本,需要 autoconf ,如果没有或版 本过低就先升级它
OK,写几行试试~
<?php
set_time_limit(1000);
$host = ‘localhost’;
$memcache = new Memcache;
$memcache->connect($host,11211);
for($i=0;$i<100000;$i++){
/*存上10w个看看*/
$memcache->set(’k’.$i,$i,false,1000);
}
print_r($memcache->getServerStatus($host));
print_r($memcache->getStats());//查看memcached服务状态
?>
我们通常使用fsockopen打开一个$fp来发送http头,请求后用feof判断是否读完来获取服务器响应的内容。
但是这使用feof时要特别注意一点,php手册上关于feof有这样一个说明:
Warning
如果服务器没有关闭由 fsockopen() 所打开的连接,feof() 会一直等待直到超时而返回 TRUE。默认的超时限制是 60 秒,可以使用 stream_set_timeout() 来改变这个值。
也就是一个打开的socket连接,没有在读完后关闭,feof会一直返回true直到超时
看如下代码:
$url = "/N_StockQuote.aspx?StockCode=002024&StockMarket=2";
$fp = fsockopen(’hqdigi.eastmoney.com’,80,$errno,$errstr,10);
if(!$fp){
die("Network error or invalid stock code\r\n");
}elseif($error){
die("$error:$errstr\r\n");
}else{
$request = "GET $url HTTP/1.1\r\n";
$request .= "Host: hqdigi.eastmoney.com\r\n";
$request .= "Pragma: no-cache\r\n";
$request .= "Cache-Control: no-cache\r\n\r\n";
fwrite($fp,$request);//发送请求头
while(!feof($fp)){
$tmp .= fgets($fp,1024);//获取服务器返回信息
}
}
运行这代码就有问题了,while进入死循环,直到超时
因此,稍作改动,请求头部最后加上Connection:close,来告诉服务器,响应完就断开
平时对MYSQL函数使用较少,想使用时确不记得函数名及参数用法。
现对比PHP整理下,便于记忆……
本页将不断更新,直至完善
今天一同事问我,他用了Content-Type=text/xml型,提交了一个xml文档内容给了php server,要怎么获得这个POST数据。
这把我愣住了,以前确实没写过这样的POST,赶紧查手册,发现有$HTTP_RAW_POST_DATA 这一项。对此的解释是:The RAW / uninterpreted HTTP POST information can be accessed with: $GLOBALS['HTTP_RAW_POST_DATA'] This is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).
意思是,由于PHP默认只识别application/x-www.form-urlencoded标准的数据类型,因此,对型如text/xml的内容无法解析为$_POST数组,故保留原型,交给$HTTP_RAW_POST_DAT来接收。
获取用户IP地址的几个属性的区别(HTTP_X_FORWARDED_FOR,HTTP_X_FORWARDED,HTTP_VIA,REMOTE_ADDR)
最新评论