【问题标题】:Log the REQUEST_URI variable when php is set to log to syslog当 php 设置为记录到 syslog 时记录 REQUEST_URI 变量
【发布时间】:2010-10-26 11:56:26
【问题描述】:

这是php_log_err的源代码。我想修改它以便能够记录变量_SERVER["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))) {
        }
    }
}

【问题讨论】:

    标签: php c module php-extension php-internals


    【解决方案1】:

    没关系,我终于找到答案了……

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多