]> granicus.if.org Git - php/commitdiff
Use logger pointer
authorXinchen Hui <laruence@gmail.com>
Tue, 19 May 2015 08:34:08 +0000 (16:34 +0800)
committerXinchen Hui <laruence@gmail.com>
Tue, 19 May 2015 08:34:08 +0000 (16:34 +0800)
main/fastcgi.c
main/fastcgi.h
sapi/cgi/cgi_main.c

index da66a7ed666ff06e17c9208544166791752a48ff..a1e48c4a84f559835c044ab5d362121937f041bd 100644 (file)
@@ -32,6 +32,8 @@
 #define MAXFQDNLEN 255
 #endif
 
+static fcgi_logger flog;
+
 #ifdef _WIN32
 
 #include <windows.h>
@@ -407,6 +409,10 @@ void fcgi_terminate(void)
        in_shutdown = 1;
 }
 
+void fcgi_set_logger(fcgi_logger logger) {
+       flog = logger;
+}
+
 int fcgi_init(void)
 {
        if (!is_initialized) {
@@ -626,10 +632,10 @@ int fcgi_listen(const char *path, int backlog)
                                        hep = gethostbyname(host);
                                }
                                if (!hep || hep->h_addrtype != AF_INET || !hep->h_addr_list[0]) {
-                                       fprintf(stderr, "Cannot resolve host name '%s'!\n", host);
+                                       flog(FCGI_ERROR, "Cannot resolve host name '%s'!\n", host);
                                        return -1;
                                } else if (hep->h_addr_list[1]) {
-                                       fprintf(stderr, "Host '%s' has multiple addresses. You must choose one explicitly!\n", host);
+                                       flog(FCGI_ERROR, "Host '%s' has multiple addresses. You must choose one explicitly!\n", host);
                                        return -1;
                                }
                                sa.sa_inet.sin_addr.s_addr = ((struct in_addr*)hep->h_addr_list[0])->s_addr;
@@ -666,7 +672,7 @@ int fcgi_listen(const char *path, int backlog)
                int path_len = strlen(path);
 
                if (path_len >= sizeof(sa.sa_unix.sun_path)) {
-                       fprintf(stderr, "Listening socket's path name is too long.\n");
+                       flog(FCGI_ERROR, "Listening socket's path name is too long.\n");
                        return -1;
                }
 
@@ -689,7 +695,7 @@ int fcgi_listen(const char *path, int backlog)
            bind(listen_socket, (struct sockaddr *) &sa, sock_len) < 0 ||
            listen(listen_socket, backlog) < 0) {
 
-               fprintf(stderr, "Cannot bind/listen socket - [%d] %s.\n",errno, strerror(errno));
+               flog(FCGI_ERROR, "Cannot bind/listen socket - [%d] %s.\n",errno, strerror(errno));
                return -1;
        }
 
@@ -719,7 +725,7 @@ int fcgi_listen(const char *path, int backlog)
                                }
                                allowed_clients[n] = inet_addr(cur);
                                if (allowed_clients[n] == INADDR_NONE) {
-                                       fprintf(stderr, "Wrong IP address '%s' in FCGI_WEB_SERVER_ADDRS\n", cur);
+                                       flog(FCGI_ERROR, "Wrong IP address '%s' in FCGI_WEB_SERVER_ADDRS\n", cur);
                                }
                                n++;
                                cur = end;
@@ -1229,7 +1235,7 @@ int fcgi_accept_request(fcgi_request *req)
                                                                        n++;
                                                                }
                                                                if (!allowed) {
-                                                                       fprintf(stderr, "Connection from disallowed IP address '%s' is dropped.\n", inet_ntoa(sa.sa_inet.sin_addr));
+                                                                       flog(FCGI_ERROR, "Connection from disallowed IP address '%s' is dropped.\n", inet_ntoa(sa.sa_inet.sin_addr));
                                                                        closesocket(req->fd);
                                                                        req->fd = -1;
                                                                        continue;
@@ -1287,7 +1293,7 @@ int fcgi_accept_request(fcgi_request *req)
                                                }
                                                fcgi_close(req, 1, 0);
                                        } else {
-                                               fprintf(stderr, "Too many open file descriptors. FD_SETSIZE limit exceeded.");
+                                               flog(FCGI_ERROR, "Too many open file descriptors. FD_SETSIZE limit exceeded.");
                                                fcgi_close(req, 1, 0);
                                        }
 #endif
index fa9873022080b68dd68a60c69e08c80443560c46..b7fa210bfecb3d859a4ce9df868bb67381df7c78 100644 (file)
@@ -49,6 +49,12 @@ typedef enum _fcgi_role {
        FCGI_FILTER             = 3
 } fcgi_role;
 
+typedef enum _fcgi_code {
+       FCGI_NOTICE,
+       FCGI_WARNING,
+       FCGI_ERROR,
+} fcgi_code;
+
 typedef enum _fcgi_request_type {
        FCGI_BEGIN_REQUEST              =  1, /* [in]                              */
        FCGI_ABORT_REQUEST              =  2, /* [in]  (not supported)             */
@@ -110,6 +116,8 @@ typedef struct _fcgi_end_request_rec {
 
 typedef void (*fcgi_apply_func)(char *var, unsigned int var_len, char *val, unsigned int val_len, void *arg);
 
+typedef void (*fcgi_logger)(int type, const char *format, ...);
+
 typedef struct _fcgi_request fcgi_request;
 
 int fcgi_init(void);
@@ -122,6 +130,7 @@ fcgi_request* fcgi_init_request(int listen_socket);
 void fcgi_destroy_request(fcgi_request *req);
 int fcgi_accept_request(fcgi_request *req);
 int fcgi_finish_request(fcgi_request *req, int force_close);
+void fcgi_set_logger(fcgi_logger logger);
 
 char* fcgi_getenv(fcgi_request *req, const char* var, int var_len);
 char* fcgi_putenv(fcgi_request *req, char* var, int var_len, char* val);
index b479d4df4e5e96b3e884fda78af6d01c05f42e7f..a60b7c22a99af72fca2e9d89c206b53c9cc6d398 100644 (file)
@@ -219,6 +219,14 @@ static php_cgi_globals_struct php_cgi_globals;
 #define TRANSLATE_SLASHES(path)
 #endif
 
+static void fcgi_log(int type, const char *format, ...) {
+       va_list ap;
+
+       va_start(ap, format);
+       vfprintf(stderr, format, ap);
+       va_end(ap);
+}
+
 static int print_module_info(zval *element)
 {
        zend_module_entry *module = Z_PTR_P(element);
@@ -1928,6 +1936,7 @@ consult the installation file that came with this distribution, or visit \n\
                }
        }
 
+       fcgi_set_logger(fcgi_log);
        if (bindpath) {
                int backlog = 128;
                if (getenv("PHP_FCGI_BACKLOG")) {