Apache忽略了一些C ++生成的SSI输出?

时间:2013-10-26 21:09:36

标签: apache sqlite ssi

执行摘要:Apache默默地无法通过SSI包含,其中包含的HTML由与SQLite和/或pthreads链接的C ++程序生成。 SSI包含在C ++不使用SQLite时工作。

更长的版本:我有两个非常相似的C ++程序,它们产生SSI虚拟包含所需的输出。两者都为HTML select生成了大约100个选项的列表。其中一个包含按预期工作,但另一个无效。

  1. 两个程序(独立运行时)在stdout上产生完全相同的输出,什么都没有 在stderr。因此,原则上,就Apache而言,它们应该表现相同,但它们不会。
  2. 有效的程序(版本A)是简单的独立C ++代码,它使用STL生成一个字符串,写入cout;没问题。
  3. 失败的程序(版本B)稍微复杂一些。这是混合的 C和C ++,包括一个嵌入式SQLite 数据库,通过C API与它交谈。 SQLite也使用pthreads。
  4. 版本B在链接到静态和动态SQLite代码时都会失败。静态和动态版本都依赖于pthreads共享库。
  5. Apache在运行版本B时不会在错误日志中生成任何内容,但它也不会将任何内容替换为HTML select。我可以轻松地让Apache生产 错误消息(通过在HTML中指定错误的可执行文件名称) 例如#include所以我很确定Apache会这样做 实际上至少尝试执行该程序。
  6. AB都是valgrind-clean。
  7. Apache 2.2.16,Ubuntu 10.10,prefork MPM
  8. 我无法从ScriptLog中获得任何输出,因此我可能错误地设置了它。我已将LogLevel设置为debug,但它仍然没有告诉我有关脚本执行的任何信息。
  9. 有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

嗯,这太刺激了。数据库是cgi-bin目录中的符号链接,指向其他地方。 apache用户对指向位置的最后一个目录没有搜索权限。如果我su编辑给Apache用户,然后手动运行CGI程序,则会返回400错误消息。但是,即使将error.log设置为LogLevel,也无法访问Apache debug,并且我无法获得任何ScriptLog输出,并且firebug不会在网络标签中显示任何内容。当我更改目录权限时,一切正常。