2009-05-15 14 views
1

これはphp_log_errのソースコードです。私は私が溶液から遠くにすべきではない、これを持って_SERVER["REQUEST_URI"]phpがsyslogにログするように設定されている場合、REQUEST_URI変数を記録します。

/* {{{ php_log_err 
*/ 
PHPAPI void php_log_err(char *log_message TSRMLS_DC) 
{ 
     FILE *log_file; 
     char error_time_str[128]; 
     struct tm tmbuf; 
     time_t error_time; 

     /* Try to use the specified logging location. */ 
     if (PG(error_log) != NULL) { 
#ifdef HAVE_SYSLOG_H 
       if (!strcmp(PG(error_log), "syslog")) { 
         php_syslog(LOG_NOTICE, "%.500s", log_message); 
         return; 
       } 
#endif 
       log_file = VCWD_FOPEN(PG(error_log), "ab"); 
       if (log_file != NULL) { 
         time(&error_time); 
         strftime(error_time_str, sizeof(error_time_str), "%d-%b-%Y %H:%M:%S", php_localtime_r(&error_time, &tmbuf)); 
         fprintf(log_file, "[%s] ", error_time_str); 
         fprintf(log_file, "%s", log_message); 
         fprintf(log_file, "%s", PHP_EOL); 
         fclose(log_file); 
         return; 
       } 
     } 

     /* Otherwise fall back to the default logging location, if we have one */ 

     if (sapi_module.log_message) { 
       sapi_module.log_message(log_message); 
     } 
} 
/* }}} */ 

変数を記録できるように修正したいと思いますが、私はそれを動作させることはできません。

char key[] = "REQUEST_URI"; 
int key_size = sizeof(key); 
zval **hsv; 
zval **var; 

if (SUCCESS != zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **) &hsv)) { 
    if (SUCCESS != zend_hash_find(Z_ARRVAL_PP(hsv), (char *) key, key_size, (void **) &var)) { 
     if (!(Z_STRVAL_PP(var) && Z_STRLEN_PP(var))) { 
     } 
    } 
} 

答えて

3

私はついに答えを見つけました...

char *ip_address; 
char *uri; 

ip_address = sapi_getenv("HTTP_X_FORWARDED_FOR", 20 TSRMLS_CC); 
if (ip_address == NULL) { 
    ip_address = sapi_getenv("REMOTE_ADDR", 11 TSRMLS_CC); 
    if (ip_address == NULL) { 
    ip_address = "no_ip_address"; 
    } 
} 

uri = sapi_getenv("REQUEST_URI", 11 TSRMLS_CC); 
if (uri == NULL) { 
    uri = "no_uri"; 
} 

php_syslog(LOG_NOTICE, "%.500s [ip:%s][uri:%s]", log_message, ip_address, uri); 
関連する問題