【问题标题】:Running an Apache Module before PHP在 PHP 之前运行 Apache 模块
【发布时间】:2012-08-15 23:49:13
【问题描述】:

我一直在开发一个 Apache 模块,我需要它在 PHP 之前运行。

我尝试使用以下方法注册处理函数:

// Hook the main handler function to run before PHP5
static const char * const aszPos[]={ "mod_php5.c", NULL };
ap_hook_handler(cc_handler, NULL, aszPos, APR_HOOK_FIRST);

...但是页面仍然带有未解析的“<?php ?>”标签。

我想知道这是否是一个钩子问题,或者 PHP 是否没有解析它,因为它无法将其识别为 PHP url,但我尝试将其称为:

localhost/authCC/?url=http://www.google.pt/&req=name,nic,photo,TaxNo&token=12345

...虽然在“mods-available/php5.conf”上有正确的“LocationMatch”指令,但它仍然无法解析。

还有其他建议吗?

【问题讨论】:

    标签: php apache apache-modules


    【解决方案1】:

    假设您使用的是 2.4 - 您的 C 代码看起来不错(您使用 mod_heartbeat 作为示例?)。我怀疑PHP不会以某种方式触发,因为它认为没有理由。如果您删除模块 - 它会按您的预期启动吗?关于什么(MIME、扩展名、位置?)。而且你的模块确实被运行了(ap_log 是你的朋友)并且它不会改变/取消 mod_php 依赖的东西(例如 mime 类型)来触发?

    Dw.

    【讨论】:

    • 我的模块确实会运行,因为它通过“ap_rputs”调用生成页面本身。我做了一个 'ap_set_content_type(r, "text/html;charset=utf-8");'调用,并且我检查了“php5.conf”对于所有“.php”文件都有一个“SetHandler application/x-httpd-php-source”指令。也许这就是方式,但我应该在哪里设置呢?在“r-handler”字段上?
    • 不 - 它是一种 MIME 类型(尽管很有趣)。所以它出现在(mime)标题中。
    • 好吧,我决定使用 'ap_set_content_type()' 函数来设置它,但它不起作用。在修改了配置文件之后,我得出的结论是 PHP 实际上并没有在运行,因为它只是将自己设置为“.php”文件的处理程序。但是,当我添加配置指令时,它拒绝翻译我在响应中发送的 PHP 代码,我认为这是因为 PHP 现在在模块本身之前运行,因为它没有记录任何内容。我现在该怎么办?研究输入过滤器是否明智? (我使用 'ap_rputs()' 调用来输出我的页面)
    • 我遇到了同样的问题。你终于找到解决办法了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 2018-06-25
    • 1970-01-01
    • 2011-01-22
    • 2011-11-25
    • 2013-01-31
    • 1970-01-01
    相关资源
    最近更新 更多