goaop / framework

:gem: Go! AOP PHP - modern aspect-oriented framework for the new level of software development
go.aopphp.com
MIT License
1.66k stars 163 forks source link

AOP is not working with ZendOptimizer+ in the debug mode #59

Closed mpoiriert closed 11 years ago

mpoiriert commented 11 years ago

I'm trying to do a integration in a framework I'm bulding (Im using symfony HttpFoundation)

here is what I got so far

<?php

include __DIR__ . '/../vendor/lisachenko/go-aop-php/src/Go/Core/AspectKernel.php';

use Go\Core\AspectKernel;
use Go\Core\AspectContainer;

/**
 * Application Aspect Kernel
 */
class ApplicationAspectKernel extends AspectKernel
{

    /**
     * Configure an AspectContainer with advisors, aspects and pointcuts
     *
     * @param AspectContainer $container
     *
     * @return void
     */
    protected function configureAop(AspectContainer $container)
    {
        $container->registerAspect(new Nucleus\Cache\Caching());
    }
}

ApplicationAspectKernel::getInstance()->init(array(
    'appLoader' => __DIR__ . '/../vendor/autoload.php',
    // Configuration for autoload namespaces
    'autoloadPaths' => array(
        'Go' => __DIR__ . '/../vendor/lisachenko/go-aop-php/src/',
        'TokenReflection' => __DIR__ . '/../vendor/andrewsville/php-token-reflection/',
        'Doctrine\\Common' => __DIR__ . '/../vendor/doctrine/common/lib/',
        'Dissect' => __DIR__ . '/../vendor/jakubledl/dissect/src/'
    ),
    'includePaths' => array(
        __DIR__ . '/../vendor',
        __DIR__ . '/../src'
    )
));

$request = Symfony\Component\HttpFoundation\Request::createFromGlobals();

And a Aspect for testing

<?php 

namespace Nucleus\Cache;

use Go\Aop\Aspect;
use Go\Aop\Intercept\FieldAccess;
use Go\Aop\Intercept\MethodInvocation;
use Go\Lang\Annotation\After;
use Go\Lang\Annotation\Before;
use Go\Lang\Annotation\Around;
use Go\Lang\Annotation\Pointcut;

/**
 * Monitor aspect
 */
class Caching implements Aspect
{

    /**
     * Method that will be called before real method
     *
     * @param MethodInvocation $invocation Invocation
     * @Before("execution(public *->*(*))")
     */
    public function beforeMethodExecution(MethodInvocation $invocation)
    {
        $obj = $invocation->getThis();
        echo 'Calling Before Interceptor for method: ',
             is_object($obj) ? get_class($obj) : $obj,
             $invocation->getMethod()->isStatic() ? '::' : '->',
             $invocation->getMethod()->getName(),
             '()',
             ' with arguments: ',
             json_encode($invocation->getArguments()),
             "<br>\n";
    }
}

nothing is happening...

I check that the filter is properly registered using the stream_get_filters function;

array (size=13)
  0 => string 'convert.iconv.*' (length=15)
  1 => string 'string.rot13' (length=12)
  2 => string 'string.toupper' (length=14)
  3 => string 'string.tolower' (length=14)
  4 => string 'string.strip_tags' (length=17)
  5 => string 'convert.*' (length=9)
  6 => string 'consumed' (length=8)
  7 => string 'dechunk' (length=7)
  8 => string 'zlib.*' (length=6)
  9 => string 'bzip2.*' (length=7)
  10 => string 'mcrypt.*' (length=8)
  11 => string 'mdecrypt.*' (length=10)
  12 => string 'go.source.transforming.loader' (length=29)

And the path return by FilterInjectorTransformer::rewrite

php://filter/read=go.source.transforming.loader/resource=D:\nucleus\nucleus\web/../vendor/autoload.php

The filter function of SourceTransformingLoader is never call, probably whe it doesn't work...

Is there something I don't do correctly ? Or maybe a comflict with other filter and it never reach th filter that is registered ?

lisachenko commented 11 years ago

Thank you for a detailed report!

There is one small mistake in the pointcut expression: execution(public *->*(*)). This pointcut will match only classes at the global namespace, such as Test or Another_Test. If you want to intercept all public methods from different namespaces, then you should use double asterisk (_) for a class name part of pointcut: `execution(public ->(_))`.

mpoiriert commented 11 years ago

It didn't fix the problem :(

What I do find weird is that the call in the intialization flow

class SourceTransformingLoader 
{
    // ... //
    public function load($source)
    {
        return include FilterInjectorTransformer::rewrite($source);
    }
}

Doesn't trigger the filter method call registered by the stream...

lisachenko commented 11 years ago

Please, could you add a 'debug' => true into the kernel initialization. One more question: have you replaced autoload include in the bootstrap file with aspect autoload?

P.S. It would be nice to create a cache directory for a better experience and performance.

lisachenko commented 11 years ago

You can also try to use an empty value for the includePaths option. This option works as a white list of directories where AOP should be applied, but if there is a mistake in the paths then AOP won't work at all.

Next version of framework (0.4.0) will have a transparent autoloading with composer, so configuration will be easier. BTW, which version of framework do you use?

mpoiriert commented 11 years ago

I've put the debug => true I add a cache directory I removed the includePaths value I use it with composer so probably the last version: "lisachenko/go-aop-php": "*"

The problem is probably due to the appLoader

'appLoader' => __DIR__ . '/../vendor/autoload.php',

This is pointing on the autoload in the vendor directory of composer.

If I'm not putting anything in this configuration I get

Warning: include(php://filter/read=go.source.transforming.loader/resource=D:\nucleus\nucleus\web): failed to open stream: operation failed in D:\nucleus\nucleus\vendor\lisachenko\go-aop-php\src\Go\Instrument\ClassLoading\SourceTransformingLoader.php on line 146

And then it crash because class cannot be found (no autoload have been registered)

lisachenko commented 11 years ago

So, it looks like the path to composer vendor/autoload.php is incorrect so kernel can not load it correctly. Just try to look at var_dump(realpath(__DIR__ . '/../vendor/autoload.php')); This shouldn't be false.

mpoiriert commented 11 years ago

The path is good

with this the class are loaded but no aspect.

'appLoader' => realpath(__DIR__ . '/../vendor/autoload.php'),

Should the

 return include FilterInjectorTransformer::rewrite($source);

Trigger the filter method ? In my case it doesn't... but the file gets loaded

could one of the previous registered stream filter stop the chain and it never reach go.source.transforming.loader ?

0 => string 'convert.iconv._' (length=15) 1 => string 'string.rot13' (length=12) 2 => string 'string.toupper' (length=14) 3 => string 'string.tolower' (length=14) 4 => string 'string.striptags' (length=17) 5 => string 'convert.' (length=9) 6 => string 'consumed' (length=8) 7 => string 'dechunk' (length=7) 8 => string 'zlib.' (length=6) 9 => string 'bzip2.' (length=7) 10 => string 'mcrypt.' (length=8) 11 => string 'mdecrypt.' (length=10) 12 => string 'go.source.transforming.loader' (length=29)

lisachenko commented 11 years ago

Very strange ) Is there a file vendor/autoload.php in the cache directory?

Previous stream filters can not affect the behavior of my filter, so include FilterInjectorTransformer::rewrite($source); should trigger the filter. This can be checked with XDebug

Unfortunately, I haven't time now to help you with issue today, but i will look at this issue tomorrow.

mpoiriert commented 11 years ago

Nothing in the cache directory.

The proble is really around the filter thing I'm sure.

I'll check on my side a bit more and let you know what I've found if I don't find a solution I'll wait for your help tomorrow...

Thanks !

mpoiriert commented 11 years ago

I've use readfile with the same path and it did trigger the filter. Look's like it doesn't get trigger by the include instruction...

lisachenko commented 11 years ago

Haven't ideas about this behaviour... include and readfile() are using the same API in internals. Are there any special configurations for safety in PHP, Suhosin or opcode cachers? What is the version of PHP?

lisachenko commented 11 years ago

Additional traces for warnings and fatals can help me to understand the reason for this issue. Please, attach them to this topic. Thanks!

mpoiriert commented 11 years ago

Finally. Removing the debug and keeping a cache directory made everything work.

From what I understand this code will create the file in the cache and the file_get_contents will create the proper file the first time.

if (!file_exists($newResource)) {
        file_get_contents(self::PHP_FILTER_READ . self::$filterName . "/resource=" . $resource);
}

Than since the file is there everything is working.

A rewriting of the flow may be needed to fix that... Since I cannot put the debug on I need to empty the generated folder directory if I'm working on something that can impact aspects...

mpoiriert commented 11 years ago

I don't get any error if I'm putting the debug to on and the cache folder, but nothing is appening..

Here's my PHPInfo

phpinfo() PHP Version => 5.4.11

System => Windows NT MARTINP 6.2 build 9200 (Unknown Windows version Home Premium Edition) i586 Build Date => Feb 12 2013 14:07:24 Compiler => MSVC9 (Visual C++ 2008) Architecture => x86 Configure Command => cscript /nologo configure.js "--disable-phar" "--disable-ipv6" "--disable-zts" "--disable-bcmath" "--disable-calendar" "--disable-odbc" "--disable-tokenizer" "--without-wddx" "--enable-debug-pack" "--enable-cli-win32" "--enable-pdo" "--enable-xmlreader" "--enable-xmlwriter" "--enable-cgi" "--with-php-build" "--with-libxml" "--with-pdo-sqlite" "--with-openssl" "--with-sqlite3" Server API => Command Line Interface Virtual Directory Support => disabled Configuration File (php.ini) Path => C:\Windows Loaded Configuration File => D:\Zend\ZendServer\etc\php.ini Scan this dir for additional .ini files => (none) Additional .ini files parsed => (none) PHP API => 20100412 PHP Extension => 20100525 Zend Extension => 220100525 Zend Extension Build => API220100525,NTS,VC9 PHP Extension Build => API20100525,NTS,VC9 Debug Build => no Thread Safety => disabled Zend Signal Handling => disabled Zend Memory Manager => enabled Zend Multibyte Support => provided by mbstring IPv6 Support => disabled DTrace Support => disabled

Registered PHP Streams => https, ftps, php, file, glob, data, http, ftp, zip, compress.zlib, compress.bzip2, phar Registered Stream Socket Transports => tcp, udp, ssl, sslv3, sslv2, tls Registered Stream Filters => convert.iconv._, string.rot13, string.toupper, string.tolower, string.striptags, convert., consumed, dechunk, zlib., bzip2., mcrypt., mdecrypt.

This program makes use of the Zend Scripting Language Engine: Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with Xdebug v2.2.2, Copyright (c) 2002-2013, by Derick Rethans with Zend Extension Manager v6.0.0, Copyright (c) 2003-2013, by Zend Technologies


Configuration

bcmath

BCMath support => enabled

Directive => Local Value => Master Value bcmath.scale => 0 => 0

bz2

BZip2 Support => Enabled Stream Wrapper support => compress.bzip2:// Stream Filter support => bzip2.decompress, bzip2.compress BZip2 Version => 1.0.6, 6-Sept-2010

calendar

Calendar support => enabled

com_dotnet

COM support => enabled DCOM support => disabled .Net support => enabled

Directive => Local Value => Master Value com.allow_dcom => 0 => 0 com.autoregister_casesensitive => 1 => 1 com.autoregister_typelib => 0 => 0 com.autoregister_verbose => 0 => 0 com.code_page => no value => no value com.typelib_file => no value => no value

Core

PHP Version => 5.4.11

Directive => Local Value => Master Value allow_url_fopen => On => On allow_url_include => Off => Off always_populate_raw_post_data => Off => Off arg_separator.input => & => & arg_separator.output => & => & asp_tags => Off => Off auto_append_file => no value => no value auto_globals_jit => On => On auto_prepend_file => no value => no value browscap => no value => no value default_charset => no value => no value default_mimetype => text/html => text/html disable_classes => no value => no value disable_functions => no value => no value display_errors => STDOUT => STDOUT display_startup_errors => On => On doc_root => no value => no value docref_ext => no value => no value docref_root => no value => no value enable_dl => Off => Off enable_post_data_reading => On => On error_append_string => no value => no value error_log => D:\Zend\ZendServer\logs\php.log => D:\Zend\ZendServer\logs\php.log error_prepend_string => no value => no value error_reporting => 32767 => 32767 exit_on_timeout => Off => Off expose_php => On => On extension_dir => D:\Zend\ZendServer\lib\phpext => D:\Zend\ZendServer\lib\phpext file_uploads => On => On highlight.comment => #FF8000 => #FF8000 highlight.default => #0000BB => #0000BB highlight.html => #000000 => #000000 highlight.keyword => #007700 => #007700 highlight.string => #DD0000 => #DD0000 html_errors => Off => Off ignore_repeated_errors => Off => Off ignore_repeated_source => Off => Off ignore_user_abort => Off => Off implicit_flush => On => On include_path => .;D:\pear\pear => .;D:\pear\pear log_errors => On => On log_errors_max_len => 1024 => 1024 mail.add_x_header => On => On mail.force_extra_parameters => no value => no value mail.log => no value => no value max_execution_time => 0 => 0 max_file_uploads => 20 => 20 max_input_nesting_level => 64 => 64 max_input_time => -1 => -1 max_input_vars => 1000 => 1000 memory_limit => 128M => 128M open_basedir => no value => no value output_buffering => 0 => 0 output_handler => no value => no value post_max_size => 100M => 100M precision => 14 => 14 realpath_cache_size => 256k => 256k realpath_cache_ttl => 120 => 120 register_argc_argv => On => On report_memleaks => On => On report_zend_debug => Off => Off request_order => GP => GP sendmail_from => no value => no value sendmail_path => no value => no value serialize_precision => 17 => 17 short_open_tag => On => On SMTP => localhost => localhost smtp_port => 25 => 25 sql.safe_mode => Off => Off track_errors => On => On unserialize_callback_func => no value => no value upload_max_filesize => 100M => 100M upload_tmp_dir => no value => no value user_dir => no value => no value user_ini.cache_ttl => 300 => 300 user_ini.filename => .user.ini => .user.ini variables_order => GPCS => GPCS windows.show_crt_warning => Off => Off xmlrpc_error_number => 0 => 0 xmlrpc_errors => Off => Off zend.detect_unicode => On => On zend.enable_gc => On => On zend.multibyte => Off => Off zend.script_encoding => no value => no value

ctype

ctype functions => enabled

curl

cURL support => enabled cURL Information => 7.25.0 Age => 3 Features AsynchDNS => Yes Debug => No GSS-Negotiate => No IDN => No IPv6 => No Largefile => Yes NTLM => Yes SPNEGO => No SSL => Yes SSPI => No krb4 => No libz => Yes CharConv => No Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, smtp, smtps, telnet, tftp Host => i386-pc-win32 SSL Version => OpenSSL/0.9.8x ZLib Version => 1.2.6

date

date/time support => enabled "Olson" Timezone Database Version => 2012.10 Timezone Database => internal Default timezone => America/Montreal

Directive => Local Value => Master Value date.default_latitude => 31.7667 => 31.7667 date.default_longitude => 35.2333 => 35.2333 date.sunrise_zenith => 90.583333 => 90.583333 date.sunset_zenith => 90.583333 => 90.583333 date.timezone => America/Montreal => America/Montreal

dom

DOM/XML => enabled DOM/XML API Version => 20031129 libxml Version => 2.7.8 HTML Support => enabled XPath Support => enabled XPointer Support => enabled Schema Support => enabled RelaxNG Support => enabled

ereg

Regex Library => Bundled library enabled

exif

EXIF Support => enabled EXIF Version => 1.4 $Id$ Supported EXIF Version => 0220 Supported filetypes => JPEG,TIFF

Directive => Local Value => Master Value exif.decode_jis_intel => JIS => JIS exif.decode_jis_motorola => JIS => JIS exif.decode_unicode_intel => UCS-2LE => UCS-2LE exif.decode_unicode_motorola => UCS-2BE => UCS-2BE exif.encode_jis => no value => no value exif.encode_unicode => ISO-8859-15 => ISO-8859-15

fileinfo

fileinfo support => enabled version => 1.0.5

filter

Input Validation and Filtering => enabled Revision => $Id: 2aa8dd57d9c0c655cd45e6e5872bb95fa5ad76cf $

Directive => Local Value => Master Value filter.default => unsafe_raw => unsafe_raw filter.default_flags => no value => no value

ftp

FTP support => enabled

gd

GD Support => enabled GD Version => bundled (2.0.34 compatible) FreeType Support => enabled FreeType Linkage => with freetype FreeType Version => 2.4.9 T1Lib Support => enabled GIF Read Support => enabled GIF Create Support => enabled JPEG Support => enabled libJPEG Version => 8 PNG Support => enabled libPNG Version => 1.2.49 WBMP Support => enabled XBM Support => enabled

Directive => Local Value => Master Value gd.jpeg_ignore_warning => 0 => 0

gettext

GetText Support => enabled

hash

hash support => enabled Hashing Engines => md2 md4 md5 sha1 sha224 sha256 sha384 sha512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost adler32 crc32 crc32b fnv132 fnv164 joaat haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5

iconv

iconv support => enabled iconv implementation => "libiconv" iconv library version => 1.9

Directive => Local Value => Master Value iconv.input_encoding => ISO-8859-1 => ISO-8859-1 iconv.internal_encoding => ISO-8859-1 => ISO-8859-1 iconv.output_encoding => ISO-8859-1 => ISO-8859-1

imap

IMAP c-Client Version => 2007f SSL Support => enabled

intl

Internationalization support => enabled version => 1.1.0 ICU version => 4.4.2 ICU Data version => 4.4.2

Directive => Local Value => Master Value intl.default_locale => no value => no value intl.error_level => 0 => 0

json

json support => enabled json version => 1.2.1

ldap

LDAP Support => enabled RCS Version => $Id$ Total Links => 0/unlimited API Version => 3001 Vendor Name => OpenLDAP Vendor Version => 20319 SASL Support => Enabled

Directive => Local Value => Master Value ldap.max_links => Unlimited => Unlimited

libxml

libXML support => active libXML Compiled Version => 2.7.8 libXML Loaded Version => 20708 libXML streams => enabled

mbstring

Multibyte Support => enabled Multibyte string engine => libmbfl HTTP input encoding translation => disabled libmbfl version => 1.3.2

mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.

Multibyte (japanese) regex support => enabled Multibyte regex (oniguruma) version => 4.7.1

Directive => Local Value => Master Value mbstring.detect_order => no value => no value mbstring.encoding_translation => Off => Off mbstring.func_overload => 0 => 0 mbstring.http_input => pass => pass mbstring.http_output => pass => pass mbstring.http_output_conv_mimetypes => ^(text/|application/xhtml+xml) => ^(text/|application/xhtml+xml) mbstring.internal_encoding => no value => no value mbstring.language => neutral => neutral mbstring.strict_detection => Off => Off mbstring.substitute_character => no value => no value

mcrypt

mcrypt support => enabled mcrypt_filter support => enabled Version => 2.5.7 Api No => 20021217 Supported ciphers => cast-128 gost rijndael-128 twofish arcfour cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes Supported modes => cbc cfb ctr ecb ncfb nofb ofb stream

Directive => Local Value => Master Value mcrypt.algorithms_dir => no value => no value mcrypt.modes_dir => no value => no value

mysql

MySQL Support => enabled Active Persistent Links => 0 Active Links => 0 Client API version => mysqlnd 5.0.10 - 20111026 - $Id: b0b3b15c693b7f6aeb3aa66b646fee339f175e39 $

Directive => Local Value => Master Value mysql.allow_local_infile => On => On mysql.allow_persistent => On => On mysql.connect_timeout => 60 => 60 mysql.default_host => no value => no value mysql.default_password => no value => no value mysql.default_port => no value => no value mysql.default_socket => no value => no value mysql.default_user => no value => no value mysql.max_links => Unlimited => Unlimited mysql.max_persistent => Unlimited => Unlimited mysql.trace_mode => Off => Off

mysqli

MysqlI Support => enabled Client API library version => mysqlnd 5.0.10 - 20111026 - $Id: b0b3b15c693b7f6aeb3aa66b646fee339f175e39 $ Active Persistent Links => 0 Inactive Persistent Links => 0 Active Links => 0

Directive => Local Value => Master Value mysqli.allow_local_infile => On => On mysqli.allow_persistent => On => On mysqli.default_host => no value => no value mysqli.default_port => 3306 => 3306 mysqli.default_pw => no value => no value mysqli.default_socket => no value => no value mysqli.default_user => no value => no value mysqli.max_links => Unlimited => Unlimited mysqli.max_persistent => Unlimited => Unlimited mysqli.reconnect => Off => Off

mysqlnd

mysqlnd => enabled Version => mysqlnd 5.0.10 - 20111026 - $Id: b0b3b15c693b7f6aeb3aa66b646fee339f175e39 $ Compression => supported SSL => supported Command buffer size => 4096 Read buffer size => 32768 Read timeout => 31536000 Collecting statistics => Yes Collecting memory statistics => Yes Tracing => n/a Loaded plugins => mysqlnd,example,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password API Extensions => mysql,mysqli,pdo_mysql

mysqlnd statistics =>
bytes_sent => 0 bytes_received => 0 packets_sent => 0 packets_received => 0 protocol_overhead_in => 0 protocol_overhead_out => 0 bytes_received_ok_packet => 0 bytes_received_eof_packet => 0 bytes_received_rset_header_packet => 0 bytes_received_rset_field_meta_packet => 0 bytes_received_rset_row_packet => 0 bytes_received_prepare_response_packet => 0 bytes_received_change_user_packet => 0 packets_sent_command => 0 packets_received_ok => 0 packets_received_eof => 0 packets_received_rset_header => 0 packets_received_rset_field_meta => 0 packets_received_rset_row => 0 packets_received_prepare_response => 0 packets_received_change_user => 0 result_set_queries => 0 non_result_set_queries => 0 no_index_used => 0 bad_index_used => 0 slow_queries => 0 buffered_sets => 0 unbuffered_sets => 0 ps_buffered_sets => 0 ps_unbuffered_sets => 0 flushed_normal_sets => 0 flushed_ps_sets => 0 ps_prepared_never_executed => 0 ps_prepared_once_executed => 0 rows_fetched_from_server_normal => 0 rows_fetched_from_server_ps => 0 rows_buffered_from_client_normal => 0 rows_buffered_from_client_ps => 0 rows_fetched_from_client_normal_buffered => 0 rows_fetched_from_client_normal_unbuffered => 0 rows_fetched_from_client_ps_buffered => 0 rows_fetched_from_client_ps_unbuffered => 0 rows_fetched_from_client_ps_cursor => 0 rows_affected_normal => 0 rows_affected_ps => 0 rows_skipped_normal => 0 rows_skipped_ps => 0 copy_on_write_saved => 0 copy_on_write_performed => 0 command_buffer_too_small => 0 connect_success => 0 connect_failure => 0 connection_reused => 0 reconnect => 0 pconnect_success => 0 active_connections => 0 active_persistent_connections => 0 explicit_close => 0 implicit_close => 0 disconnect_close => 0 in_middle_of_command_close => 0 explicit_free_result => 0 implicit_free_result => 0 explicit_stmt_close => 0 implicit_stmt_close => 0 mem_emalloc_count => 0 mem_emalloc_amount => 0 mem_ecalloc_count => 0 mem_ecalloc_amount => 0 mem_erealloc_count => 0 mem_erealloc_amount => 0 mem_efree_count => 0 mem_efree_amount => 0 mem_malloc_count => 0 mem_malloc_amount => 0 mem_calloc_count => 0 mem_calloc_amount => 0 mem_realloc_count => 0 mem_realloc_amount => 0 mem_free_count => 0 mem_free_amount => 0 mem_estrndup_count => 0 mem_strndup_count => 0 mem_estndup_count => 0 mem_strdup_count => 0 proto_text_fetched_null => 0 proto_text_fetched_bit => 0 proto_text_fetched_tinyint => 0 proto_text_fetched_short => 0 proto_text_fetched_int24 => 0 proto_text_fetched_int => 0 proto_text_fetched_bigint => 0 proto_text_fetched_decimal => 0 proto_text_fetched_float => 0 proto_text_fetched_double => 0 proto_text_fetched_date => 0 proto_text_fetched_year => 0 proto_text_fetched_time => 0 proto_text_fetched_datetime => 0 proto_text_fetched_timestamp => 0 proto_text_fetched_string => 0 proto_text_fetched_blob => 0 proto_text_fetched_enum => 0 proto_text_fetched_set => 0 proto_text_fetched_geometry => 0 proto_text_fetched_other => 0 proto_binary_fetched_null => 0 proto_binary_fetched_bit => 0 proto_binary_fetched_tinyint => 0 proto_binary_fetched_short => 0 proto_binary_fetched_int24 => 0 proto_binary_fetched_int => 0 proto_binary_fetched_bigint => 0 proto_binary_fetched_decimal => 0 proto_binary_fetched_float => 0 proto_binary_fetched_double => 0 proto_binary_fetched_date => 0 proto_binary_fetched_year => 0 proto_binary_fetched_time => 0 proto_binary_fetched_datetime => 0 proto_binary_fetched_timestamp => 0 proto_binary_fetched_string => 0 proto_binary_fetched_blob => 0 proto_binary_fetched_enum => 0 proto_binary_fetched_set => 0 proto_binary_fetched_geometry => 0 proto_binary_fetched_other => 0 init_command_executed_count => 0 init_command_failed_count => 0 com_quit => 0 com_init_db => 0 com_query => 0 com_field_list => 0 com_create_db => 0 com_drop_db => 0 com_refresh => 0 com_shutdown => 0 com_statistics => 0 com_process_info => 0 com_connect => 0 com_process_kill => 0 com_debug => 0 com_ping => 0 com_time => 0 com_delayed_insert => 0 com_change_user => 0 com_binlog_dump => 0 com_table_dump => 0 com_connect_out => 0 com_register_slave => 0 com_stmt_prepare => 0 com_stmt_execute => 0 com_stmt_send_long_data => 0 com_stmt_close => 0 com_stmt_reset => 0 com_stmt_set_option => 0 com_stmt_fetch => 0 com_deamon => 0 bytes_received_real_data_normal => 0 bytes_received_real_data_ps => 0

example statistics =>
stat1 => 0 stat2 => 0

openssl

OpenSSL support => enabled OpenSSL Library Version => OpenSSL 0.9.8x 10 May 2012 OpenSSL Header Version => OpenSSL 0.9.8x 10 May 2012

pcre

PCRE (Perl Compatible Regular Expressions) Support => enabled PCRE Library Version => 8.31 2012-07-06

Directive => Local Value => Master Value pcre.backtrack_limit => 1000000 => 1000000 pcre.recursion_limit => 100000 => 100000

PDO

PDO support => enabled PDO drivers => sqlite, mysql, pgsql

pdo_mysql

PDO Driver for MySQL => enabled Client API version => mysqlnd 5.0.10 - 20111026 - $Id: b0b3b15c693b7f6aeb3aa66b646fee339f175e39 $

pdo_pgsql

PDO Driver for PostgreSQL => enabled PostgreSQL(libpq) Version => 8.3.18 Module version => 1.0.2 Revision => $Id$

pdo_sqlite

PDO Driver for SQLite 3.x => enabled SQLite Library => 3.7.7.1

pgsql

PostgreSQL Support => enabled PostgreSQL(libpq) Version => 8.3.18 PostgreSQL(libpq) => Uninitialized version string (win32) Multibyte character support => enabled SSL support => disabled Active Persistent Links => 0 Active Links => 0

Directive => Local Value => Master Value pgsql.allow_persistent => On => On pgsql.auto_reset_persistent => Off => Off pgsql.ignore_notice => Off => Off pgsql.log_notice => Off => Off pgsql.max_links => Unlimited => Unlimited pgsql.max_persistent => Unlimited => Unlimited

Phar

Phar: PHP Archive support => enabled Phar EXT version => 2.0.1 Phar API version => 1.1.1 SVN revision => $Id: cc7eac717db60fe3deade794d4ae082fe97279ed $ Phar-based phar archives => enabled Tar-based phar archives => enabled ZIP-based phar archives => enabled gzip compression => enabled bzip2 compression => enabled OpenSSL support => enabled

Phar based on pear/PHP_Archive, original concept by Davey Shafik. Phar fully realized by Gregory Beaver and Marcus Boerger. Portions of tar implementation Copyright (c) 2003-2009 Tim Kientzle. Directive => Local Value => Master Value phar.cache_list => no value => no value phar.readonly => On => On phar.require_hash => On => On

Reflection

Reflection => enabled Version => $Id: 25ecbad68e5a4573ffee43ea24a0591ea179492a $

session

Session Support => enabled Registered save handlers => files user Registered serializer handlers => php php_binary

Directive => Local Value => Master Value session.auto_start => Off => Off session.cache_expire => 180 => 180 session.cache_limiter => nocache => nocache session.cookie_domain => no value => no value session.cookie_httponly => Off => Off session.cookie_lifetime => 0 => 0 session.cookie_path => / => / session.cookie_secure => Off => Off session.entropy_file => no value => no value session.entropy_length => 0 => 0 session.gc_divisor => 1000 => 1000 session.gc_maxlifetime => 1440 => 1440 session.gc_probability => 1 => 1 session.hash_bits_per_character => 5 => 5 session.hash_function => 0 => 0 session.name => PHPSESSID => PHPSESSID session.referer_check => no value => no value session.save_handler => files => files session.save_path => D:\Zend\ZendServer\tmp => D:\Zend\ZendServer\tmp session.serialize_handler => php => php session.upload_progress.cleanup => On => On session.upload_progress.enabled => On => On session.upload_progress.freq => 1% => 1% session.upload_progress.min_freq => 1 => 1 session.upload_progress.name => PHP_SESSION_UPLOAD_PROGRESS => PHP_SESSION_UPLOAD_PROGRESS session.upload_progress.prefix => uploadprogress => uploadprogress session.use_cookies => On => On session.use_only_cookies => On => On session.use_trans_sid => 0 => 0

SimpleXML

Simplexml support => enabled Revision => $Id: 692516840b2d7d6e7aedb0bedded1f53b764a99f $ Schema support => enabled

soap

Soap Client => enabled Soap Server => enabled

Directive => Local Value => Master Value soap.wsdl_cache => 1 => 1 soap.wsdl_cache_dir => D:\Zend\ZendServer\tmp => D:\Zend\ZendServer\tmp soap.wsdl_cache_enabled => 1 => 1 soap.wsdl_cache_limit => 5 => 5 soap.wsdl_cache_ttl => 86400 => 86400

sockets

Sockets Support => enabled

SPL

SPL support => enabled Interfaces => Countable, OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject Classes => AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException

sqlite3

SQLite3 support => enabled SQLite3 module version => 0.7 SQLite Library => 3.7.7.1

Directive => Local Value => Master Value sqlite3.extension_dir => no value => no value

standard

Dynamic Library Support => enabled Internal Sendmail Support for Windows => enabled

Directive => Local Value => Master Value assert.active => 1 => 1 assert.bail => 0 => 0 assert.callback => no value => no value assert.quiet_eval => 0 => 0 assert.warning => 1 => 1 auto_detect_line_endings => 0 => 0 default_socket_timeout => 60 => 60 from => no value => no value url_rewriter.tags => a=href,area=href,frame=src,input=src,form=fakeentry => a=href,area=href,frame=src,input=src,form=fakeentry user_agent => no value => no value

tidy

Tidy support => enabled libTidy Release => 1st August 2004 Extension Version => 2.0 ($Id$)

Directive => Local Value => Master Value tidy.clean_output => no value => no value tidy.default_config => no value => no value

tokenizer

Tokenizer Support => enabled

win32service

Win32 Service support => enabled Version => 0.1.0-dev

xdebug

xdebug support => enabled Version => 2.2.2 IDE Key => Martin

Supported protocols => Revision DBGp - Common DeBuGger Protocol => $Revision: 1.145 $

Directive => Local Value => Master Value xdebug.auto_trace => Off => Off xdebug.cli_color => 0 => 0 xdebug.collect_assignments => Off => Off xdebug.collect_includes => On => On xdebug.collect_params => 0 => 0 xdebug.collect_return => Off => Off xdebug.collect_vars => Off => Off xdebug.coverage_enable => On => On xdebug.default_enable => On => On xdebug.dump.COOKIE => no value => no value xdebug.dump.ENV => no value => no value xdebug.dump.FILES => no value => no value xdebug.dump.GET => no value => no value xdebug.dump.POST => no value => no value xdebug.dump.REQUEST => no value => no value xdebug.dump.SERVER => no value => no value xdebug.dump.SESSION => no value => no value xdebug.dump_globals => On => On xdebug.dump_once => On => On xdebug.dump_undefined => Off => Off xdebug.extended_info => On => On xdebug.file_link_format => no value => no value xdebug.idekey => no value => no value xdebug.max_nesting_level => 100 => 100 xdebug.overload_var_dump => On => On xdebug.profiler_aggregate => Off => Off xdebug.profiler_append => Off => Off xdebug.profiler_enable => Off => Off xdebug.profiler_enable_trigger => Off => Off xdebug.profiler_output_dir => \ => \ xdebug.profiler_output_name => cachegrind.out.%p => cachegrind.out.%p xdebug.remote_autostart => Off => Off xdebug.remote_connect_back => Off => Off xdebug.remote_cookie_expire_time => 3600 => 3600 xdebug.remote_enable => Off => Off xdebug.remote_handler => dbgp => dbgp xdebug.remote_host => localhost => localhost xdebug.remote_log => no value => no value xdebug.remote_mode => req => req xdebug.remote_port => 9000 => 9000 xdebug.scream => Off => Off xdebug.show_exception_trace => Off => Off xdebug.show_local_vars => Off => Off xdebug.show_mem_delta => Off => Off xdebug.trace_enable_trigger => Off => Off xdebug.trace_format => 0 => 0 xdebug.trace_options => 0 => 0 xdebug.trace_output_dir => \ => \ xdebug.trace_output_name => trace.%c => trace.%c xdebug.var_display_max_children => 128 => 128 xdebug.var_display_max_data => 512 => 512 xdebug.var_display_max_depth => 3 => 3

xml

XML Support => active XML Namespace Support => active libxml2 Version => 2.7.8

xmlreader

XMLReader => enabled

xmlwriter

XMLWriter => enabled

xsl

XSL => enabled libxslt Version => 1.1.17 libxslt compiled against libxml Version => 2.6.26 EXSLT => enabled libexslt Version => 0.8.15

Zend Code Tracing

Zend Code Tracing => enabled

Directive => Local Value => Master Value zend_codetracing.always_dump => Off => Off zend_codetracing.buffer_size => 5M => 5M zend_codetracing.dump_file => codetracing/dump => codetracing/dump zend_codetracing.dump_format => 2 => 2 zend_codetracing.dump_on_segv => On => On zend_codetracing.enable => 1 => 1 zend_codetracing.log_file => codetracing.log => codetracing.log zend_codetracing.log_rotation_size => 10 => 10 zend_codetracing.log_verbosity => 0 => 0 zend_codetracing.max_concurrent_trace_buffers => 5 => 5 zend_codetracing.max_depth => 2 => 2 zend_codetracing.max_elements => 10 => 10 zend_codetracing.max_freq => 1 => 1 zend_codetracing.max_string => 48 => 48 zend_codetracing.override_functions => @D:\Zend\ZendServer\etc\functions.txt => @D:\Zend\ZendServer\etc\functions.txt zend_codetracing.trace_arguments => On => On zend_codetracing.trace_arrays => On => On zend_codetracing.trace_enable => Off => Off zend_codetracing.trace_errors => On => On zend_codetracing.trace_events => On => On zend_codetracing.trace_exceptions => On => On zend_codetracing.trace_headers => On => On zend_codetracing.trace_includes => On => On zend_codetracing.trace_internal_functions => On => On zend_codetracing.trace_memory_usage => On => On zend_codetracing.trace_return_values => On => On zend_codetracing.trace_source_lines => On => On zend_codetracing.trace_time => On => On zend_codetracing.trace_user_functions => On => On zend_codetracing.trace_write => On => On zend_codetracing.use_fast_timestamp => 1 => 1

Zend Data Cache

Version => 6.0.0 Enabled => No Shared Memory Storage Enabled => No Disk Storage Enabled => No Disk storage save path => D:\Zend\ZendServer\tmp\datacache Disk storage directory depth => 2 Shared memory storage cache size => 32

Zend Job Queue

Version => 6.0.0 Enable => Yes Default binding => tcp://127.0.0.1:10085 Log verbosity => 2

Zend Monitor

Version => 6.0.0 Enable => Yes Log verbosity => 2

Zend Monitor UI

Version => 6.0.0 Enable => No Log verbosity => 2

Zend Optimizer+

Opcode Caching => Disabled Optimization => Enabled Startup Failed => Opcode Caching is only supported in Apache, ISAPI and FastCGI SAPIs

Directive => Local Value => Master Value zend_optimizerplus.blacklist_filename => no value => no value zend_optimizerplus.consistency_checks => 0 => 0 zend_optimizerplus.dups_fix => Off => Off zend_optimizerplus.enable => On => On zend_optimizerplus.enable_file_override => Off => Off zend_optimizerplus.enable_slow_optimizations => 1 => 1 zend_optimizerplus.fast_shutdown => 0 => 0 zend_optimizerplus.force_restart_timeout => 180 => 180 zend_optimizerplus.inherited_hack => On => On zend_optimizerplus.interned_strings_buffer => 4 => 4 zend_optimizerplus.log_verbosity_level => 1 => 1 zend_optimizerplus.max_accelerated_files => 2000 => 2000 zend_optimizerplus.max_wasted_percentage => 5 => 5 zend_optimizerplus.memory_consumption => 64 => 64 zend_optimizerplus.mmap_base => no value => no value zend_optimizerplus.optimization_level => 0xfffffbbf => 0xfffffbbf zend_optimizerplus.preferred_memory_model => no value => no value zend_optimizerplus.revalidate_freq => 2 => 2 zend_optimizerplus.revalidate_path => Off => Off zend_optimizerplus.save_comments => 1 => 1 zend_optimizerplus.use_cwd => On => On zend_optimizerplus.validate_timestamps => On => On

Zend Page Cache

Version => 6.0.0 Enable => No Cache dependencies file =>
Log verbosity level => 2 Disk storage directory structure depth => 2 Disk storage save path =>
Compression enable => 1 Cache cleaning frequency => 300

Zend Session Clustering

Clustering Session Module => Disabled Reason => Unsupported sapi

Zend Utils

zip

Zip => enabled Extension Version => $Id: 727cc853ca1ae15d995c3520c5719784ddc1e292 $ Zip version => 1.11.0 Libzip version => 0.10.1

zlib

ZLib Support => enabled Stream Wrapper => compress.zlib:// Stream Filter => zlib.inflate, zlib.deflate Compiled Version => 1.2.6 Linked Version => 1.2.6

Directive => Local Value => Master Value zlib.output_compression => Off => Off zlib.output_compression_level => -1 => -1 zlib.output_handler => no value => no value

Additional Modules

Module Name apc

lisachenko commented 11 years ago

Oh, you have so many Zend extensions ) Could you try to disable them and try one more time? Probably, you have an old version of ZendOptimizer+ that has a bug with stream includes. I had the same bug previously, but it was fixed. ZendOptimizer+ simply caches one version of file by path and doesn't pay an attention to the dynamic filters, so AOP doesn't work. And yes, for production mode my framework uses another technique for correct work with opcode cachers.

mpoiriert commented 11 years ago

I've disabel all the zend extension and it does work. We are using apc in production (I think) from what I understand your framework is compatible with it ?

Everything seams fine now. Thanks :)

lisachenko commented 11 years ago

In production mode my framework is compatible with any opcode cachers, but for development mode it's better to use an APC or OPCache.

Have a nice experiments with AOP )