Hi Stas,

On Sat, Mar 16, 2013 at 9:50 PM, Stas Malyshev <smalys...@sugarcrm.com>wrote:

> Hi!
>
> > Commit:    92430bcf5dd76bf9b12363693efcc471b3527618
> > Author:    Dmitry Stogov <dmi...@zend.com>         Sat, 16 Mar 2013
> 16:08:11 +0400
> > Parents:   ac05e68f5523a2cd1b4972f43188e65c29ef4ae4
> > Branches:  PHP-5.5 master
> >
> > Link:
> http://git.php.net/?p=php-src.git;a=commitdiff;h=92430bcf5dd76bf9b12363693efcc471b3527618
> >
> > Log:
> > Fixed compatibility with ext/phar
> >
> > Changed paths:
> >   M  ext/opcache/ZendAccelerator.c
> >   M  ext/opcache/zend_accelerator_module.c
> >
> >
> > Diff:
> > diff --git a/ext/opcache/ZendAccelerator.c
> b/ext/opcache/ZendAccelerator.c
> > index 17eac09..daf80ce 100644
> > --- a/ext/opcache/ZendAccelerator.c
> > +++ b/ext/opcache/ZendAccelerator.c
> > @@ -1221,7 +1221,9 @@ static zend_persistent_script
> *compile_and_cache_file(zend_file_handle *file_han
> >       }
> >
> >  #if ZEND_EXTENSION_API_NO >= PHP_5_3_X_API_NO
> > -     if (file_handle->type == ZEND_HANDLE_STREAM) {
> > +     if (file_handle->type == ZEND_HANDLE_STREAM &&
> > +         (!strstr(file_handle->filename, ".phar") ||
> > +          strstr(file_handle->filename, "://"))) {
> >               char *buf;
> >               size_t size;
>
> I think we here are taking too broad approach. This disables O+ for any
> file that is loaded via a stream, if I understand it correctly - but
>

First of all these checks are not going to disable file caching. They are
used to disable file preloading using zend_stream_fixup().
It's necessary to preload STREAMS because their reading at compile-time may
cause some user callback invocation that may be executed in wrong context.


> many streams are just fine, e.g. file://, and many user streams that
> don't do weird things but do normal work like reading files, etc. can
> probably be compatible. In fact, it's be very good idea to make phar
> play nice with O+ - otherwise any phar distro automatically gets
> performance penalty. What's the reason phar is excluded?
>

The test ext/phar/tests/phar_mount.phpt was failed before the fix.

Also, the check itself is wrong - it checks for filename which contains
> .phar anywhere, so something like /htdocs/moses.vs.pharaoh/index.php
> would be wrongly considered a phar file.
>

This is the inverted check taken from ext/phar/phar.c:3337
phar_compile_file().
I agree it's not accurate.

Thanks. Dmitry.


> --
> Stanislav Malyshev, Software Architect
> SugarCRM: http://www.sugarcrm.com/
> (408)454-6900 ext. 227
>

Reply via email to