分类目录归档:PHP

让nginx支持pathinfo

nginx的高性能优势明显,自己又很喜欢pathinfo类型的url。
apache下mod_rewirte有很好的实现,nginx就捉鸡了。
网上有一些中文的文章教你怎么配置nginx来支持pathinfo(当然很多是互相抄袭的)
英文的相对少很多

这里贴下我的配置:

首先是location / 的块里面,对于不存在的请求文件名,全部转发给index.php,这样便不在404

location / {
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php$1 last;
        break;
    }
}

此外,还需要几行字来把pathinfo提取出来,写在location ~ \.php$ 块里面,注意为了支持pathinfo
这个块匹配的正则需要改为 location ~ \.php($|/)   ,这是正则相关知识自行查阅

location ~ \.php($|/) {
    set $script $uri;
    set $path_info "";
    if ($uri ~ "^(.+\.php)(/.+)") {
        set $script $1;
        set $path_info $2;
    }

    root R:\\;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $path_info;
    fastcgi_param SCRIPT_NAME $script;
    include fastcgi_params;
}

看到root设置你知道这个是windows上面的配置,没错就是我本机的设置,R盘不用惊讶,那是内存盘,只是配置了ide里面的自动上传,方便调试。下面给出这个配置过后的相关的$_SERVER信息。
输出显示pathinfo信息被附加到好多个变量里面,有点乱,其实主要参考是request_uri和path_info,去别在于前者带有queryString参数,后者没有

["DOCUMENT_URI"]=>
string(16) "/index.php/1/2/3"
["REQUEST_URI"]=>
string(6) "/1/2/3"
["SCRIPT_NAME"]=>
string(16) "/index.php/1/2/3"
["PATH_INFO"]=>
string(6) "/1/2/3"
["SCRIPT_FILENAME"]=>
string(13) "R:\/index.php"

天天动听安卓版皮肤解包工具云端版

这次发布的是天天动听安卓版皮肤解包工具的云端版,部署于新浪云计算。

继续开源,代码丑陋还望指正。传送门index.php

上传皮肤文件,云端完成解包和zip重打包,弹出下载。

这次的coding让我学习了两个很好用的php函数,pack和unpack,用于操作二进制字符串到变量之间的互转。

同时做这个东西也让我见识到一个PclZip的类库,在php没有zip支持下直接实现zip包操作(代码很长,5k行)。

=======================题外==========================

之前发过这个东西 天天动听安卓版皮肤打包工具分析+自制解包工具放出,当时这个工具是用易语言写的,易语言做的程序误杀报毒的问题,不是一天两天了。易语言作为国人开发的一款中文编程语言,我是挺支持的,挺喜欢的,也算是用了几年,写写小工具之类的小开发效率很高。

由于报毒和其他各种原因,易语言杯具的说,一直告诉自己不能依赖工具,特别是易语言。一开始我发现天天皮肤打包工具(官方放出的)很小(6KB),是C#弄的吧。于是我也想用C#反过来写一个解包工具,不过……我还没学过C#,上学期末选课的时候C#和Java二选一,我毫不犹豫选了Java。而C#的代码,我只是能看懂一些,会查手册,就这水平。(ps:有一天建阳篮球场旧书义卖三折,我逛了计算机类的,发现厚的就只有一本C#3.0自学宝典,原价68,有光盘还很新,我就花了20块买下来了,不过一直没翻过,我现在和可预见的将来我都觉得没必要翻)

vs2010早早装在了我的电脑,很大很大,安装的光盘镜像就2.5G,一直没用它来做过什么项目,倒是用它来看过很多别人的小项目。后来习惯了notepad++之后,这种文本类的代码文件我一般都用notepad++打开和编辑(有时也会淡定的直接用记事本)。那天在易语言实现了解包函数过后,想尝试用C#来做,一开始感觉还很不错的,自动完成和代码提示感觉很好。自动完成就连句中的空格字符都帮你调好了,而代码提示直接很方便的看到一个对象支持哪些操作。我那天就经常是在对象名之后按下.然后慢慢翻看代码提示的列表,找出适合用的函数。不过可能是因为不熟悉吧,后来我放弃了,疼痛点是类型转换问题,甚是纠结。

今天在用php写这个代码的时候,感觉php弱类型爽多了,而且php里面二进制资源可以很安全的放在一个字符串里面进行操作,这点是我之前不知道的(php嘛,我也没怎么学过,看过一点书,维护过一些代码)。很灵活很灵活,配合pack和unpack两个函数可以从二进制字符串中获取和转换内容,也可以生成二进制资源进行进一步处理(如联系文件、其他持久化存储)

 

监控linux服务器内存和运行时间的小作

话说阿黎的vps最近稍有不稳定现象,体现是服务器重启。

而且不是因为我这个vps自身配置问题,而是vps所在主机的重启。

阿黎小小的用php写了一个获取系统启动时间(运行时间)和内存占用的程序。

代码应该说比较丑陋,欢迎大家指出,阿黎在php方面只能说略懂,要经常翻手册。

 0)
		{
			$_ret = $_ret . $days . ' 天 ';
			$_upTime %= 24 * 60 * 60;
		}
		if (($hours = intval($_upTime / (60 * 60))) > 0)
		{
			$_ret = $_ret . $hours . ' 小时 ';
			$_upTime %= 60 * 60;
		}
		if (($minutes = intval($_upTime / 60)) > 0)
		{
			$_ret = $_ret . $minutes . ' 分钟 ';
			$_upTime %= 60;
		}

		return $_ret;
	}
	function getBootTimeStr()
	{
		//return getBootTime();
		return date('Y年n月j日 G:i:s', getBootTime());
	}
	function getMemUsePer()
	{
		$tMeminfo = file_get_contents('/proc/meminfo'); //linux
		$bufe = preg_split("/n/", $tMeminfo, 3, PREG_SPLIT_NO_EMPTY);
            foreach ($bufe as $buf) {
                if (preg_match('/^MemTotal:s+(.*)s*kB/i', $buf, $ar_buf)) {
                    $MemTotal = $ar_buf[1];
                } elseif (preg_match('/^MemFree:s+(.*)s*kB/i', $buf, $ar_buf)) {
                    $MemFree = $ar_buf[1];
                }
            }
		return 1 - $MemFree / $MemTotal;
	}
	
?>




服务器信息



运行时间:
启动时间:
内存使用率:%