Apache 配置文件:
<VirtualHost www.hwx.com>
SetEnv VHOST customers
SetEnv LD_LIBRARY_PATH /lib:/usr/lib:/usr/local/lib
SetEnv HOME test_home
SetEnv FUCK /lib:/usr/lib:/usr/local/lib
ServerAdmin root@localhost
DocumentRoot /var/www/html/www.hwx.com
ServerName www.hwx.com
ErrorLog logs/www.hwx.com-error_log
CustomLog logs/www.hwx.com-access_log common
</VirtualHost>
C++ CGI 程序:
/*
* test.cpp
*
* Created on: Jul 12, 2013
* Author: hwx
*/
#include <iostream>
#include <stdlib.h>
using namespace std;
#define ENV_NR 5
const string ENV[ ENV_NR ] = {
"SERVER_SIGNATURE","LD_LIBRARY_PATH","VHOST","HOME","FUCK" };
/*
* "SERVER_SIGNATURE" 为 CGI 内置环境变量
* "LD_LIBRARY_PATH","VHOST","HOME","FUCK" 为 在 Apache 的配置文件中
* 用 "SetEnv" 指令增加的环境变量,但是 "LD_LIBRARY_PATH" 不能成功获取(见输出)
*/
int main ()
{
cout << "Content-type:text/html\r\n\r\n";
cout << "<html>\n";
cout << "<head>\n";
cout << "<title>CGI Envrionment Variables</title>\n";
cout << "</head>\n";
cout << "<body>\n";
cout << "<table border = \"0\" cellspacing = \"2\">";
for ( int i = 0; i < ENV_NR; i++ )
{
cout << "<tr><td>" << ENV[ i ] << "</td><td>";
// attempt to retrieve value of environment variable
char *value = getenv( ENV[ i ].c_str() );
if ( value != 0 )
{
cout << value;
}
else
{
cout << "Environment variable does not exist.";
}
cout << "</td></tr>\n";
}
cout << "</table>\n";
cout << "</body>\n";
cout << "</html>\n";
return 0;
}
页面输出:
SERVER_SIGNATURE Apache/2.2.15 (CentOS) Server at www.hwx.com Port 80
LD_LIBRARY_PATH Environment variable does not exist.
VHOST customers
HOME test_home
FUCK /lib:/usr/lib:/usr/local/lib
LD_LIBRARY_PATH 为什么不能成功获取,笔者还没找到答案...