分类目录归档:php

在Yaf中应用Zend_Log

Zend Framework是Zend 官方用PHP写的一套MVC框架,里面包含了诸多组件,可以单独使用,但是在PHP的MVC框架中的性能评测中总是处于下风。在之前的项目中有使用过Zend Framework,对于结构和代码的规范有比较好的帮助,类库也非常全面,所以想在其他的一些项目中也能够应用到Zend Framework的一些Library。Yaf国内牛人仿Zend Framework开发的一个PHP MVC框架的C扩展,性能较Zend Framework有巨大的提升,但是不如Zend Framework全面,更侧重于前端控制,大概后端用其方法来做更好。Yaf的文档少了些,而Zend Framework的应用则比较多,社区支持也更广泛。所以在新的项目采用了Yaf做为前端的分发管理器,结合Zend Framework的类库来进行开发。
本文是关于Zend_Log中添加Zend_Log_Writer_Firebug无效,不能输出到firebug的解决方法。其实这个问题刚好在其他项目中应用的时候也有碰到,之后在stackoverflow上找到了答案,原来是这个功能还依赖于Zend_Wildfire_Channel_HttpHeaders,又需要Zend_Controller_Request_Http和Zend_Controller_Response_Http。于是就仿着写了一个Yaf扩展,代码如下: 继续阅读

PHP脚本建立中国县市数据库

在做快递查询的时候需要一个中国的县市数据库,由于之前的人做行政区域是用了一个Javascript脚本做的不好在后台动态交互,在网上看到了一篇关于建立中国行政区域数据库的文章,非常好,mark一下,以免以后找不到。首先需要到国家统计局下载最新的文档(打开最新的页面,全部复制下来另存为region.txt)。然后建一个数据库表region

CREATE TABLE `region` (
`id` int(10) unsigned NOT NULL,
`parent_id` int(10) unsigned NOT NULL,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
)ENGINE=MYISAM DEFAULT CHARSET=utf8;

在相同目录下建立一个文件region.php,代码如下 继续阅读

PHP 使用ZipArchive压缩文件并下载

网站上需要提供一些打印数据给用户下载,这些文件每次都需要重新生成,因为随时都会有新的数据产生。网络上关于PHP的压缩功能实现有多种方式,比如PclZip,ZipArchive等。PclZip是使用PHP写的一个压缩解压类,方便使用,不用安装扩展;而ZipArchive则在PHP 5.3之后随PHP携带发行,不需要再去开启扩展。本文则使用PHP自带的ZipArchive进行文档压缩。
由于还要提供给用户下载,这里参考了网络上下载类,以下为downlaod.class.php代码 继续阅读

PHP SimpleXMLElement的陷阱

PHP 使用SimpleXMLElement的addChild方法添加另一个SimpleXMLElement对象的时候老是取不到完整的对象。原本参考了网上的例子以为可以直接添加,示例代码如下

<?php
$orders=new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><orders></orders> ');
for($i=1;$i<=5;$i++){
    $order=new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><order></order> ');
    $item=$order->addChild('item');
    $item->addChild('id',$i);
    $item->addChild('name','shoes');
    $item->addChild('price','110.00');
    //echo $order->asXML();
    $orders->addChild($order->getName(),$order);
    //$orders->{$order->getName()}[]=$order;
}
echo $orders->asXML();

发现$orders中的order子元素总是为空,不会包含item项等,但是在循环中调试打印出$order却又是完整。后来找到了这个,据说是因为SimpleXMLElement没有对要添加的对象做深复制,解决方法之一便是借助DOM。 继续阅读

PHP并发操作加锁

有时候在PHP程序中同时只允许一个进程在操作或者只想让一个进程去执行,这时就需要加锁,在网络上找到了phplock这个项目。phplock用于多进程模式下PHP并发操作加锁,以防止并发对同一文件的读写操作错误和缓存失效时,大量请求直接穿透到数据库,造成数据库压力宕机。
继续阅读