Keep Server Online
If you find the Apache Lounge, the downloads and overall help useful, please express your satisfaction with a donation.
or
A donation makes a contribution towards the costs, the time and effort that's going in this site and building.
Thank You! Steffen
Your donations will help to keep this site alive and well, and continuing building binaries. Apache Lounge is not sponsored.
| |
|
Topic: How to make sure the my module run before the php module? |
|
Author |
|
jikker
Joined: 14 Jan 2013 Posts: 1 Location: Taiwan
|
Posted: Wed 23 Jan '13 8:43 Post subject: How to make sure the my module run before the php module? |
|
|
Hi, everyone
I want ask an apache module question , hope somebody can help me, please.
I write the apache input filter module,
I want it log apache process pid and run before the php module,
but it always run after php,
I load apache module after the php module in http.conf, like
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
LoadModule first_filter_module /usr/lib/apache2/modules/mod_first_filter.so
AddInputFilter PidFilter .php
I try modify ap_hook_insert_filter function nOrder variable to APR_HOOK_FIRST, but it not work,
then I try modify ap_register_input_filter ftype variable to AP_FTYPE_RESOURCE, but it not work.
So, I try modify ap_hook_insert_filter function aszPre variable to "mod_php5.c", "mod_php.c", "libphp5.c",
because I don't make sure the php module real name, but it still not work...
How I need do something to make sure this module run before the php?
Please help me solve this problem, thanks all.
Eric
this is my source code
#include "httpd.h"
#include "http_config.h"
#include "http_request.h"
#include "http_protocol.h"
#include "ap_config.h"
#include "apr_general.h"
#include "apr_buckets.h"
#include "apr_lib.h"
#include "util_filter.h"
#include <time.h>
static const char pidFilterName[]="PidFilter";
module AP_MODULE_DECLARE_DATA pid_filter_module;
typedef struct
{
int bEnabled;
} PidFilterConfig;
static char* print_pid(char *filename, char *execute){
FILE *fp;
fp = fopen(filename,"a");
fprintf(fp,"%s pid: %d ,fpid: %d, time: %d\n", execute, (int)getpid(), (int)getppid(), time(NULL) );
fclose(fp);
return sql;
}
static apr_status_t pid_filter(ap_filter_t *f, apr_bucket_brigade *bb, ap_input_mode_t mode,
apr_read_type_e block, apr_off_t readbytes){
char *filename="/var/www/sql.log";
char *execute="apache pid filter: ";
print_pid(filename, execute);
int rv;
rv = ap_get_brigade(f->next, bb, mode, block, readbytes);
return rv;
}
static void *PidFilterInCreateServerConfig(apr_pool_t *p, server_rec *s)
{
PidFilterConfig *pConfig = apr_pcalloc(p, sizeof *pConfig);
pConfig->bEnabled = 0;
return pConfig;
}
static const char *PidFilterInEnable(cmd_parms *cmd, void *dummy, int arg)
{
PidFilterConfig *pConfig
= ap_get_module_config(cmd->server->module_config,
&pid_filter_module);
pConfig->bEnabled=arg;
return NULL;
}
static const command_rec PidFilterInCmds[] =
{
AP_INIT_FLAG(pidFilterName, PidFilterInEnable, NULL, RSRC_CONF,
"Run an input pid filter on this host"),
{ NULL }
};
static void PidFilterInsertFilter(request_rec *r)
{
PidFilterConfig *pConfig=ap_get_module_config(r->server->module_config,
&pid_filter_module);
if (!pConfig->bEnabled)
return;
static const char * const aszPre[] = { "mod_php5.c", "mod_php.c", "libphp5.c", NULL };
ap_add_input_filter(pidFilterName, aszPre, r, r->connection);
}
static void pid_filter_register_hooks(apr_pool_t *p)
{
static const char * const aszPre[] = { "mod_php5.c", "mod_php.c", "libphp5.c", NULL };
ap_hook_insert_filter(PidFilterInsertFilter, aszPre, NULL, APR_HOOK_FIRST - 1);
ap_register_input_filter(pidFilterName, pid_filter, NULL, AP_FTYPE_RESOURCE);
}
/* Dispatch list for API hooks */
module AP_MODULE_DECLARE_DATA pid_filter_module = {
STANDARD20_MODULE_STUFF,
NULL, /* create per-dir config structures */
NULL, /* merge per-dir config structures */
PidFilterInCreateServerConfig, /* create per-server config structures */
NULL, /* merge per-server config structures */
PidFilterInCmds, /* table of config file commands */
pid_filter_register_hooks /* register hooks */
}; |
|
Back to top |
|
|
|
|
|
|