Apache标准输出流

3

在我的cpp文件中,我正在向std::cout标准输出流打印一些调试消息。当我使用这个文件并通过Apache服务器运行可执行文件时,调试消息会被打印到哪里?我没有看到它们被打印在/var/lib/httpd/error_log中。

提前致谢。


使用Apache服务器运行可执行文件,您将可执行文件作为CGI程序运行? - Kijewski
1
你可能想要查看Cgicc库来完成这个项目。另外,作为一个快速测试,你可以尝试将C++代码中的消息写入文件(该文件具有所需的权限),以便查看它是否实际执行。 - Mihai Todor
@MihaiTodor 我尝试将输出写入文件。这种方式可行。我正在使用我的Cpp可执行文件在Apache中运行的脚本。 - PMat
1个回答

3
如果您正在制作CGI脚本,那么使用Apache Web服务器运行C++程序的唯一原因是这个。
请查看链接:http://en.wikipedia.org/wiki/Common_Gateway_Interface 此处的过程是,Web服务器Apache运行您的程序,并将输出(std::cout)用作页面源。
页面源可以是HTML或纯文本。唯一的问题是服务器不知道,所以您需要在输出开头提供一个小提示。这称为标题。
如果要输出HTML,则必须打印:
Content-type: text/html
然后跟着两个换行符。
或者,如果您希望Web服务器将数据解释为纯文本,则必须最初打印
Content-type: text/plain
也跟着两个换行符。
例如,一个应该工作的C++程序可能如下所示:
#include <iostream>

int main()
{
  //output header, then one newline, then another, paired with a flush.
  std::cout << "Content-type: text/plain\n" << std::endl;
  //now your output
  //calculation...
  std::cout << "Hello World" << std::endl;
  return 0;
}

任何网络服务器参数都可以通过一些预设的环境变量进行查询。请参阅我提供的维基百科文章。
编辑: 抱歉,Content-type: text/htmlContent-type: text/plain 是正确的,但是我之前说需要一个新行是错误的。我错了,他们需要两个新行。
如果这是您第一次看到这篇文章,那就不用担心。

我猜标准输出可以从perl运行程序时访问,或者非常可能是perl或apache Web服务器将输出重定向到/dev/null或其他地方。我建议编辑问题,声明你正在使用perl,因为从你的问题来看,我以为你是在一般情况下有c++的问题。这里的问题在于你的perl代码,而不是服务器或可执行文件。 - user451498

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接