还有其他模块类型。 有关完整参考,请参阅 Roxen 1.3 程序员指南,网址为 http://caudium.info/。
有关如何编写容器的示例,请参阅fnord.pike在/Caudium/sources中。 因为位置模块是必须的,所以这里有另一个例子
例 6-6. 一个示例模块。
// It is intended to show a simple example of a location module. // This module output the result of the who(1) command. It is not meant to // be really useful since it would be better to do a <who /> tag thus // having data in the HTML files and code here // This variable is shown in the configuration interface as the // version of the module. string CVS_version = "$Id"; // Tell Caudium that this module is 'thread safe', that is, there is no // request-specific data in global variables. int thread_safe=1; #include <module.h> inherit "module"; // for the http_string_answer API inherit "caudiumlib"; // Documentation: constant module_type = MODULE_LOCATION; constant module_name = "Who"; constant module_doc = "Send the result of the who(1) command "; constant module_unique = 1; // The constructor of this module. // This function is called each time you/Caudium load the module void create() { defvar("location", "/who", "Mount point", TYPE_LOCATION, "The mount point of this module"); /* each string have to be on a single line, don't do: "The mount point of this module". You can however do "The mount point of " "this module"; */ defvar("path2who", "/usr/bin/who", "Path to the who command", TYPE_FILE); defvar("options2who", "-a", "Options given to who", TYPE_STRING); defvar("codebeforewho", "<html><body><p>", "The code to output before who", TYPE_STRING); defvar("codeafterwho", "</p></body></html>", "The code to output after who", TYPE_STRING); } // This function is called when a user access mount point // path is the path to the URL he used // id contains Caudium global variables such as browser name,... mixed find_file(string path, object id) { // get the contents of the CIF. variables path2who and options2who // and put a single space between it. string command = QUERY(path2who)+" "+QUERY(options2who); // this will write the result of command to the debug log file // very useful for debug write(sprintf("command=%s\n", command)); string result = Process.popen(command); // replacing \n by \n<br /> for better output result = replace(result, "\n","\n<br />"); return http_string_answer(QUERY(codebeforewho)+result+QUERY(codeafterwho)); } |
返回到主虚拟服务器标签,然后选择你的一个服务器。 执行添加模块并选择who模块。 如果你没有 who 模块,请检查你的事件日志。