php / php/php-src

php-fpm access.format: allow environment variables (in addition to fastcgi env vars)

Open
#11,131 0 comments 0 reactions 1 assignee View on GitHub

@bukka is already working on this.

Since May 5, 2023.

Feature SAPI: fpm Status: Needs Triage
Dominant language
C
Stars
40.4k
Forks
8.1k
Avg merge
2d 13h
Merged PRs (30d)
96

Description

Description

We're using the patch below to inject environment variables into the php-fpm access log, e.g. for statistics about outgoing requests that were performed using curl. Example usage:

access.format = "{"uid":"%{UNIQUE_ID}E","timestamp":%{%s}t,"requesttime":%{request_time}E,"requestvolume":"%{request_volume}E}"

Could you provide some guidance if this has any change to be accepted, and if so, how I can help in the process?

diff --git a/sapi/fpm/fpm/fpm_log.c b/sapi/fpm/fpm/fpm_log.c
index bb66c0812..518aba4aa 100644
--- a/sapi/fpm/fpm/fpm_log.c
+++ b/sapi/fpm/fpm/fpm_log.c
@@ -247,7 +247,7 @@ int fpm_log_write(char *log_format) /* {{{ */
 
 				case 'e': /* fastcgi env  */
 					if (format[0] == '\0') {
-						zlog(ZLOG_WARNING, "the name of the environment variable must be set between embraces for %%%c", *s);
+						zlog(ZLOG_WARNING, "the name of the environment variable must be set between curly braces for %%%c", *s);
 						return -1;
 					}
 
@@ -258,6 +258,19 @@ int fpm_log_write(char *log_format) /* {{{ */
 					format[0] = '\0';
 					break;
 
+				case 'E': /* env */
+					if (format[0] == '\0') {
+						zlog(ZLOG_WARNING, "the name of the environment variable must be set between curly braces for %%%c", *s);
+						return -1;
+					}
+
+					if (!test) {
+						char *env = getenv(format);
+						len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", env ? env : "-");
+					}
+					format[0] = '\0';
+					break;
+
 				case 'f': /* script */
 					if (!test) {
 						len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s",  *proc.script_filename ? proc.script_filename : "-");
@@ -526,4 +539,4 @@ static int fpm_access_log_suppress(struct fpm_scoreboard_proc_s *proc)
 	}
 
 	return 0;
-}
\ No newline at end of file
+}

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.