ãŸããã
æè¿ãApache 2.2.x WebãµãŒããŒçšã«ç¬èªã®å°ããªã¢ãžã¥ãŒã«ãéçºããå¿
èŠã«çŽé¢ããŸããã é©åãªæ
å ±ãæ¢ãã®ã«æ°æéè²»ãããåŸãç§ã¯ãã·ã¢èªã§ããã«ã€ããŠè©±ã人ãã»ãšãã©ããªããšããäºå®ã«åºäŒããŸããã ãããã£ãŠããã®èšäºãæžããšããã¢ã€ãã¢ãçãŸããŸããã 以äžã§ã¯ãå¯èœãªéãç§ã®çµéšãå
±æããã¢ãžã¥ãŒã«ãäœæããæé ãã¹ãããããšã«èª¬æãããã®ãããã¯ã«é¢ããããŸããŸãªåœ¹ç«ã€ãªã³ã¯ãæäŸããŸãã
ã¯ããã«
Apacheã®ã¢ãžã¥ãŒã«ã®äœæã«ééããããšã®ãªãåå¿è
éçºè
ãæåã«çŽé¢ããã®ã¯ããã©ãããå§ããã°ããã®ãããšãã質åã§ãã
äžèŠãªãžã§ã¹ãã£ãŒãªãã§ã¯ã++ãªãã§çŽç²ãªCãåŠçããå¿
èŠããããšããäºå®ãèªèããããšããå§ããŸãã ãããŠããããããã¯è¯ãããšã§ãã
次ã«ãAPXSãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããŠãããã©ããã確èªããã€ã³ã¹ããŒã«ãããŠããªãå Žåã¯ã€ã³ã¹ããŒã«ããŸãã DebianïŒUbuntuïŒLinuxã·ã¹ãã ã§ã¯ãããã¯éåžžã«ç°¡åã«å®è¡ã§ããŸããã³ãã³ããå®è¡ããã ãã§ãïŒ
apt-get install apache2-threaded-dev
ãŸãã¯
apt-get install apache2-prefork-dev
䜿çšããŠããApacheã®å¯Ÿå¿ããããŒãžã§ã³ã«ãã£ãŠç°ãªããŸãã
ããã¯ãã¢ãžã¥ãŒã«ããã«ãããŠã³ã³ãã€ã«ããããã«å¿
èŠã«ãªããŸãã
ããã§ãã¹ãŠã®æºåãæŽããã¢ãžã¥ãŒã«èªäœã®éçºã«çŽæ¥é²ãããšãã§ããŸãã äŸã§ãã¹ãŠãåŠç¿ããã®ã§ãWebãµãŒããŒã倧æåã«äžããHTMLããŒãžã®ãã¹ãŠã®ã¿ã°ãå€æããå°ããªã¢ãžã¥ãŒã«ãäœæããŸãããã
ã ãããããªãã¯ãªãã§ã¢ãžã¥ãŒã«ãåŒã³åºããŸããã-ã¢ããã¿ã°ã åãååã®ãã©ã«ããŒãäœæãããã®äžã«ãœãŒã¹ãã¡ã€ã«mod_uptags.cãšREADMEããã³config.m4ãã¡ã€ã«ãäœæããŸãã ããã¯ããã¡ã€ã«æ§é ãã©ã®ããã«ãªããã瀺ããŠããŸãã
ã¢ããã¿ã°/
config.m4
mod_uptags.c
Readme
ãããã®ãã¡ã€ã«ãããã«ApacheãœãŒã¹ã«é
眮ããããšããåŸãããããè¡ãããšãã§ããŸããå¿
èŠã«å¿ããŠç¶è¡ããŸãã
ååãšããŠãã¢ãžã¥ãŒã«ãæ£åžžã«äœæããã«ã¯ãCãœãŒã¹ã³ãŒãã®ãã¡ã€ã«ã®ã¿ãå¿
èŠã§ãããå°ãªããšãREADMEãé©åãªåœ¢åŒã§ãããconfig.m4ã¯WebãµãŒããŒå
šäœãã³ã³ãã€ã«ãããšãã«ã¢ãžã¥ãŒã«ãèªåçã«æ§ç¯ããã®ã«åœ¹ç«ã¡ãŸãã
Apacheã¢ãžã¥ãŒã«ã®APIã¯ã以äžã§èª¬æããããã€ãã®ã°ã«ãŒãã«è«ççã«å²ãåœãŠãããšãã§ããããã€ãã®é¢æ°ãšæ§é ã®å®è£
ãæå³ããŸãã
ãã ããé¢æ°ã®åæãé²ããåã«ãå¿
èŠãªã©ã€ãã©ãªãæ¥ç¶ãããœãŒã¹mod_uppertags.cã§ã¢ãžã¥ãŒã«èªäœã宣èšããå¿
èŠããããŸãã
#include "apr_general.h"
#include "apr_lib.h"
#include "apr_buckets.h"
#include "apr_strings.h"
#include "ap_config.h"
#include "util_filter.h"
#include "httpd.h"
#include "http_config.h"
#include "http_request.h"
#include "http_core.h"
#include "http_protocol.h"
#include "http_log.h"
#include "http_main.h"
#include "util_script.h"
#include "http_core.h"
#include < string .h>
#include <stdio.h>
#include <ctype.h>
#include <sys/stat.h>
module AP_MODULE_DECLARE_DATA uptags_module;
* This source code was highlighted with Source Code Highlighter .
æ§æ管çæ©èœ
ãåãã®ãšãããApacheã¯é«åºŠã«ã«ã¹ã¿ãã€ãºå¯èœãªWebãµãŒããŒã§ãã
ã·ã¹ãã 管çè
ã®èŠ³ç¹ããã¯ãã°ããŒãã«ãµãŒããŒæ§æã<VirtualHost>ã<Directory>ïŒããã³<Files>ãŸãã¯<Location>ïŒããã³.htaccessãã¡ã€ã«ãªã©ãããŸããŸãªã¹ã³ãŒãã§å®çŸ©ã§ããããã€ãã®ã¿ã€ãã®ãã£ã¬ã¯ãã£ãããããŸãã
ããŸããŸãªã¹ã³ãŒãã§å®çŸ©ããããã£ã¬ã¯ãã£ãã®ç«¶åã¯ãããã©ã«ãã§ã次ã®èŠåã«åŸã£ãŠãµãŒããŒèªäœã«ãã£ãŠè§£æ±ºãããŸãã
- ã¡ã€ã³èšå®
ãã®ãã¡ã€ã«ã®ãã£ã¬ã¯ãã£ãïŒäžéšã®ã³ã³ããã§æå®ãããŠãããã®ãé€ãïŒã¯ã°ããŒãã«ã«é©çšãããŸãã ããã§ã¯ã»ãšãã©ã®ãã£ã¬ã¯ãã£ãã䜿çšã§ããŸãã - ä»®æ³ãã¹ã<VirtualHost>
åä»®æ³ãã¹ãã¯ã<VirtualHost>ã³ã³ãããŒå
ã«ç¬èªã®ïŒä»®æ³ïŒãµãŒããŒæ§æãæã€ããšãã§ããŸãã ã°ããŒãã«èšå®ã§äœ¿çšã§ãããã£ã¬ã¯ãã£ãã¯ããã§äœ¿çšã§ãããã®éãå¯èœã§ãã - ãã£ã¬ã¯ããª
<Directory>ã<Files>ãããã³<Location>ã³ã³ãããŒã¯ãã°ããŒãã«èšå®ã®åå®çŸ©æ¹æ³ãããŸããŸãªã¬ãã«ã§å®çŸ©ããŸãã ãã®èšäºã§ã¯ããããããã£ã¬ã¯ããªã®æ§æãšåŒã³ãŸãã - .htaccessãã¡ã€ã«
ãã£ã¬ã¯ããªèšå®ã«ãé©çšãããŸãã ãããã®ãã¡ã€ã«ã§ã¯ããŠãŒã¶ãŒã¯ããµãŒããŒç®¡çè
ã«ãã£ãŠèšå®ãããAllowOverrideãã£ã¬ã¯ãã£ãã®å€ã«åºã¥ããŠããã£ã¬ã¯ãã£ãèšå®èªäœã決å®ã§ããŸãã
ã¢ãžã¥ãŒã«ãäœæããå Žåããã£ã¬ã¯ãã£ããšã³ã³ãããåå¥ã«æ±ºå®ããã¹ã³ãŒãã決å®ãããããããªãŒããŒã©ã€ãããã«ãŒã«ãå€æŽã§ããŸãã
ãããè¡ãã«ã¯ããŸããæ§æããŒã¿ãã¡ã¢ãªã«ä¿åããé©åãªæ§é ãäœæããå¿
èŠããããŸãã äžè¬çãªã±ãŒã¹ã§ã¯ããµãŒããŒæ§æãšãã£ã¬ã¯ããªæ§æã«å¥ã
ã®æ§é ãå®çŸ©ã§ããããšã«æ³šæããŠãã ããã ããã¯ããã£ã¬ã¯ãã£ãã®ã»ãããç°ãªãå Žåã«å®è¡ããå¿
èŠããããŸãã ãã以å€ã®å Žåã¯ãåãæ§é ã䜿çšããŠèšå®ãä¿åã§ããŸãã
äœæããã¢ãžã¥ãŒã«ã¯éåžžã«ã·ã³ãã«ã§èšå®ãæå°éãªã®ã§ãã·ã³ãã«ãªãã¹ããã©ããäž¡æ¹ã®ã¿ã€ãã®èšå®ïŒãµãŒããŒããã³ãã£ã¬ã¯ããªçšïŒã1ã€ã®ããŒã¿æ§é ã«çµåããŸãã ã¢ãžã¥ãŒã«ã®æäœãæå¹ãŸãã¯ç¡å¹ã«ãããã©ã°ãå®çŸ©ããŸãããïŒ
engine = On / Off-ã¢ãžã¥ãŒã«å
šäœã®åäœãæå¹/ç¡å¹ã«ã§ããŸãã
ã€ãŸããæ§é ã¯æ¬¡ã®ããã«ãªããŸãã
typedef struct uptags_cfg {
int engine;
} uptags_cfg;
* This source code was highlighted with Source Code Highlighter .
次ã«ãæ§æã®åã
ã®ã¿ã€ãããšã«ãããŒã¿ååŸé¢æ°ãäœæããå¿
èŠããããŸãã
/**
*
*
*/
static uptags_cfg *uptags_dconfig( const request_rec *r) {
return (uptags_cfg *) ap_get_module_config( r->per_dir_config, &uptags_module);
}
/**
*
*
*/
static uptags_cfg *uptags_sconfig( const server_rec *s) {
return (uptags_cfg *) ap_get_module_config( s->module_config, &uptags_module);
}
* This source code was highlighted with Source Code Highlighter .
ä»ãããã©ã«ãèšå®ã®é¢åãèŠããšãã§ãã ãããè¡ãã«ã¯ã次ã®2ã€ã®é¢æ°ãäœæããŸãã
/**
* -
*/
static void *uptags_create_dir_config( apr_pool_t *p, char *dirspec) {
uptags_cfg *cfg;
/**
*
*/
cfg = (uptags_cfg *) apr_pcalloc( p, sizeof ( uptags_cfg));
/**
*
*/
cfg->engine = 1;
return ( void *) cfg;
}
/**
*
*/
static void *uptags_create_server_config( apr_pool_t *p, server_rec *s) {
uptags_cfg *cfg;
cfg = (uptags_cfg *) apr_pcalloc( p, sizeof ( uptags_cfg));
cfg->engine = 1;
return ( void *) cfg;
}
* This source code was highlighted with Source Code Highlighter .
WebãµãŒããŒã®æ§é ã§ã¯ãç°ãªããããã¯ã«è€æ°ã®æ§æãå®éã«ååšããå¯èœæ§ãããããïŒããšãã°ã<Directory> </ Directory>ã<Files> </ Files>ããŸãã¯<Locationãããã¯ã®ãšã³ããªã¯ãä»®æ³ãã¹ãæ§é ã®ãã£ã¬ã¯ããªæ§æçšã«äœæã§ããŸãïŒ > </ Location>ã§ãåæã«.htaccessãã¡ã€ã«ãäœæã§ããŸãïŒããããã®æ§æãçµåããããã®ç¬èªã®ã«ãŒã«ãå®çŸ©ããå¿
èŠããããŸãã ãããããããšã«ãApache APIã䜿çšãããšããµãŒããŒèšå®ãšãã£ã¬ã¯ããªèšå®ãããŒãžããããã®ã«ãŒã«ãå®çŸ©ããã ãã§ããããç°¡åã«è¡ãããšãã§ããŸãã ãããè¡ãã«ã¯ã次ã®é¢æ°ãå®çŸ©ããã ãã§ååã§ãã
/**
*
*
*
*/
static void *uptags_merge_dir_config( apr_pool_t *p, void *parent_conf, void *newloc_conf) {
uptags_cfg *megred_conf = (uptags_cfg *) apr_pcalloc( p, sizeof ( uptags_cfg));
uptags_cfg *pconf = (uptags_cfg *) parent_conf;
uptags_cfg *nconf = (uptags_cfg *) newloc_conf;
/**
* ...
*
*/
return ( void *) merged_conf;
}
/**
*
*/
static void *uptags_merge_server_config( apr_pool_t *p, void *srv1conf, void *srv2conf) {
uptags_cfg *merged_config = (uptags_cfg *) apr_pcalloc( p, sizeof ( uptags_cfg));
uptags_cfg *s1conf = (uptags_cfg *) srv1conf;
uptags_cfg *s2conf = (uptags_cfg *) srv2conf;
/**
* ...
*
*/
return ( void *) merged_config;
}
* This source code was highlighted with Source Code Highlighter .
ãã ãããã§ãã¬ãŒã·ã§ã³ã«ãŒã«ã¯ããµãŒããŒã«ãŒã«ãããã©ã«ãã§ããªãã«åããªãå Žåã«ã®ã¿é©çšãããããšã«æ³šæããŠãã ããã ããªãã¯ããããå€æŽãããã ãã以å€ã®å Žåã¯ããããã®é¢æ°ãèšè¿°ããªãã§ãã ããããã¹ãŠãèªåçã«è¡ãããŸãã
æ§æãã£ã¬ã¯ãã£ãïŒã³ãã³ãïŒã®å®çŸ©
æ§æã®æ§é ãšãããåããããã®æ©èœã決å®ããåŠçãçµã¿åãããåŸããã®ããã«ãã£ã¬ã¯ãã£ãèªäœãå®çŸ©ããå¿
èŠã¯ãªããããæ§æã§èšå®ããå¿
èŠããããŸãã
static command_rec uptags_directives[] = {
AP_INIT_FLAG(
"UptagsEngine" ,
ap_set_flag_slot,
( void *) APR_OFFSETOF( uptags_cfg, engine),
OR_OPTIONS,
"uptags module switcher"
),
{NULL}
};
* This source code was highlighted with Source Code Highlighter .
ããã§ã¯ãApache WebãµãŒããŒAPIãæ§æãã£ã¬ã¯ãã£ãã®åŠçã«æäŸããããŸããŸãªå¯èœæ§ã調ã¹ãããã«å°ãåæ¢ããŸãã
ãã£ã¬ã¯ãã£ãæ§é ã®å®çŸ©ã¯åžžã«NULLæ§é ã§çµäºããå®è£
ãã¯ãã¯http_config.hãã¡ã€ã«ã§å®çŸ©ãããŸãã AP_INIT_FLAGã¯ããã®ãããªå€ãã®ãã¯ãã®1ã€ã§ãããäžè¬ã«ãéNULLæ§é ã«ã¯æ¬¡ã®èŠçŽ ãå«ãŸããŸãã
- ãã£ã¬ã¯ãã£ãã®ååã¯ãconfigã§ãã£ã¬ã¯ãã£ããã©ã®ããã«èšå®ããããã§ãïŒå®éãconfigããã®è¡ã®ãããã³ã°ãšã¡ã¢ãªå
ã§ä»¥åã«äœæããæ§é ã¯ãã®å Žæã§ãïŒ
- ãã£ã¬ã¯ãã£ããå®è£
ããé¢æ°ã ap_set_flag_slotã¯ãã¹ã€ãããã©ã¡ãŒã¿ãŒãŸãã¯ãã©ã°ã解æããæšæºã®Apache APIé¢æ°ã§ãïŒãªã³/ãªãã¯ç§ãã¡ã«ãŽã£ããã§ãïŒ
- ããŒã¿æ§é äœãžã®ãã€ã³ã¿ãŒïŒAPR_OFFSETOFã䜿çšããŠãå®çŸ©ããæ§é äœã«ããŒã¿ããããããŸãïŒ
- ãã£ã¬ã¯ãã£ããèš±å¯ããå Žæãå®çŸ©ãããã¯ãïŒOR_OPTIONS-AllowOverrideãã£ã¬ã¯ãã£ãã®å€ã管çè
ã«ãã£ãŠOptionsã¿ã°ã§èšå®ãããŠããå Žåããã£ã¬ã¯ãã£ãã¯ãã£ã¬ã¯ããªããã³.htaccessãã¡ã€ã«ã«èš±å¯ãããŸãïŒ
- ãã«ãæ©èœã®ãã£ã¬ã¯ãã£ãã®èª¬æã
å€ãã®å ŽåãApache APIãæäŸããã³ãã³ããå®è£
ããæšæºæ©èœã¯ãåé¡ã解決ããã®ã«ååã§ãã ãããã®é¢æ°ã¯ãhttp_config.hãã¡ã€ã«ã«ãèšèŒãããŠããŸãã ããã«ãããŸãïŒ
/**
*
*/
AP_DECLARE_NONSTD( const char *) ap_set_string_slot( cmd_parms *cmd, void *struct_ptr, const char *arg);
/**
*
*/
AP_DECLARE_NONSTD( const char *) ap_set_int_slot( cmd_parms *cmd, void *struct_ptr, const char *arg);
/**
* ,
*/
AP_DECLARE_NONSTD( const char *) ap_set_string_slot_lower( cmd_parms *cmd, void *struct_ptr, const char *arg);
/**
* ( On/Off)
*/
AP_DECLARE_NONSTD( const char *) ap_set_flag_slot( cmd_parms *cmd, void *struct_ptr, const char *arg);
/**
* , -
*/
AP_DECLARE_NONSTD( const char *) ap_set_file_slot( cmd_parms *cmd, void *struct_ptr, const char *arg);
/**
* , :
* AP_INIT_RAW_ARGS("Foo", ap_set_deprecated, NULL, OR_ALL,
* " Foo , Bar")
*/
AP_DECLARE_NONSTD( const char *) ap_set_deprecated( cmd_parms *cmd, void *struct_ptr, const char *arg);
* This source code was highlighted with Source Code Highlighter .
ãã£ã¬ã¯ãã£ãã®ããŒã¿åãå®çŸ©ãããã¯ãã¯æ¬¡ã®ãšããã§ãã
- AP_INIT_NO_ARGS-åŒæ°ãªãã®ãã£ã¬ã¯ãã£ã
- AP_INIT_FLAG-ãã£ã¬ã¯ãã£ãã¹ã€ããïŒãªã³/ãªãïŒ
- AP_INIT_TAKE1-1ã€ã®åŒæ°-æåå
- AP_INIT_TAKE2 ã AP_INIT_TAKE3 ã AP_INIT_TAKE12-ãã£ã¬ã¯ãã£ãã¯ããã€ãã®ç°ãªãåŒæ°ãåããŸã
- AP_INIT_ITERATE-ãã£ã¬ã¯ãã£ãã®ååŒæ°ã«é¢æ°ãé©çšãããŸã
- AP_INIT_ITERATE2-é¢æ°ã¯2ã€ã®åŒæ°ãæž¡ããŠåŒã³åºãããŸã
- AP_INIT_RAW_ARGS-é¢æ°ã¯ããã¹ãŠã®ãã£ã¬ã¯ãã£ãåŒæ°ã転éããŠåŒã³åºãããŸã
ãã£ã¬ã¯ãã£ãã®ã¹ã³ãŒããå®çŸ©ãããã¯ãã¯æ¬¡ã®ãšããã§ãã
- OR_NONE-æ§æå
ã®ã©ãã«ã䜿çšã§ããŸãã
- OR_LIMIT -AllowOverrideãã£ã¬ã¯ãã£ãã«LimitããŒã¯ãŒããããå Žåã<Directory>ãŸãã¯<Location>ã³ã³ãããŒå
ããã³.htaccessãã¡ã€ã«å
ã®ãµãŒããŒæ§æ
- OR_OPTIONS-ã©ãã§ããAllowOverrideãã£ã¬ã¯ãã£ãã«OptionsããŒã¯ãŒããããå Žåã¯.htaccessãå«ã
- OR_FILEINFO-ã©ãã§ããAllowOverrideãã£ã¬ã¯ãã£ãã«FileInfoããŒã¯ãŒããããå Žåã¯.htaccessãå«ã
- OR_AUTHCFG- <Directory>ãŸãã¯<Location>ã³ã³ãããŒå
ã®ãµãŒããŒæ§æãããã³AllowOverrideãã£ã¬ã¯ãã£ãã«AuthConfigããŒã¯ãŒããããå Žåã¯.htaccessãã¡ã€ã«
- OR_INDEXES-ã©ãã§ããAllowOverrideãã£ã¬ã¯ãã£ãã«IndexesããŒã¯ãŒããããå Žåã¯.htaccessãã¡ã€ã«ãå«ã
- OR_UNSET-èš±å¯ã®åé€ãã£ã¬ã¯ãã£ã
- ACCESS_CONF- <Directory>ãŸãã¯<Location>ã³ã³ãããŒå
ã®ãµãŒããŒæ§æ
- RSRC_CONF-ã³ã³ãã<Directory>ãŸãã¯<Location>ã®å€éšã®ãµãŒããŒæ§æå
- EXEC_ON_READ-æ§æãå€æŽããå€éšã³ãã³ãïŒå€éšãã¡ã€ã«ãIFModuleã®æ¥ç¶ãªã©ïŒããã£ã¬ã¯ãã£ãã«åŒ·å¶çã«å®è¡ãããŸã
- OR_ALL-ã©ãã§ãèš±å¯ããããã£ã¬ã¯ãã£ã
ã¢ãžã¥ãŒã«ã®æ§æã決å®ããã®ã§ããã®æ©èœã®éçºã«çŽæ¥é²ãããšãã§ããŸãã
ãªã¯ãšã¹ããã³ãã©ãŒ
SetHandlerããã³AddHandlerãã£ã¬ã¯ãã£ãã䜿çšããŠã察å¿ãããªã¯ãšã¹ãã«é©åãªããã¥ã¡ã³ããçºè¡ããç¬èªã®Apacheãªã¯ãšã¹ããã³ãã©ãäœæã§ããŸãã
ãããã®ãã³ãã©ãŒã¯ããŒã¿ãåºåã«çŽæ¥éä¿¡ãããããã³ã³ãã³ããåºåãããåã«å¿çããããŒãéä¿¡ãããããšã確èªããå¿
èŠããããŸãã ããã¯ãsend_http_headerïŒïŒé¢æ°ã䜿çšããŠå®è¡ã§ããŸãã ç¬èªã®ããããŒãèšå®ããããšãã§ããŸãã
ãã³ãã©ãŒé¢æ°ã¯ãåŒæ°ãšããŠãèŠæ±ã®æ§é ãžã®ãã€ã³ã¿ãŒãåããŸãã è¿ãããå€ã¯æ¬¡ã®ãšããã§ãã
- OK-ãã¹ãŠãæ£åžžã§ããªã¯ãšã¹ããæ£åžžã«åŠçããŸãã
- äžæ¿èª-ãªã¯ãšã¹ãã¯æåŠãããŸãã
- HTTP_ [error_code]-HTTPãããã³ã«ãšã©ãŒãå ±åããŸããããšãã°ãHTTP_401-èªèšŒãå¿
èŠã§ã
static int uptags_handler( request_rec *r) {
if (strcmp( r->handler, "uptags-handler" )) {
return DECLINED;
}
r->content_type = "text/html" ;
/**
* -
*/
if (r->header_only) {
return OK;
}
/**
* , :
*/
ap_rputs( DOCTYPE_HTML_4_0_STRICT, r);
ap_rputs( "<HTML>\n" , r);
ap_rputs( " <HEAD>\n" , r);
ap_rputs( " <TITLE>Example Title</TITLE>\n" , r);
ap_rputs( " </HEAD>\n" , r);
ap_rputs( " <BODY>\n" , r);
ap_rputs( " <H1>Example content</H1>\n" , r);
ap_rputs( " <P>Example text</P>\n" , r);
ap_rputs( " </BODY>\n" , r);
ap_rputs( "</HTML>\n" , r);
return OK;
}
* This source code was highlighted with Source Code Highlighter .
ããã§ãWebãµãŒããŒæ§æã«ãã³ãã©ãŒãè¿œå ã§ããŸãã
<å Žæ/ uptags-handler-example>
Sethandler uptags-handler
</å Žæ>
å®éãããã¯æžããŠããã¢ãžã¥ãŒã«ãšã¯é¢ä¿ãªãã®ã§ããã®æ©èœã¯å¿
èŠãããŸããã ãã³ãã©ãŒã®èšè¿°äŸãèŠãŠã¿ãŸããã ãã®ã¿ã¹ã¯ã¯ãããšãã°ãWebãµãŒããŒã®ã¢ãžã¥ãŒã«ãšããŠWebãµã€ãã³ã³ãã³ã管çã·ã¹ãã ãäœæããå Žåã«çºçããå¯èœæ§ããããŸãã ãŸãã¯ãã€ã³ã¿ãŒããªã¿ãŒèšèªãåã蟌ã¿ãŸãã
ç§ãã¡ãæèµ·ããåé¡ã解決ããã«ã¯ããã£ã«ã¿ãŒã䜿çšããæ¹ãé©åã§ããããã«ã€ããŠã¯ã次ã®ã»ã¯ã·ã§ã³ã§æ€èšããŸãã
ãã£ã«ã¿ãŒ
ãã£ã«ã¿ãŒã䜿çšãããšãApacheããªã¯ãšã¹ãã«å¿ããŠæäŸããçŸåšã®ã³ã³ãã³ããæäœã§ããŸãã åé¡ã解決ããã®ã«ã¡ããã©ããå Žæã§ãã
ããã§ã¯ããœãªã¥ãŒã·ã§ã³èªäœããå°ãéžè±ããWebãµãŒããŒã®åçãšãWebãµãŒããŒãããŒã¿ãåŠçããã³æäŸããæ¹æ³ã«ã€ããŠå°ã話ãå¿
èŠããããŸãã
Apache 2ãã£ã«ã¿ãŒã®ã¢ãŒããã¯ãã£ã¯ããã®WebãµãŒããŒã®äž»èŠãªæè¡é©æ°ã§ããããã®èœåãšæ±çšæ§ãšãšãã«ãããã¹ã±ããããšãæ
å£ãã®æŠå¿µã®ç 究ãšç解ã®åé¡ã«åŠå®çãªæå³åããæã£ãŠããŸãã
Apacheã®äœã¬ãã«APIã䜿çšãããšãããã¹ã±ããããšãããŒã ããçŽæ¥æäœã§ããŸãã 以äžã§ã¯ããããã©ã®ããã«è¡ããããã®ååãèŠãŠãããŸãã
ããã¹ã±ããããšãæ
å£ããšã¯äœã§ããïŒ
ãã¿ç®±ã¯ãããããã¿ã€ãã®ããŒã¿ãå«ãããšãã§ããããŒã¿ã³ã³ãããŒã§ãã ããã«ãããããããæãäžè¬çãªã¿ã€ãã¯ã¡ã¢ãªãããã¯ã§ããããã£ã¹ã¯äžã®ãã¡ã€ã«ãšãããšãã°å¥ã®ããã°ã©ã ãªã©ããããœãŒã¹ããå¥ã®ãœãŒã¹ã«è»¢éãããããŒã¿ã¹ããªãŒã ã®äž¡æ¹ãæ¢ã«å«ãããšãã§ããŸãã
ååãšããŠãããã€ãã®ç°ãªãã¿ã€ãã®ããã¹ã±ãããããããŸã-ç°ãªãã¿ã€ãã®ããŒã¿ãããã³ããŒã¿ãšã³ããµã€ã³ïŒEOSïŒãŸãã¯ããŒã¿ãããã¡ãŒãåºåã¹ããªãŒã ã«ãã©ãã·ã¥ããFLUSHããã¹ã±ããããªã©ã®ã¡ã¿ããŒã¿ãæã€ããã¹ã±ãããã
ããŒã ã¯ãããã¹ã±ãããã®ãµã€ã¯ã«ãçµåããã³ã³ããã§ããããã£ã«ã¿ãŒãããã£ã«ã¿ãŒã«è»¢éããããŠãããã§ãã
ããã¹ã±ããããšãããŒã ãã¯ããã£ã«ã¿ãŒã¢ããªã±ãŒã·ã§ã³ã«å
žåçãªã¡ã¢ãªãããã¯ã®å¹ççãªæäœãæäŸããŸãã
ããã¹ã±ããããšãããŒã ããæäœããããã«ãApache 2ã¯apr_buckets.hãã¡ã€ã«ã«èšè¿°ãããŠããäžé£ã®ããŒã¿åãæ§é ããã¯ããããã³APIé¢æ°ãæäŸããŸãã 圌ãã®èª¬æã¯
ããã«ãããŸã ã
åé¡ã解決ããã«ã¯ãå
¥åïŒinïŒãšåºåïŒoutïŒã®2ã€ã®ãã£ã«ã¿ãŒãäœæããå¿
èŠãããããšã«æ³šæããŠãã ããã
/**
*
*/
static void uptags_in_filter( request_rec *r) {
/**
* ,
*/
ap_add_output_filter( "Uptags" , NULL, r, r->connection);
}
/**
* -
*/
static apr_status_t uptags_out_filter( ap_filter_t *f, apr_bucket_brigade *pbbIn) {
request_rec *r = f->r;
conn_rec *c = r->connection;
apr_bucket *pbktIn;
apr_bucket_brigade *pbbOut;
uptags_cfg *cfg = uptags_dconfig( f->r);
/**
* , . -
* , HTML
*/
if (!cfg->engine || strcmp( r->content_type, "text/html" ) != 0) {
return ap_pass_brigade( f->next, pbbIn);
}
/* */
pbbOut = apr_brigade_create( r->pool, c->bucket_alloc);
/**
*
*/
for (pbktIn = APR_BRIGADE_FIRST( pbbIn); pbktIn != APR_BRIGADE_SENTINEL( pbbIn); pbktIn = APR_BUCKET_NEXT( pbktIn)) {
const char *data;
apr_size_t len;
char *buf;
apr_bucket *pbktOut;
/* "" - - - */
if (APR_BUCKET_IS_EOS( pbktIn)) {
apr_bucket *pbktEOS = apr_bucket_eos_create( c->bucket_alloc);
APR_BRIGADE_INSERT_TAIL( pbbOut,pbktEOS);
continue ;
}
/* */
apr_bucket_read( pbktIn, &data, &len, APR_NONBLOCK_READ);
/**
*
* ! - .
* .
*/
buf = apr_bucket_alloc( len, c->bucket_alloc);
memset( buf, 0, sizeof ( buf));
uptags_tags_to_uppercase( data, buf);
/* */
pbktOut = apr_bucket_heap_create( buf, len, apr_bucket_free, c->bucket_alloc);
APR_BRIGADE_INSERT_TAIL( pbbOut, pbktOut);
}
apr_brigade_cleanup( pbbIn);
return ap_pass_brigade( f->next, pbbOut);
}
* This source code was highlighted with Source Code Highlighter .
åœç¶ã ãŸããé¢æ°uptags_tags_to_uppercaseïŒïŒãå®è£
ããå¿
èŠããããŸããå®éã«ã¯ãããŒã¿ã«å¯ŸããŠå¿
èŠãªãã¹ãŠã®æäœãè¡ãããã®å®£èšããã£ã«ã¿ãŒå®£èšã®åã«é
眮ããŸãã
/**
*
*/
void uptags_tags_to_uppercase( const char *data, char *str) {
int i, s = strlen( data), tag_opened = 0;
for (i = 0; i < s; i++) {
str[i] = data[i];
if (str[i] == '<' ) {
tag_opened = 1;
} else if (str[i] == '>' ) {
tag_opened = 0;
}
if (tag_opened && str[i] != '\0' ) {
str[i] = apr_toupper( str[i]);
}
}
}
* This source code was highlighted with Source Code Highlighter .
ç§ãã¡ã¯ãå®éã®ç掻ã§ã¯ãã€ãã©ããã«åäœãããšã¯éããªããããªãåçŽãªé¢æ°ãæžããŸããã ããããç§ãã¡ã®ã¿ã¹ã¯ã¯éåžžã«åçŽãªã®ã§ããã¹ãç®çã«ã¯éåžžã«é©ããŠããŸãã
ããã§ãã¢ãžã¥ãŒã«çšã®ãã£ã«ã¿ãŒã®éçºã¯å®äºãããšèŠãªãããšãã§ããæçµæ®µéã«é²ãããšãã§ããŸãã
ã¢ãžã¥ãŒã«å®çŸ©
ã¢ãžã¥ãŒã«ã®ãã¹ãŠã®æ©èœãç¹å®ããããWebãµãŒããŒã«ãããã®äœ¿çšæ¹æ³ãã説æãããå¿
èŠããããŸãã
ãããè¡ãã«ã¯ãApacheã¢ãžã¥ãŒã«æ§é ã®é©åãªã»ã«ã«ãããããªã¹ãããŸãã
/**
* Apache
*/
module AP_MODULE_DECLARE_DATA uptags_module = {
STANDARD20_MODULE_STUFF,
uptags_create_dir_config, /* */
NULL, /* */
uptags_create_server_config, /* */
NULL, /* */
uptags_directives, /* */
uptags_register_hooks /* */
};
* This source code was highlighted with Source Code Highlighter .
ã芧ã®ãšãããå°ããªã¢ãžã¥ãŒã«uptags_register_hooksã®ã¿ãæ¬ èœããŠããŸãããã®é¢æ°ã¯ããã®ã¢ãžã¥ãŒã«ã«å¿
èŠãªãã¹ãŠã®ãã³ãã©ãŒãç»é²ãã圹å²ãæãããŸãã
æžããŸãããïŒ
/**
*
*/
static void uptags_register_hooks( apr_pool_t *p) {
ap_hook_insert_filter( uptags_in_filter, NULL, NULL, APR_HOOK_MIDDLE);
ap_register_output_filter( "Uptags" , uptags_out_filter, NULL, AP_FTYPE_RESOURCE);
}
* This source code was highlighted with Source Code Highlighter .
ããããã¢ãžã¥ãŒã«ã®å®å
šãªãœãŒã¹ã³ãŒããããŠã³ããŒãã§ããŸãã
ã¢ãžã¥ãŒã«ã®ã³ã³ãã€ã«ãšã¢ã»ã³ããª
ã¢ãžã¥ãŒã«ãã³ã³ãã€ã«ããŠãã©ã°ã€ã³ããæãç°¡åãªæ¹æ³ã¯ãDSOïŒåçå
±æãªããžã§ã¯ãïŒãšããŠãã«ãããããšã§ãã ãããè¡ãã«ã¯ããœãŒã¹ãã£ã¬ã¯ããªã§ã³ãã³ããå®è¡ããŸãã
apxs2 -c mod_uppertags.c
ã³ã³ãã€ã«ãæåããå Žåã.libsãã©ã«ããŒãšãã®äžã®mod_uptegs.soãã¡ã€ã«ã衚瀺ãããŸãã ãã®ãã¡ã€ã«ãApacheããŒãå¯èœã¢ãžã¥ãŒã«ã®ãããã£ã¬ã¯ããªã«ã³ããŒããŸãã DebianïŒUbuntuïŒLinuxã§ã¯ãããã¯éåžžãã£ã¬ã¯ããª/ usr / lib / apache2 / modules /ã§ã
次ã«ãã¡ã€ã³ã®Apacheæ§æã§ããã£ã¬ã¯ãã£ããå
¥åããå¿
èŠããããŸãã
LoadModule uptags_module /usr/lib/apache2/modules/mod_uptags.so
<IfModule mod_uptags.c>
Upptagsengineãªã³
</ IfModule>
次ã«ãWebãµãŒããŒãåèµ·åããŸãã
/etc/init.d/apache2 restart
ããã§ãWebãµãŒããŒã衚瀺ããããŒãžãèŠãŠãçµæã確èªã§ããŸãã
config.m4ãã¡ã€ã«ã®å
容ãæžã蟌ãããšã圹ç«ã¡ãŸãã
APACHE_MODPATH_INITïŒã¢ããã¿ã°ïŒ
APACHE_MODULEïŒã¢ããã¿ã°ããã¹ãŠã®HTMLã¿ã°ã倧æåã«åãã©ãŒãããããããããïŒ
APACHE_MODPATH_FINISH
ããã«ãããApacheã®äžè¬çãªãã«ãäžã«ã¢ãžã¥ãŒã«ãèªåçã«ã³ã³ãã€ã«ã§ããŸãã WebãµãŒããŒå
šäœãæ§ç¯ãããšãã«ã¢ãžã¥ãŒã«ãéçã«æ§ç¯ããã«ã¯ãã/ configureã³ãã³ãã®å®è¡æã«--enable-uptagsãªãã·ã§ã³ãæå®ããã ãã§ååã§ãã
./configure --enable-uptags
ãããŠããã¡ãããREADMEãã¡ã€ã«ã§èª¬æããããšã«ãããä»ã®äººã«å¿
èŠãªæ瀺ãäžããããšãå¿ããªãã§ãã ããã
ãªã³ã¯ïŒè±èªïŒ
ã¢ãžã¥ãŒã«ã®æ§æãã±ãããšæ
å£ã®çŽ¹ä»Apacheã®åºæ¬çãªãªãœãŒã¹ç®¡çïŒAPRããŒã«Apacheã§ã®ãªã¯ãšã¹ãåŠçApache Portable RuntimeïŒAPRïŒããã¥ã¡ã³ããããã«
ãããŸã§èŠãŠããããã«ãApache WebãµãŒããŒçšã®ç¬èªã®ã¢ãžã¥ãŒã«ã®éçºã¯ããã»ã©è€éãªåé¡ã§ã¯ãããŸããã å¿èåãšé¢é£ããã¥ã¡ã³ããžã®ãªã³ã¯ãçšæããã°ååã§ãããã¿ã¹ã¯ã¯å®å
šã«è§£æ±ºå¯èœã«ãªããŸãã
ãã®ã¬ã€ãããèªè
ãã¢ãžã¥ãŒã«ãèšè¿°ããããã®Apache APIã«ç²Ÿéããã®ãå©ãããã®èå³æ·±ãäºäŸã®åºçºç¹ã«ãªãããšãé¡ã£ãŠããŸãã
éçºã«é 匵ã£ãŠãã ããïŒ
PSããã¯ç§ã®ããã°ã®
ãªãªãžãã«èšäºã®ã¯ãã¹æçš¿ã§ãã