From a4e7231711e9dc9d060bc4a0830e84435d126018 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Thu, 11 Apr 2013 08:43:50 +0200 Subject: php-pecl-zendopcache: allow wildcard in blacklist filename and comments in blacklist content --- opcache-blacklist.patch | 178 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 opcache-blacklist.patch (limited to 'opcache-blacklist.patch') diff --git a/opcache-blacklist.patch b/opcache-blacklist.patch new file mode 100644 index 0000000..2bfda57 --- /dev/null +++ b/opcache-blacklist.patch @@ -0,0 +1,178 @@ +From dc416b995f4560f73558d2567c7c45b665b58685 Mon Sep 17 00:00:00 2001 +From: Dmitry Stogov +Date: Tue, 9 Apr 2013 10:51:19 +0400 +Subject: [PATCH] Fixed issue #82 (allow comments in blacklist file, lines + started with ";") + +--- + zend_accelerator_blacklist.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/zend_accelerator_blacklist.c b/zend_accelerator_blacklist.c +index 0ccd62e..764c950 100644 +--- a/zend_accelerator_blacklist.c ++++ b/zend_accelerator_blacklist.c +@@ -212,6 +212,11 @@ void zend_accel_blacklist_load(zend_blacklist *blacklist, char *filename) + continue; + } + ++ /* skip comments */ ++ if (pbuf[0]==';') { ++ continue; ++ } ++ + path_dup = zend_strndup(pbuf, path_length); + expand_filepath(path_dup, real_path TSRMLS_CC); + path_length = strlen(real_path); +-- +1.8.1.5 + +From f80a5538063f470d7c42b386a357d47794108a74 Mon Sep 17 00:00:00 2001 +From: Dmitry Stogov +Date: Wed, 10 Apr 2013 21:41:30 +0400 +Subject: [PATCH] Allow wilcards in opcache.blacklist_filename + +--- + README | 8 ++++---- + tests/blacklist.phpt | 20 ++++++++++++++++++++ + tests/opcache-1.blacklist | 5 +++++ + tests/opcache-2.blacklist | 1 + + zend_accelerator_blacklist.c | 36 ++++++++++++++++++++++++++++++++++++ + 5 files changed, 66 insertions(+), 4 deletions(-) + create mode 100644 tests/blacklist.phpt + create mode 100644 tests/opcache-1.blacklist + create mode 100644 tests/opcache-2.blacklist + +diff --git a/README b/README +index 03386a0..3110012 100644 +--- a/README ++++ b/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/tests/blacklist.phpt b/tests/blacklist.phpt +new file mode 100644 +index 0000000..f4a3472 +--- /dev/null ++++ b/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-- ++ ++--FILE-- ++ ++--EXPECT-- ++Array ++( ++ [0] => /path/to/foo ++ [1] => /path/to/foo2 ++ [2] => /path/to/bar ++) +\ No newline at end of file +diff --git a/tests/opcache-1.blacklist b/tests/opcache-1.blacklist +new file mode 100644 +index 0000000..5f498d6 +--- /dev/null ++++ b/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/tests/opcache-2.blacklist b/tests/opcache-2.blacklist +new file mode 100644 +index 0000000..4f6580a +--- /dev/null ++++ b/tests/opcache-2.blacklist +@@ -0,0 +1 @@ ++/path/to/bar +diff --git a/zend_accelerator_blacklist.c b/zend_accelerator_blacklist.c +index 764c950..b09d0e5 100644 +--- a/zend_accelerator_blacklist.c ++++ b/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 ++#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