@@ -209,62 +209,14 @@ static void php_phongo_log(mongoc_log_level_t log_level, const char *log_domain,
209
209
case MONGOC_LOG_LEVEL_DEBUG :
210
210
case MONGOC_LOG_LEVEL_TRACE :
211
211
{
212
- int fd = -1 ;
213
212
time_t t ;
214
213
char * dt = NULL ;
215
214
216
- if (!MONGODB_G (debug ) || !strlen (MONGODB_G (debug ))) {
217
- return ;
218
- }
219
- if (strcasecmp (MONGODB_G (debug ), "off" ) == 0 ) {
220
- return ;
221
- }
222
- if (strcasecmp (MONGODB_G (debug ), "0" ) == 0 ) {
223
- return ;
224
- }
225
-
226
- #define PHONGO_DEBUG_LOG_FORMAT "[%s] %10s: %-8s> %s\n"
227
-
228
215
time (& t );
229
216
dt = php_format_date ((char * )"Y-m-d\\TH:i:sP" , strlen ("Y-m-d\\TH:i:sP" ), t , 0 TSRMLS_CC );
230
217
231
- if (strcasecmp (MONGODB_G (debug ), "stderr" ) == 0 ) {
232
- fprintf (stderr , PHONGO_DEBUG_LOG_FORMAT , dt , log_domain , mongoc_log_level_str (log_level ), message );
233
- } else if (strcasecmp (MONGODB_G (debug ), "stdout" ) == 0 ) {
234
- php_printf (PHONGO_DEBUG_LOG_FORMAT , dt , log_domain , mongoc_log_level_str (log_level ), message );
235
- } else if (MONGODB_G (debug_filename )) {
236
- fd = VCWD_OPEN_MODE (MONGODB_G (debug_filename ), O_CREAT | O_APPEND | O_WRONLY , 0644 );
237
- } else {
238
- char * prefix ;
239
- int len ;
240
- char * filename ;
241
-
242
- len = spprintf (& prefix , 0 , "PHONGO-%ld" , t );
243
-
244
- if (strcasecmp (MONGODB_G (debug ), "on" ) == 0 || strcasecmp (MONGODB_G (debug ), "1" ) == 0 ) {
245
- fd = php_open_temporary_fd (NULL , prefix , & filename TSRMLS_CC );
246
- } else {
247
- fd = php_open_temporary_fd (MONGODB_G (debug ), prefix , & filename TSRMLS_CC );
248
- }
249
- if (fd != -1 ) {
250
- MONGODB_G (debug_filename ) = pestrdup (filename , 1 );
251
- efree (filename );
252
- }
253
- efree (prefix );
254
- }
255
-
256
- if (fd != -1 ) {
257
- char * tmp ;
258
- int len ;
259
-
260
- len = spprintf (& tmp , 0 , PHONGO_DEBUG_LOG_FORMAT , dt , log_domain , mongoc_log_level_str (log_level ), message );
261
- #ifdef PHP_WIN32
262
- php_flock (fd , 2 );
263
- #endif
264
- php_ignore_value (write (fd , tmp , len ));
265
- efree (tmp );
266
- close (fd );
267
- }
218
+ fprintf (MONGODB_G (debug_fd ), "[%s] %10s: %-8s> %s\n" , dt , log_domain , mongoc_log_level_str (log_level ), message );
219
+ fflush (MONGODB_G (debug_fd ));
268
220
efree (dt );
269
221
} break ;
270
222
}
@@ -2283,9 +2235,78 @@ void _phongo_debug_bson(bson_t *bson)
2283
2235
2284
2236
/* {{{ M[INIT|SHUTDOWN] R[INIT|SHUTDOWN] G[INIT|SHUTDOWN] MINFO INI */
2285
2237
2238
+ ZEND_INI_MH (OnUpdateDebug )
2239
+ {
2240
+ void * * * ctx = NULL ;
2241
+ char * tmp_dir = NULL ;
2242
+
2243
+ TSRMLS_SET_CTX (ctx );
2244
+
2245
+ /* Close any previously open log files */
2246
+ if (MONGODB_G (debug_fd )) {
2247
+ if (MONGODB_G (debug_fd ) != stderr && MONGODB_G (debug_fd ) != stdout ) {
2248
+ fclose (MONGODB_G (debug_fd ));
2249
+ }
2250
+ MONGODB_G (debug_fd ) = NULL ;
2251
+ }
2252
+
2253
+ if (!new_value_length
2254
+ || strcasecmp ("0" , new_value ) == 0
2255
+ || strcasecmp ("off" , new_value ) == 0
2256
+ || strcasecmp ("no" , new_value ) == 0
2257
+ || strcasecmp ("false" , new_value ) == 0
2258
+ ) {
2259
+ mongoc_log_trace_disable ();
2260
+ mongoc_log_set_handler (NULL , NULL );
2261
+
2262
+ return OnUpdateString (entry , new_value , new_value_length , mh_arg1 , mh_arg2 , mh_arg3 , stage TSRMLS_CC );
2263
+ }
2264
+
2265
+
2266
+ if (strcasecmp (new_value , "stderr" ) == 0 ) {
2267
+ MONGODB_G (debug_fd ) = stderr ;
2268
+ } else if (strcasecmp (new_value , "stdout" ) == 0 ) {
2269
+ MONGODB_G (debug_fd ) = stdout ;
2270
+ } else if (
2271
+ strcasecmp ("1" , new_value ) == 0
2272
+ || strcasecmp ("on" , new_value ) == 0
2273
+ || strcasecmp ("yes" , new_value ) == 0
2274
+ || strcasecmp ("true" , new_value ) == 0
2275
+ ) {
2276
+ tmp_dir = NULL ;
2277
+ } else {
2278
+ tmp_dir = new_value ;
2279
+ }
2280
+
2281
+ if (!MONGODB_G (debug_fd )) {
2282
+ time_t t ;
2283
+ int fd = -1 ;
2284
+ char * prefix ;
2285
+ int len ;
2286
+ char * filename ;
2287
+
2288
+ time (& t );
2289
+ len = spprintf (& prefix , 0 , "PHONGO-%ld" , t );
2290
+
2291
+ fd = php_open_temporary_fd (tmp_dir , prefix , & filename TSRMLS_CC );
2292
+ if (fd != -1 ) {
2293
+ MONGODB_G (debug_fd ) = VCWD_FOPEN (filename , "a" );
2294
+ }
2295
+ efree (filename );
2296
+ efree (prefix );
2297
+ close (fd );
2298
+ }
2299
+
2300
+ mongoc_log_trace_enable ();
2301
+ mongoc_log_set_handler (php_phongo_log , ctx );
2302
+
2303
+ return OnUpdateString (entry , new_value , new_value_length , mh_arg1 , mh_arg2 , mh_arg3 , stage TSRMLS_CC );
2304
+ }
2305
+
2306
+
2286
2307
/* {{{ INI entries */
2287
2308
PHP_INI_BEGIN ()
2288
- { 0 , PHP_INI_ALL , (char * )PHONGO_DEBUG_INI , sizeof (PHONGO_DEBUG_INI ), OnUpdateString , (void * ) XtOffsetOf (zend_mongodb_globals , debug ), (void * ) & mglo , NULL , (char * )PHONGO_DEBUG_INI_DEFAULT , sizeof (PHONGO_DEBUG_INI_DEFAULT )- 1 , NULL , 0 , 0 , 0 , NULL },
2309
+ { 0 , PHP_INI_ALL , (char * )PHONGO_DEBUG_INI , sizeof (PHONGO_DEBUG_INI ), OnUpdateDebug , (void * ) XtOffsetOf (zend_mongodb_globals , debug ), (void * ) & mglo , NULL , (char * )PHONGO_DEBUG_INI_DEFAULT , sizeof (PHONGO_DEBUG_INI_DEFAULT )- 1 , NULL , 0 , 0 , 0 , NULL },
2289
2310
PHP_INI_END ()
2290
2311
/* }}} */
2291
2312
@@ -2298,8 +2319,7 @@ PHP_GINIT_FUNCTION(mongodb)
2298
2319
php_phongo_realloc ,
2299
2320
php_phongo_free ,
2300
2321
};
2301
- mongodb_globals -> debug = NULL ;
2302
- mongodb_globals -> debug_filename = NULL ;
2322
+ mongodb_globals -> debug_fd = NULL ;
2303
2323
mongodb_globals -> bsonMemVTable = bsonMemVTable ;
2304
2324
2305
2325
}
@@ -2308,8 +2328,6 @@ PHP_GINIT_FUNCTION(mongodb)
2308
2328
/* {{{ PHP_MINIT_FUNCTION */
2309
2329
PHP_MINIT_FUNCTION (mongodb )
2310
2330
{
2311
- void * * * ctx = NULL ;
2312
- TSRMLS_SET_CTX (ctx );
2313
2331
(void )type ; /* We don't care if we are loaded via dl() or extension= */
2314
2332
2315
2333
@@ -2319,7 +2337,6 @@ PHP_MINIT_FUNCTION(mongodb)
2319
2337
mongoc_init ();
2320
2338
/* Initialize libbson */
2321
2339
bson_mem_set_vtable (& MONGODB_G (bsonMemVTable ));
2322
- mongoc_log_set_handler (php_phongo_log , ctx );
2323
2340
2324
2341
/* Prep default object handlers to be used when we register the classes */
2325
2342
memcpy (& phongo_std_object_handlers , zend_get_std_object_handlers (), sizeof (zend_object_handlers ));
@@ -2402,9 +2419,9 @@ PHP_MSHUTDOWN_FUNCTION(mongodb)
2402
2419
PHP_GSHUTDOWN_FUNCTION (mongodb )
2403
2420
{
2404
2421
mongodb_globals -> debug = NULL ;
2405
- if (mongodb_globals -> debug_filename ) {
2406
- pefree (mongodb_globals -> debug_filename , 1 );
2407
- mongodb_globals -> debug_filename = NULL ;
2422
+ if (mongodb_globals -> debug_fd ) {
2423
+ fclose (mongodb_globals -> debug_fd );
2424
+ mongodb_globals -> debug_fd = NULL ;
2408
2425
}
2409
2426
}
2410
2427
/* }}} */
0 commit comments