关于IIS6下PHP使用header设置404但实际返回200的坑

起因是发现wordpress所有该404的地方全部返回的是200,记得以前处理过一次,但服务器重新配置后又这样了,也忘了当时怎么修好的。

然后发现,自己写一个php文件用header(‘HTTP/1.1 404 Not Found’)也是无效的,经过几小时测试,偶然发现header(‘Status: 404 Not Found’)是有效的。

进一步偶然发现php.ini中的cgi.rfc2616_headers被改为了1,而默认值是0。这个值是1的话php会发送HTTP/1.1这样的文字来设置状态。显然,iis6+fastcgi并不能很好的支持。

然而为什么会手贱改为1呢,再[……]

Read more

Win10 Pros and Cons compare with Win7

Pros:
Metro应用,比如bilibili客户端(然而版本很老了)。
无需自己装驱动
自带输入法
系统永远最新,不用win7那样积累5年更新,节省空间
新compact用于系统压缩(!)
重置系统(不过效果一般,不像ios等unix直接擦除data分区那么快)
ISO直接mount

Cons:

开始菜单虽然有了分组,但排序上还是没有以前那么方便找,能pin在菜单的只有磁贴。
厂商需要兼容win7,宁愿自写dui也不愿用uwp。连TX都放弃了UWP的开发。
微软不安装.net 3.5、.NET Native不兼容旧版等简直作大死。
没有经典主题,必须开启dwm(!)
输入法大坑,win[……]

Read more

ExpressCache OEM Patch v2.0

按照zts9989同学的提示再次进行分析,果然发现1.3.110以上版本存在文件校验的暗桩,故更换破解方式。

此次补丁使用了特征码定位,所以理论上可以兼容多个版本,但是能兼容多少我也不知道。个人环境win10x64 118版本、win7x64 86版本测试通过。别的版本也欢迎各位观众帮忙测试,如有问题可在下面讨论。

用法:停止ExpressCache服务后应用此补丁。

下载地址:ECPatch.7z,解压密码仍然为本站域名。

Known issues:
1、win7 x64只能装110版本。这是因为win7及以前的系统只认sha1签名,而之后的系统都是sha256签名[……]

Read more

西数硬盘调整APM避免停转

跟daddy置换电脑时购买了西数WD10JPVX笔记本硬盘作为移动硬盘,结果该硬盘有个坑爹的设定,就是每当空闲十几秒就直接停转了,再次启动时系统就会卡个两秒钟。可能西数没去考虑将此硬盘作为从盘或移动硬盘使用。

搜索到了“C1门”,试着用wdidle3修改,表示对C1(磁头归位)也许有效,但对停转(04)没有效果。

继续搜索得知这是APM(高级电源管理)的问题,此型号APM默认值为0x60,比较流行的解决方法是安装CrystalDiskInfo,将APM关闭或者设为0x80。但由于硬盘断电后该设置会复位,所以需要将CrystalDiskInfo设为开机启动。

为了一个破硬盘要装[……]

Read more

小工具:Everybackup

五年前的这个时候(2010年12月7号),某人本着天下无贼的思想把电脑带去了演出礼堂,用实际行动证明了天下无贼是不成立的(那个时候世界上还没有nozuonodie这个词)。损失包括并不仅限于一年的和某人的聊天记录,导致这段时间由于后来的强行删除记忆而永远成了断片;以及正在开发的约万行LibCHD及相关项目,导致本人月流水万元的游戏辅助工作室直接倒闭。

在此之后,关于如何备份代码(或者别的重要文件)的问题一直很困扰,直接打包会有一堆无用的文件(比如Debug/Release目录、IntelliSense数据库),浪费时间和空间。

后来发现WinRAR、7zip可以写通配符的文件列表,[……]

Read more

ATL/WTL黑科技

1、真正的按需编译

一般来说我们提到“类库”概念的概念马上就想到DLL,也就是运行时类库。这样写框架的话框架有多少代码DLL就有多大。据实验最新的MFC的程序只需要一个空的对话框,静态编译出来EXE大小就有1M。

而C++模板技术几乎相当于宏替换,代码的实现都直接写在头文件里,并且只有在真正调用时才会编译。这样使得ATL对SDK的封装是在源代码级别的,相当于用到什么才去拉一段代码贴上去。没有MFC那样庞大的设计结构,耦合性很低,编译出的代码也就很精练了。

2、编译期多态

和上面类似,使用C++模板可以实现编译期间基类对子类成员随便直接访问,而无需通过运行时虚函数,这在通[……]

Read more

生日悖论与Hash需要位数

m个数字随机选取n次,各不相同的概率P=((m-1)/m)^(n*(n-1)/2)

m、n很大时取最高次项公式近似为P=((m-1)/m)^(n^2/2)

lim(m->+…)((m-1)/m)^m=1/e

有P=(1/e)^(n^2/2/m)

n=(log(1/e)(P)*2*m)^(1/2)

当P=0.5时,代入上式n=(1.386*m)^(1/2)=1.177*m^(1/2)

在生日悖论原题中,m=365,得n=22.49,即班上有23人时生日出现重复的概率就超过0.5了(虽然是近似计算,但这个误差已经很小了)。

选取hash的话,考虑[……]

Read more

破解Win2003标准版IAS Radius服务器客户端IP数限制

Win2003的Internet Authentication Service(IAS)服务是基于Windows Server平台的自带RADIUS服务端,结合Active Directory用于VPN拨入、无线802.1x接入等非常方便。

IAS要求必须指定来源客户端IP地址,查询帮助知可以填写192.168.0.0/24这样的子网地址以实现IP段,但填写后提示只有企业版才支持此功能。

因为没钱买企业版(好吧,其实是某云提供的企业版2003只有64位版,博主的1G内存小主机没必要因为这一个功能去换64位而损失各种兼容性),考虑进行破解。因为是系统Network Servi[……]

Read more

PHP小轮子计划

因为“PHP是世界上最好的语言”,所以大凡尝试过用原生PHP写网页的同学都会被要裸写一堆重复代码恶心到,不想恶心稍微偷懒一点的话又会被黑客分分钟sql注入之类的。

用框架是个好的选择,然而意味着学习成本提高、语言灵活性降低、程序执行效率降低。比如我显然没必要做去学习Zend然后给工作室写一个简单的学生管理系统这样大炮打蚊子的事。轻量级的框架固然也有,比如CI我就很喜欢,但也有着把简单问题复杂化以及某些功能用着不顺手的问题。有能力让框架比原生更简单的我觉得只有微软帝国,比如COM和.NET,设计上几乎找不到缺点。

于是萌生自己造个框架的想法。这个框架应该具有以下的特点:

框架应[……]

Read more

ELAN触控板改手写板实验

原理:逆向了ETDDeviceInformation.exe中取内核原始PS2数据并计算出多点触摸坐标的部分,然后使用Microsoft.Ink墨迹库来做文字识别。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;

namespace InkTest
{
class ETD
{
[DllIm[……]

Read more