Press "Enter" to skip to content

页面乱码问题根源浅析

这个问题已经遇到过俩次了,就是页面中明确指明了编码是UTF8,但是显示是乱码。
虽然知道解决方法,也知道是Apache的原因,但是一直没有去找其所以然,今天趁机,就研究了一下。
首先, 关闭PHP配置文件php.ini中的default_charset:
1. 页面没有指定charset , Apache配置defaultcharst gbk , 页面文件编码是utf-8.....

Filed in PHP应用
with 9 Comments

使用fscok实现异步调用PHP

Web 服务器执行一个脚本,可能几毫秒就完成,也可能几分钟都完不成。如果程序执行缓慢,用户可能没有耐心等下去,就关闭浏览器了。
而有的时候,我们更本不关心这些耗时的脚本的执行结果,但却还要等他执行完返回,才能继续下一步。
那么有没有什么办法,只是简单的触发调用这些耗时的脚本然后就继续下一步,让这些耗时的脚本在服务端慢慢执行?
接下来,我将使用fscokopen来实现这一功能。

Filed in PHP应用
with 36 Comments

PHP实现异步调用方法研究

浏览器和服务器之间是通过 HTTP 协议进行连接通讯的。这是一种基于请求和响应模型的协议。浏览器通过 URL 向服务器发起请求,Web 服务器接收到请求,执行一段程序,然后做出响应,发送相应的html代码给客户端。 这就有了一个问题,Web 服务器执行一段程序,可能几毫秒就完成,也可能几分钟都完不成。如果程序执行缓慢,用户可能没有耐心等下去,就关闭浏览器了。 而有的时候,我们更本不关心这些耗时的脚本的返回结果,但却还要等他执行完返回,才能继续下一步。 那么有没有什么办法,只是简单的触发调用这些耗时的脚本然后就继续下一步,让这些耗时的脚本在服务端慢慢执行? 经过试验,总结出来几种方法,和大家share: 1. 最简单的办法,就是在返回给客户端的HTML代码中,嵌入AJAX调用,或者,嵌入一个img标签,src指向要执行的耗时脚本。 这种方法最简单,也最快。服务器端不用做任何的调用。 但是缺点是,一般来说Ajax都应该在onLoad以后触发,也就是说,用户点开页面后,就关闭,那就不会触发我们的后台脚本了。 而使用img标签的话,这种方式不能称为严格意义上的异步执行。用户浏览器会长时间等待php脚本的执行完成,也就是用户浏览器的状态栏一直显示还在load。 当然,还可以使用其他的类似原理的方法,比如script标签等等。 2. popen() resource popen ( string command, string…

Filed in PHP应用
with 47 Comments

使用C++编写Apache的模块 -- 命令表,保存配置信息

还是和论文相关,要编写一个Apache的模块,挂在post read_request阶段,在第一时间,判断一个链接是否是而已连接请求,并在第一时间拒绝恶意连接请求。
首先遇到的第一个问题,就是需要从http.conf中读取配置信息,提供俩个配置指令,MaxNumber, TimeRange.指定在一段时间内的连接次数上限。
编写的时候,遇到的第一个问题就是,moudule申明,不能通过编译,编译器提示重复定义。查了N遍手边的apache源码分析,也没有找到原因,如: ........

Filed in Linux/Unix, PHP Extension
with 8 Comments

由signal想到的

signal(int sig, void(*func)(int))是信号注册函数。它可以定制对于特定的信号(sig)的处理函数。
昨天偶然看到他的申明式的时候,把我搞的有点糊涂
#include
void(*signal(int signo, void(*func)(int)))(int);
仔细理解了半天,终于搞清楚了它的定义式,也解开了我长期以来的一个误区:
1. void(*func)(int):
定义了一个函数指针,他的类型是,指向一个返回是void,参数的int的函数类型的指针,就好像 int i, 定义了一个可以存储int型的变量的i。
2. 由上,signal的定义可以如下解释。
signal(int signo, void(*func)(int));
定义了,signal函数接受俩个参数一个是int signo,一个是一个回调的函数指针。
void(* signal(....))(int);
定义了,signal的返回类型是一个函数指针,指向一个返回空的,接受一个整形参数(信号值)的函数;
这么解释,就好多了,再看看简化的定义式,就更明白了(Plauger 1992):
typedef void sigfunc(int);
sigfunc *signal(int, sigfunc *);
由此,我结合fork进行了一番试验, 来验证,子进程是否继承父进程的信号处理函数......

Filed in PHP Extension
Comments closed

在PHP Module中获取$_GET/$_POST/$_COOKIE的方法研究

  最近在做一个PHP的安全模块,其中要在Module的函数中获取用户的Cookie,从而生成签名;今天找遍Baidu/Google,一点相关资料都 没有,不得已,只好给yahoo PHP dev mail list发了求救信。后来,偶然在Google上看到了一个变量 http_globals ,眼前一亮,虽然没有详细资料,但经过一顿试,N次Segmentation fault以后,终于成功!

Filed in PHP Extension, PHP应用, PHP源码分析
with 18 Comments

关于调用约定(cdecl、fastcall、stcall、thiscall) 的一点知识

当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个、什么样的参数。即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。
函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算。函数计算结束以后,或者调用者、或者函数本身修改堆栈,使堆栈恢复原装。在参数传递中,有两个很重要的问题必须得到明确说明:
1) 当参数个数多于一个时,按照什么顺序把参数压入堆栈;
2) 函数调用后,由谁来把堆栈恢复原装。
3)函数的返回值放在什么地方

Filed in GNU C/C++, 转载, 随笔
with 3 Comments