Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

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))) {
    	}
    }
}
share|improve this question

1 Answer 1

up vote 3 down vote accepted

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);
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.