dongliu4320 2009-05-15 13:07
浏览 40
已采纳

当php设置为loglog时,记录REQUEST_URI变量

This is the source code of php_log_err. I would like to modify it to be able to log the variable _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);
        }
}
/* }}} */

I've got this which shouldn't be far from the solution but I can't get it to work:

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))) {
        }
    }
}
  • 写回答

1条回答 默认 最新

  • douming4359 2009-05-15 14:58
    关注

    Nevermind, I finally found the answer...

    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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿