随笔分类 -  PHP

PHP 是我最拿手的编程语言,我很喜欢这种语言的灵活与精巧。
摘要:我是在Yii的官方wiki上看到这篇文章的。读的第一遍觉得很不错,还有一种想翻译出来的冲动。虽然,本人英文很烂,但是毕竟写了这样多年的代码,估计大概的意思是能有的吧。英文原文:http://www.yiiframework.com/wiki/268/how-to-learn-yii/ 下面是针对Yii的初学者的一个一步一步如何学习Yii的列表。这个列表列出了一些文档,教程,希望你能够阅读,这些文档,教程有助于我们理解Yii这个框架。 1. 学习PHP。当然,你需要先学习PHP编程。w3cschool 上有一个很好的教程,教程分成 语言基础 高级功能 数据库操作三个部分。有一个小技巧,... 阅读全文
posted @ 2011-12-09 23:13 暮夏 阅读(3856) 评论(3) 推荐(6) 编辑
摘要:最近,和一个网友交流的时候,给我提了一个非常奇怪的问题。那就是,在一个运算中,加了一个引用之后,发现性能慢了一万倍。在我的脑海里面,引用是一个非常容易出错的问题,特别是PHP里面的引用,有非常多的陷阱。因为,以前专门研究过这一块PHP的源代码,所以,我可以比较清晰的解析引用到底是怎么一回事,希望,读了我这篇博客的PHP开发者,能彻底理解这个问题。如果,有任何疑问,或者有一些你想了解的问题,可以给我留言。 先来看一段代码: class RefferTest{ private $data; private $testKey; function __construct() { $key = &qu 阅读全文
posted @ 2011-04-28 21:53 暮夏 阅读(1895) 评论(10) 推荐(4) 编辑
摘要:最近一段时间,在研究PHP的共享内存。于是,我想尝试一下共享内存和普通文件相比,能提高多少的性能。本来想简单的把纯真IP数据库导入到共享内存然后查询。但是,后来发现这个数据库设计过于复杂,查询IP速度非常的慢,于是我对这个数据库的结构重新进行了设计。头部:4 * 4 个字节。就记录一个总数//总数|0|0|0索引区: (区域ID的格式:前 24 个bit是区域在文件中的的offset,后8个bit是长度,这样区域的名称长度不能超过255个字节)//start|end|区域ID1|区域ID2//start|end|区域ID1|区域ID2数据区:简单的把所有区域的名称写在这块区域(过滤掉重复的数据 阅读全文
posted @ 2011-03-07 14:03 暮夏 阅读(1061) 评论(0) 推荐(1) 编辑
摘要:今天有人在PHP的群里面问这样一个问题:<?xml version="1.0" coding="utf-8"?><country><city>北京</city><city>香港</city><city>上海</city></country>如果在香港前面加上一个<city>杭州</city>。今天请假在家,就花了几分钟,解决了这个问题。<?php$xml=<<<XML<?xmlversion=& 阅读全文
posted @ 2011-02-28 21:18 暮夏 阅读(1936) 评论(0) 推荐(0) 编辑
摘要:这是一个非常经典的问题,同时,也是一个很难解决的问题。经典是因为,这个问题非常常见,而且有很多解决方案。难以解决是因为,存在多音字。可以发现很多股票软件都有这问题,比如zgyh 出来的不是中国银行,而是找不到,这是因为,中国银行的 “行” 查出来读的是 "xing" 。我篇文章我只是提供了一个原始的转换方法,就是查表。和你以前看过的算法可能不一样的是,我加了一个二分查找,我看到的一个开源的解决方案是顺序查找的。 关于,多音字问题,我只有一个小规模的多音字表,从所有股票名称里面纠正过来的。解决方案是这样的:在查找拼音的时候,查找一下这个字是否在多音字表里面,如果是,那么查找前后组成的词,来决定读 阅读全文
posted @ 2011-01-26 19:29 暮夏 阅读(1788) 评论(1) 推荐(3) 编辑
摘要:很多时候,一个字符串,你很难检测它的编码。是理论上就不行,比如一个字符串,你把他当作一个utf8的编码是一个汉字串,把他当成gb2312 还是一个汉字出串,而且在字库里面都存在。所以,我们检查也只能是说,大部分能检测出来。 我遇到的问题是这样的,百度搜索引擎的中关键字的问题。http://www.baidu.com/s?tn=159sifu_pg&wd=%E8%83%8E%E6%95%99%E9%9F%B3%E4%B9%90%E6%AC%A3%E8%B5%8F 在大多数情况下,百度默认编码是gb2312的,如果是utf8会加一个ie字段。但是比如在好hao123里面搜索的,或者其他地方搜索然后 阅读全文
posted @ 2010-12-20 18:46 暮夏 阅读(8793) 评论(0) 推荐(1) 编辑
摘要:编码问题的确非常的棘手。很多时候,你一不小心,在某个阶段没有正确的转码,结果造成存储下来的文件 或者 保存进入数据库的字段是乱码。如果这个字段是非常重要的信息,你可能认为,你已经无法恢复这些信息了,其实,在大多数情况下面这个是能够恢复的,你要分析你转码的每个过程,确定出差错的位置,然后进行这个编码的逆转。这里我只举一个我实际中遇到的一个例子。这个例子的情况是这样的,我在cookie里面保存了一个username字段,写cookie是通过PHP程序写的,这个PHP程序的编码是gbk的。另外一个统计系统,这个统计系统,通过Javascript 读取cookie信息,然后通过url编码这些信息,发送 阅读全文
posted @ 2010-12-17 19:15 暮夏 阅读(1365) 评论(0) 推荐(0) 编辑
摘要:钻研PHP很多年,想总结一下自己,但是不知从何说起,那就先谈一些我知道的PHP的用法,这些用法很多有多年的工作经验的人可能都不知道。实际中可能用不到,但是用到了,就是体现你实力的时候。现在问题是这样的,一个用户,用的是windows 的虚拟服务器,然后呢,当打开一个页面的时候,要并行的抓取大概10个网站的标题显示出来。这样的用法很少见,但是,有需求,就得解决。串行是一个解决方案,但是要等待的时间过长。于是我想到用curl 去并行抓取。不知道的可以参考这篇文章PHP多线程(四) 内部多线程 但是,最后发现,那个虚拟服务器上没有curl,这真是让人纠结。于是,我决定改变思路,用单个线程也实现多个线 阅读全文
posted @ 2010-12-15 14:03 暮夏 阅读(3735) 评论(1) 推荐(1) 编辑
摘要:周末的时候看到腾讯的空间里面写日志的时候能自动提取关键字,感觉这个功能非常的好,于是我自己准备也写一个。因为,提取关键字,肯定要涉及分词,现在的分词算法,最好的估计是统计算法,但是实现稍微复杂一点,用PHP的话,性能往往也不够。于是,我一切从简,争取星期天一天能写完这个工具。 我翻了一下最简单的分词,好像就是向前最大匹配。而且如果字典好的话,据说准确率还挺高的。当然,我没有什么好字典,从中科院的分词软件里面,拿了一本字典。大概有10万的词汇量。当然,你可以用其他的字典,但是一定要有词频。 当然,只是简单的分词,算法没有什么好说的,我就说说我写的时候遇到的问题。1. 字典管理。本来我想把字典先读 阅读全文
posted @ 2010-12-06 14:36 暮夏 阅读(13345) 评论(11) 推荐(1) 编辑
摘要:写PHP也写了4,5年了,最近一年,很少会遇到在PHP 方面让我很困惑的问题,今天,就让我遇到了一个。不知道大家有没有遇到过这样的问题,在文件上传的时候,用 move_uploaded_file 这个函数不能移动文件,而用copy 或者 rename 确是可以的。我也一直很困惑。在文档上,说的比较模糊,就是 move_uploaded_file 这个函数,加了一步检查,检查这个文件是否是有 HTT... 阅读全文
posted @ 2010-09-03 19:38 暮夏 阅读(520) 评论(0) 推荐(0) 编辑
摘要:一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G。特别是在PHP作为后台服务器的系统中,经常会出现内存耗费太大的问题。 因为这个是语言的问题,常规方案比较难以解决。下面是一种通过string 解决的方案。 代码Code highlighting produced by Actipro CodeHighlighter (freew... 阅读全文
posted @ 2010-04-03 19:19 暮夏 阅读(3252) 评论(2) 推荐(1) 编辑
摘要:这篇文章,写的比较早,有一些错误的说法,我表示非常歉意。一些代码,没有经过严格的测试,以后写博客一定要非常谨慎。因为可能会对一些人产生误导。在写PHP 程序的时候,很多人在传递参数的时候,喜欢用一个引用。特别是在一个数组非常的大的时候,更是喜欢加。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->function binsearch(&$arr,$key,$value) { $low=0; $high=count($arr); whil 阅读全文
posted @ 2010-03-11 21:31 暮夏 阅读(1199) 评论(12) 推荐(0) 编辑
摘要:PHP扩展好的资源不多,转的这个朋友应该是个高手。他在实践中摸索出来的这些经验和大家分享。红色部分是我的注释。更多信息参看:http://blog.chinaunix.net/u1/57558/showart_455870.html常用的通用功能已经封装好了,在如zen_API.h 头文件中,不用费力查看内部细节,浪费时间。(参考:Extending and Embedding PHP 的附录A)... 阅读全文
posted @ 2010-03-09 19:20 暮夏 阅读(844) 评论(0) 推荐(0) 编辑
摘要:暮夏,您好!rainbird给您发了短消息:已经写了不少后台运行的deamon了.用的挺顺手的,但是我现在想获取管道传过来的内容,不知道咋实现,类似echo "aaaa" |a.php,a.php怎么获得echo的内容,不知道您有什么高见.今天收到一条消息,解决的方法给大家分享一下:实际上,shell 的 | 实际上表示的是 前一个的 标准输出 作为后一个的标准输入。虽然实现是通过pipe来实现的... 阅读全文
posted @ 2010-03-01 11:55 暮夏 阅读(2555) 评论(0) 推荐(0) 编辑
摘要:上面一个系列的教程:用 Socket 和 Pcntl 实现一个多进程服务器(一) PHP多进程编程(一) PHP多进程编程(二)管道通信 PHP多进程编程(三)多进程抓取网页的演示 说的都是只兼容unix 服务器的多进程,下面来讲讲在window 和 unix 都兼容的多进程(这里是泛指,下面的curl实际上是通过IO复用实现的)。 通过扩展实现多线程的典型例子是CURL,CURL 支持多线程的抓取网页的功能。这部分过于抽象,所以,我先给出一个CURL并行抓取多个网页内容的一个分装类。这个类实际上很实用,详细分析这些函数的内部实现将在下一个教程里面描述。 你可能不能很好的理解这个类,而且,ph 阅读全文
posted @ 2010-01-30 00:44 暮夏 阅读(5988) 评论(6) 推荐(2) 编辑
摘要:要理解这个部分的代码,请阅读:用 Socket 和 Pcntl 实现一个多进程服务器(一) PHP多进程编程(一) PHP多进程编程(二)管道通信 我们知道,从父进程到子经常的数据传递相对比较容易一些,但是从子进程传递到父进程就比较的困难。有很多办法实现进程交互,在php中比较方便的是 管道通信。当然,还可以通过 socket_pair 进行通信。首先是服务器为了应对每一个请求要做的事情(发送一个url 序列,url序列用\t 分割。而结束标记是 \n)代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http 阅读全文
posted @ 2010-01-29 20:18 暮夏 阅读(3487) 评论(10) 推荐(2) 编辑
摘要:1.非法的数据过滤1.1数据检查:通过链接传递的常数你永远要假定它可以是任意的值。一个合格的程序,它首先有一套过滤系统,过滤数据的有效性。一般来说,在js的客户端,会有一个过滤,提示你输入了非法的数据,但是js很容易被绕过,所以,服务器端还要执行相同的检查。一般检查的项目如下:1.是否是布尔类型2.是否是一个字母3.是否是整数4.是否是小数5.是否是个email6.是否是个url7.是否是个正确的... 阅读全文
posted @ 2010-01-28 15:07 暮夏 阅读(1076) 评论(3) 推荐(1) 编辑
摘要:一个进程如果是个人英雄主义,那么多进程就是集体主义。(不严格区分多进程 和 多线程的差别)你不再是一个独行侠,而是一个指挥家。独来独往,非常自由自在,但是,很多时候,不如众人拾柴火焰高。这就是我对多进程的理解。多线程编程的主要问题是:通信 和 同步问题。更多PHP 多线程编程的背景知识见:PHP多进程编程(一) 在PHP 中,如果光用pcntl ,实现比较简单的通信问题都是很困难的。下面介绍管道通信:1. 管道可以认为是一个队列,不同的线程都可以往里面写东西,也都可以从里面读东西。写就是在队列末尾添加,读就是在队头删除。2. 管道一般有大小,默认一般是4K,也就是内容超过4K了,你就只能读,不 阅读全文
posted @ 2010-01-20 22:59 暮夏 阅读(6492) 评论(1) 推荐(3) 编辑
摘要:虽然PHP 中,多进程用的比较的少。但是毕竟可能是会用到了。我最近就遇到这样一个问题,用户提交几百个url以后,要读出这个url 中的标题。当然,你不希望用户等待的太久,10s 钟应该给出个答案。但是,本身,你要获取一个url 的标题,少的要 0.1s ,多的要好几秒。显然,采用单个线程的方式是不行的。 我的第一个设计方案是这样的: 1. 用我前面提供的代码提供一个简单的服务器: http://www.cnblogs.com/niniwzw/archive/2009/09/27/1575002.html 这个服务器的作用是:提供一个url,然后,就读取标题。这里,可以每次读128个字节,看看. 阅读全文
posted @ 2010-01-18 22:23 暮夏 阅读(5710) 评论(1) 推荐(0) 编辑
摘要:有很多脚本语言里面没有 都是 没有 unsinged int 的,如 PHP。位运算 一般来说 int 和 unsinged int 没有什么差别,除了右移操作,在int 中是补1 在 unsinged int 中是补0我想了好久,终于想到了一个比较妙的方法,只是,这个方法,右移的次数至少大于1。一般来说,0右移 没有什么意义。(($a >> 1) & 0x7fffffff) ... 阅读全文
posted @ 2009-12-04 16:53 暮夏 阅读(864) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示