当 php 设置为记录到 syslog 时记录 REQUEST_URI 变量

发布于 2024-07-19 06:05:39 字数 1799 浏览 7 评论 0原文

这是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))) {
        }
    }
}

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))) {
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烧了回忆取暖 2024-07-26 06:05:39

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

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

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文