- 正在使用亚马逊的 VPS,一年的小心翼翼的免费期,选择的是 Debian 6 32 位的系统,因搭建 WordPress 试图在上面安装 Nginx+PHP 的环境。看着在 Nginx 环境下多是使用 php-fpm,而不是 php-cgi,前者与后者的区别是在孤立的 php-cgi 之上又多了一个调度层。
一开始打算一步步纯手工打造,但在执行apt-get install php-fpm时总有不可逾越的依赖症,所以转而寻求更傻瓜的一键包安装方式。试过 LNMP,包太大,东西太过于齐全,把人太当傻瓜,虽然如此,我在用它安装时也有些慢,因为它也是采取的编译安装方式,针对本机应该有很好的优化。没装完我就中断了,下次有时间可以再试下。
正好在这期间看到了 Dvid Pennington 制作的 lowendscript lnmp 一键安装脚本,很省事,连安装 WordPress 也考虑到了,这里有介绍,比较详细 lowendscript:最省资源lnmp一键包。我只记录下我自己的安装过程,以备忘。 Read More - 关于把 IP 地址转换为地理位置可以使用网络上很多的 API,好处就是不用在本地存储一个 IP 数据库,而且一般网络上的 IP 库会自动更新,不利的地方就是太依赖于网络,性能表现也可能会弱些。比如像下面的 API:
http://api.hostip.info/get_html.php?ip=58.63.236.31
http://api.hostip.info/flag.php?ip=58.63.236.31
这里介绍 PHP 如何使用 GeoLiteCity.dat 库把 IP 转换为地理位置,GeoLiteCity.dat 可以在 http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz 下,解压出 GeoLiteCity.dat,即可,我们可以手动去更新新的 IP 库。
下面 PHP 解析 IP 的过程参考自 WordPress 插件 Visitor Maps and Who's Online 的实现。可以找到该插件的两个文件 include-whos-online-geoip.php 和 visitor-maps.php 告诉了我们怎么做。你可以点击这里的链接下载到这两个文件 Read More - Wordpress 3.0.1 之前是在 xampp 1.7.1 中运行的,没什么问题,php 版本为 5.2.9。后来升级 xampp 到 1.7.3 版,打开网站最上方出现提示:
Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\htdocs\footnoted\wp-content\plugins\simple-tags\inc\client.php on line 1700
这是插件 simple-tags 里的代码,定位到该行是:
$error = & new WP_Error('invalid_taxonomy', __('Invalid Taxonomy'));
而 WP_Error 是用 function 进行定义的:
function WP_Error($code = '', $message = '', $data = '') Read More - 现在一般的 PHP 主机都支持 GD 库和 FreeType/TrueType,普通的画字符串的函数 imagestring 只能指定字体大小,不能指定字体名称。像 imagettftext 这样的函数可以指定字体名称和字符串显示的角度,它的原型是:
array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )
注意这里的 $fontfile 是个字体文件,不是字体名,我刚开始就搞错了,给它传递的是 "Arial" 或是 "Arial.ttf" 而不能显示出任何东西来。在 Windows 下字体文件一般都在 c:/windows/fonts/ 目录中,所以在 Windows 下用 imagettftext 使用 TrueType 字体时的代码例子如下: Read More - PHP 像 JavaScript 一样,很方便使用回调函数,函数名就像一个普通的变量名一样可作为其他函数的参数,即成为一个让宿主函数调用的回调函数。但回调函数的用法依据回调函数是否是全局函数还是一个类中的函数是有区别的。比如 PHP 的preg_replace_callback — 用回调函数执行正则表达式的搜索和替换函数可以接受一个回调函数,我们来看这种区别。
如果是全局的回调函数,那容易,只要写上函数名作为字符串的形式传入就行的,看:1/**@author Unmi*/ 2function inverse($matches) { 3 return $matches[2].":".$matches[1]; 4} 5 6$text = preg_replace_callback ("/(\d{7}):(.+)/", 'inverse' , '1125535:fantasia@sina.com'); 7echo $text; //Output result: fantasia@sina.com:1125535
而如果 preg_replace_callback 函数是在类成员函数中被调用,同时 inverse 回调函数也是该类的成员函数,写法就不一样了。要是仍然写成下面这种方式的话: Read More - 不管是防小人也好,还是防君子手误也罢,很多地方都需要用到图片验证码来加强安全性。在 PHP 站点上我选择了 Captcha,用起来很简单的。
Captcha 从 http://www.captcha.ru/en/kcaptcha/ 下站,当前版本是 KCAPTCHA 1.2.6。
下载后,解压后,可以看到它自己带了例子,就是 index.php 用来产生图片,form_example.php 中引入了图片, 只是 <img src="./?<?php echo session_name()?>=<?php echo session_id()?>"> 的写法有点不好理解,要是写成 <img src="index.php/?<?php echo session_name()?>=<?php echo session_id()?>"> 就好看多了,至少知道 index.php 的内容是个图片。 Read More - PHP 本身没有多线程的东西,但可以曲线的办法来造就出同样的效果,比如多进程的方式来达到异步调用,只限于命令模式。还有一种更简单的方式,可用于 Web 程序中,那就是用 fsockopen()、fputs() 来请求一个 URL 而无需等待返回,如果你在那个被请求的页面中做些事情就相当于异步了。
关键代码如下:1$fp=fsockopen('localhost',80,&$errno,&$errstr,5); 2if(!$fp){ 3 echo "$errstr ($errno)<br />\n"; 4} 5fputs($fp,"GET another_page.php?flag=1\r\n"); 6fclose($fp);
上面的代码向页面 another_page.php 发送完请求就不管了,用不着等待请求页面的响应数据,利用这一点就可以在被请求的页面 another_page.php 中异步的做些事情了。 Read More - 作者:HonestQiao如果在你实际的应用之中,你确实需要高速数据更新的操作,那么我们认为你已经具备以下先决条件:
能够按照实际应用的需要而调整服务器
关于这句话,大家自己可以明白意思的,不明白的自己想一想,如果没有达到这个要求,你是否有必要高速数据更新的操作, 或者先看看最后的附加说明.先见的参考文档:
1. http://w.yi.org/ftp/FAPM/PHP/php_manual_zh/ref.shmop.html
说明: PHP功能, 共享内存功能函数, 此处用于PHP直接操作内存, 提供高速数据操作
开启: 编译PHP的时候,加上参数: -enable-shmop
附注: 这个准备工作, 非常简单 Read More启用php的共享内存:
1).windows下,php.ini中取消 ;extension=php_shmop.dll 这行的行首分号,加载shmop扩展。
2) .linux/unix下,重新编译php,加入--enable--shmop 选项。
Shared Memory 的函数解释如下:- shmop_close — Close shared memory block
- shmop_delete — Delete shared memory block
- shmop_open — Create or open shared memory block
- shmop_read — Read data from shared memory block
- shmop_size — Get size of shared memory block
- shmop_write — Write data into shared memory block Read More
MVC 模式在 Java 中表现的尤为出众,不光 Swing 是按照 MVC 来设计的,而且 Java 的 Web 框架也是 MVC1、MVC2 的。MVC 模式对于开发维护确有许多好处,所以 PHP 的框架,如 Zend、Symfony,PHP 的产品 Wordpress 和 Joomla 都应用了 MVC 模式。PHP 不像 Servlet 那样有成熟的规范,如 web.xml、servlet、filter 等,但变换着一些把式同样能实现出优雅的 MVC 模式。这里简单介绍一下 PHP 是如何实现 MVC 模式,参照了了 Zend 的实现,我觉得还有许多改进的地方。说明的时候会拿它的各部分与 Struts1 的 MVC 相比较。
在 HTTP 环境中的 MVC 模式一句话描述就是:控制器根据 URI,把请求转给相应的 Action,由 Action 调用模型方法处理或得到数据,再选择相应的视图呈现界面。用过 Struts1 的请保留一些 Struts1 的实现原理,现在来看 PHP 的实现方式。
Read More