summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemi Collet <fedora@famillecollet.com>2013-04-11 08:43:50 +0200
committerRemi Collet <fedora@famillecollet.com>2013-04-11 08:43:50 +0200
commita4e7231711e9dc9d060bc4a0830e84435d126018 (patch)
tree526923fda6f318a266d32003725c7cacb99298ff
parent747e2868fe13a87893045ad4ade503040a5d988b (diff)
php-pecl-zendopcache: allow wildcard in blacklist filename and comments in blacklist content
-rw-r--r--opcache-blacklist.patch178
-rw-r--r--opcache-default.blacklist11
-rw-r--r--opcache.ini11
-rw-r--r--php-pecl-zendopcache-dev.spec21
-rw-r--r--php-pecl-zendopcache.spec21
5 files changed, 231 insertions, 11 deletions
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 <dmitry@zend.com>
+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 <dmitry@zend.com>
+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--
++<?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/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 <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;
+--
+1.8.1.5
+
diff --git a/opcache-default.blacklist b/opcache-default.blacklist
new file mode 100644
index 0000000..0cc2e18
--- /dev/null
+++ b/opcache-default.blacklist
@@ -0,0 +1,11 @@
+; The 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'). 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.
+; 3) Code that triggers an OPcache bug.
+
diff --git a/opcache.ini b/opcache.ini
index 4498e68..ef6e0e0 100644
--- a/opcache.ini
+++ b/opcache.ini
@@ -60,13 +60,10 @@ opcache.fast_shutdown=1
;opcache.inherited_hack=1
;opcache.dups_fix=0
-; The location of the OPcache blacklist file.
-; The 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').
-;opcache.blacklist_filename=
+; 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.
+opcache.blacklist_filename=/etc/php.d/opcache*.blacklist
; Allows exclusion of large files from being cached. By default all files
; are cached.
diff --git a/php-pecl-zendopcache-dev.spec b/php-pecl-zendopcache-dev.spec
index 64fc764..4812c91 100644
--- a/php-pecl-zendopcache-dev.spec
+++ b/php-pecl-zendopcache-dev.spec
@@ -9,7 +9,7 @@
Name: php-pecl-%{pecl_name}
Version: 7.0.1
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: The Zend OPcache
Group: Development/Libraries
@@ -23,6 +23,11 @@ Source0: http://pecl.php.net/get/%{pecl_name}-%{version}.tgz
# this extension must be loaded before XDebug
# So "opcache" if before "xdebug"
Source1: %{plug_name}.ini
+Source2: %{plug_name}-default.blacklist
+
+# Allow comments in blacklist content
+# Allow wildcard in blacklist filename
+Patch0: %{plug_name}-blacklist.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: php-devel >= 5.2.0
@@ -69,12 +74,16 @@ sed -e '/release/s/7.0.0/%{version}%{prever}/' \
mv %{pecl_name}-%{version} NTS
%endif
+cd NTS
+%patch0 -p1 -b .blacklist
+
# Sanity check, really often broken
-extver=$(sed -n '/#define ACCELERATOR_VERSION/{s/.* "//;s/".*$//;p}' NTS/ZendAccelerator.h)
+extver=$(sed -n '/#define ACCELERATOR_VERSION/{s/.* "//;s/".*$//;p}' ZendAccelerator.h)
if test "x${extver}" != "x%{version}%{?prever:-%{prever}}"; then
: Error: Upstream extension version is ${extver}, expecting %{version}%{?prever:-%{prever}}.
exit 1
fi
+cd ..
# Duplicate source tree for NTS / ZTS build
cp -pr NTS ZTS
@@ -111,6 +120,9 @@ sed -e 's:@EXTPATH@:%{php_ztsextdir}:' \
make -C ZTS install INSTALL_ROOT=%{buildroot}
+# The default Zend OPcache blacklist file
+install -D -p -m 644 %{SOURCE2} %{buildroot}%{php_inidir}/%{plug_name}-default.blacklist
+
# Install XML package description
install -D -m 644 package.xml %{buildroot}%{pecl_xmldir}/%{name}.xml
@@ -156,6 +168,7 @@ fi
%files
%defattr(-,root,root,-)
%doc NTS/{LICENSE,README}
+%config(noreplace) %{php_inidir}/%{plug_name}-default.blacklist
%config(noreplace) %{php_inidir}/%{plug_name}.ini
%{php_extdir}/%{plug_name}.so
@@ -166,6 +179,10 @@ fi
%changelog
+* Thu Apr 11 2013 Remi Collet <rcollet@redhat.com> - 7.0.1-2
+- allow wildcard in opcache.blacklist_filename and provide
+ default /etc/php.d/opcache-default.blacklist
+
* Mon Mar 25 2013 Remi Collet <remi@fedoraproject.org> - 7.0.1-1
- official PECL release, version 7.0.1 (beta)
- rename to php-pecl-zendopcache
diff --git a/php-pecl-zendopcache.spec b/php-pecl-zendopcache.spec
index a26ed21..c09c252 100644
--- a/php-pecl-zendopcache.spec
+++ b/php-pecl-zendopcache.spec
@@ -8,7 +8,7 @@
Name: php-pecl-%{pecl_name}
Version: 7.0.1
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: The Zend OPcache
Group: Development/Libraries
@@ -18,6 +18,11 @@ Source0: http://pecl.php.net/get/%{pecl_name}-%{version}.tgz
# this extension must be loaded before XDebug
# So "opcache" if before "xdebug"
Source1: %{plug_name}.ini
+Source2: %{plug_name}-default.blacklist
+
+# Allow comments in blacklist content
+# Allow wildcard in blacklist filename
+Patch0: %{plug_name}-blacklist.patch
BuildRequires: php-devel >= 5.2.0
BuildRequires: php-pear
@@ -54,12 +59,16 @@ bytecode optimization patterns that make code execution faster.
%setup -q -c
mv %{pecl_name}-%{version} NTS
+cd NTS
+%patch0 -p1 -b .blacklist
+
# Sanity check, really often broken
-extver=$(sed -n '/#define ACCELERATOR_VERSION/{s/.* "//;s/".*$//;p}' NTS/ZendAccelerator.h)
+extver=$(sed -n '/#define ACCELERATOR_VERSION/{s/.* "//;s/".*$//;p}' ZendAccelerator.h)
if test "x${extver}" != "x%{version}%{?prever:-%{prever}}"; then
: Error: Upstream extension version is ${extver}, expecting %{version}%{?prever:-%{prever}}.
exit 1
fi
+cd ..
%if %{with_zts}
# Duplicate source tree for NTS / ZTS build
@@ -100,6 +109,9 @@ sed -e 's:@EXTPATH@:%{php_ztsextdir}:' \
make -C ZTS install INSTALL_ROOT=%{buildroot}
%endif
+# The default Zend OPcache blacklist file
+install -D -p -m 644 %{SOURCE2} %{buildroot}%{php_inidir}/%{plug_name}-default.blacklist
+
# Install XML package description
install -D -m 644 package.xml %{buildroot}%{pecl_xmldir}/%{name}.xml
@@ -142,6 +154,7 @@ fi
%files
%doc NTS/{LICENSE,README}
+%config(noreplace) %{php_inidir}/%{plug_name}-default.blacklist
%config(noreplace) %{php_inidir}/%{plug_name}.ini
%{php_extdir}/%{plug_name}.so
@@ -154,6 +167,10 @@ fi
%changelog
+* Thu Apr 11 2013 Remi Collet <rcollet@redhat.com> - 7.0.1-2
+- allow wildcard in opcache.blacklist_filename and provide
+ default /etc/php.d/opcache-default.blacklist
+
* Mon Mar 25 2013 Remi Collet <remi@fedoraproject.org> - 7.0.1-1
- official PECL release, version 7.0.1 (beta)
- rename to php-pecl-zendopcache