归档 2010年5月14日

最后更新于 .

今天尝试了一下搭建python+apache的环境,记录在这里,希望对大家有用. 一.安装apache(apache2.2.15) 到 http://httpd.apache.org 下载最新的apache源码,解压后进入目录: 我想把apache安装到/home/dantezhu/apache下,所以执行如下命令 执行:

./configure --prefix=/home/dantezhu/apache --enable-track-vars --enable-cgi --with-config-file-path=/opt/apache/conf --enable-modules=all --enable-mods-shared=all --enable-file-cache --enable-disk-cache --enable-cache --enable-mem-cache --enable-dumpio --enable-logio --enable-mime-magic --enable-headers --enable-usertrack --enable-version --enable-ssl --enable-http --enable-rewrite --enable-proxy --enable-proxy-connect --enable-proxy-http --enable-proxy-ftp --enable-proxy-ajp ...

最后更新于 .

这几天在做的一个系统中,需要给指定的用户发送email,由于对方只提供了可执行程序,所以需要在CGI中调用。

虽然之前就知道可以通过system()或者popen()来实现,但是在真正用在CGI场景中的时候还是吃了不少苦头。

先来看一下system(),函数声明如下:

int system(const char *command);

入参就是需要执行的命令,函数会返回成功或者失败。
这个函数有两个问题:
1.函数调用的时候会fork进程,对于有些webserver是禁止fork的。(我一开始在CGI调用全是返回-1,即fork失败)
2.命令执行时,如果有向标准输出打印,不会被重定向。即,在CGI中使用的杯具就是,会直接将打印信息返回给浏览器

对于第二条,假设我直接将输出重定向的结果会怎样呢,比如执行命令"ps -ef > x",实际上,在apache中执行的话,apache还是一样能拿到输出。由于我是在http header之前输出,所以报了这样的错误。

1
目前我的解决办法是用popen,函数声明如下:

FILE *popen(const char *command, const char *type);

用popen("mailsend dantezhu" ...

昨天

2010年5月11日

明天

2010年5月16日

归档