Commit:    af967de2afc584c602c0b6d4d6731e411323d94e
Author:    Dmitry Stogov <dmi...@zend.com>         Wed, 10 Apr 2013 21:41:30 
+0400
Parents:   e27039630a2beca3d8a35ba105c6a8d10954094b
Branches:  PHP-5.5 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=af967de2afc584c602c0b6d4d6731e411323d94e

Log:
Allow wilcards in opcache.blacklist_filename

Changed paths:
  M  ext/opcache/README
  A  ext/opcache/tests/blacklist.phpt
  A  ext/opcache/tests/opcache-1.blacklist
  A  ext/opcache/tests/opcache-2.blacklist
  M  ext/opcache/zend_accelerator_blacklist.c


Diff:
diff --git a/ext/opcache/README b/ext/opcache/README
index 03386a0..3110012 100644
--- a/ext/opcache/README
+++ b/ext/opcache/README
@@ -151,13 +151,13 @@ opcache.dups_fix (default "0")
        Enable this hack as a workaround for "Cannot redeclare class" errors.
 
 opcache.blacklist_filename
-       The location of the OPcache blacklist file.
-       The OPcache blacklist file is a text file that holds the names of files
+       The location of the OPcache blacklist file (wildcards allowed).
+       Each OPcache blacklist file is a text file that holds the names of files
        that should not be accelerated. The file format is to add each filename
        to a new line. The filename may be a full path or just a file prefix
        (i.e., /var/www/x  blacklists all the files and directories in /var/www
-       that start with 'x'). Files are usually triggered by one of the 
following
-       three reasons:
+       that start with 'x'). Line starting with a ; are ignored (comments).
+       Files are usually triggered by one of the following three reasons:
        1) Directories that contain auto generated code, like Smarty or ZFW 
cache.
        2) Code that does not work well when accelerated, due to some delayed
           compile time evaluation.
diff --git a/ext/opcache/tests/blacklist.phpt b/ext/opcache/tests/blacklist.phpt
new file mode 100644
index 0000000..f4a3472
--- /dev/null
+++ b/ext/opcache/tests/blacklist.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Blacklist (with glob, quote and comments)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.blacklist_filename={PWD}/opcache-*.blacklist
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$conf = opcache_get_configuration();
+print_r($conf['blacklist']);
+?>
+--EXPECT--
+Array
+(
+    [0] => /path/to/foo
+    [1] => /path/to/foo2
+    [2] => /path/to/bar
+)
\ No newline at end of file
diff --git a/ext/opcache/tests/opcache-1.blacklist 
b/ext/opcache/tests/opcache-1.blacklist
new file mode 100644
index 0000000..5f498d6
--- /dev/null
+++ b/ext/opcache/tests/opcache-1.blacklist
@@ -0,0 +1,5 @@
+; comments are allowed in blacklist file
+; and empty line are ignored
+
+/path/to/foo
+"/path/to/foo2"
\ No newline at end of file
diff --git a/ext/opcache/tests/opcache-2.blacklist 
b/ext/opcache/tests/opcache-2.blacklist
new file mode 100644
index 0000000..4f6580a
--- /dev/null
+++ b/ext/opcache/tests/opcache-2.blacklist
@@ -0,0 +1 @@
+/path/to/bar
diff --git a/ext/opcache/zend_accelerator_blacklist.c 
b/ext/opcache/zend_accelerator_blacklist.c
index 764c950..b09d0e5 100644
--- a/ext/opcache/zend_accelerator_blacklist.c
+++ b/ext/opcache/zend_accelerator_blacklist.c
@@ -36,6 +36,14 @@
 # define REGEX_MODE (REG_EXTENDED|REG_NOSUB)
 #endif
 
+#ifdef HAVE_GLOB
+#ifdef PHP_WIN32
+#include "win32/glob.h"
+#else
+#include <glob.h>
+#endif
+#endif
+
 #define ZEND_BLACKLIST_BLOCK_SIZE      32
 
 struct _zend_regexp_list {
@@ -168,7 +176,11 @@ static inline void 
zend_accel_blacklist_allocate(zend_blacklist *blacklist)
        }
 }
 
+#ifdef HAVE_GLOB
+static void zend_accel_blacklist_loadone(zend_blacklist *blacklist, char 
*filename)
+#else
 void zend_accel_blacklist_load(zend_blacklist *blacklist, char *filename)
+#endif
 {
        char buf[MAXPATHLEN + 1], real_path[MAXPATHLEN + 1];
        FILE *fp;
@@ -238,6 +250,30 @@ void zend_accel_blacklist_load(zend_blacklist *blacklist, 
char *filename)
        zend_accel_blacklist_update_regexp(blacklist);
 }
 
+#ifdef HAVE_GLOB
+void zend_accel_blacklist_load(zend_blacklist *blacklist, char *filename)
+{
+       glob_t globbuf;
+       int    ret, i;
+
+       memset(&globbuf, 0, sizeof(glob_t));
+
+       ret = glob(filename, 0, NULL, &globbuf);
+#ifdef GLOB_NOMATCH
+       if (ret == GLOB_NOMATCH || !globbuf.gl_pathc) {
+#else
+       if (!globbuf.gl_pathc) {
+#endif
+               zend_accel_error(ACCEL_LOG_WARNING, "No blacklist file found 
matching: %s\n", filename);
+       } else {
+               for(i=0 ; i<globbuf.gl_pathc; i++) {
+                       zend_accel_blacklist_loadone(blacklist, 
globbuf.gl_pathv[i]);
+               }
+               globfree(&globbuf);
+       }
+}
+#endif
+
 zend_bool zend_accel_blacklist_is_blacklisted(zend_blacklist *blacklist, char 
*verify_path)
 {
        int ret = 0;


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to