apache 链接包含”%2F”导致mod_rewrite失效的解决方法

没有评论

2013 年 12 月 29 日 at 下午 4:46分类:PHP

最近碰到url中带有%2f导致url重写出错 apache 报404错误的情况,找了很多资料才发现,这个问题是由apache引起。原来 Apache 有一个配置项”AllowEncodedSlashes“, 默认是”Off”, 也就是不允许请求路径(上例是 /tag/Unix%2FLinux)中包含编码后的斜杠’/’(在某些平台是反斜杠’\’).
apache在最近的版本中会在url重写模块启用之前把%2f转化为/,所以url导致了重写后跳转到错误的不存在的页面上。

下面是我使用这个参数的配置文件(httpd-vhosts.conf)里面的内容:


ServerAdmin fbbin@foxmail.com
DocumentRoot “/usr/local/apache/www/”
AllowEncodedSlashes NoDecode
ServerName www.test.com
ServerAlias www.test.com
ErrorLog “test-error_log”
CustomLog “test-access_log” common

用PHP去除重复图片文件

没有评论

2013 年 12 月 29 日 at 下午 4:15分类:PHP

因为整理图标, 所以需要去除重复图片的功能. 通过md5来判断是否重复. 最开始, 我用md5sum工具求md5, 然后再用PHP读取结果去重. 后来一想, 为什么不完全用PHP来做呢? 可以节省大量进程开销. 简单几行代码, 就实现了这个功能.

文件数: 80510, 大小: 452,496,873 字节

只查找不删除的速度:
第一次耗时: 122s
第二次耗时: 44s
第三次耗时: 44s

在查找多次之后, 立即查找并删除的速度:
耗时: 83秒, 删除了54406个文件

<?php
exec("find . -type f", $lines);

$arr = array();
$del = array();

$n = 0;
foreach($lines as $line){
	$line = trim($line);
	if(!$line){
		continue;
	}
	$n ++;
	$md5 = md5_file($line);

	if(isset($arr[$md5])){
		$del[] = $line;
		//echo "$n del $line\n";
		unlink("{$line}");
	}else{
		$arr[$md5] = 1;
	}
}

echo "del " . count($del) . " files\n";
//echo join("\n", $del);