Bug #66066 [Com]: opcache_compile_file partially execute file and output errors

From: Date: Mon, 10 Apr 2023 05:14:21 +0000
Subject: Bug #66066 [Com]: opcache_compile_file partially execute file and output errors
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-244161@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=66066&edit=1

 ID:                 66066
 Comment by:         edublogeducation at gmail dot com
 Reported by:        geompse at gmail dot com
 Summary:            opcache_compile_file partially execute file and
                     output errors
 Status:             Verified
 Type:               Bug
 Package:            opcache
 Operating System:   Debian 3.8.13
 PHP Version:        5.5.5
 Block user comment: N
 Private report:     N

 New Comment:

Consider using EzeeAccounts, an ERP solution designed for small and medium-sized businesses in the
UAE. More info:(https://ezeeaccounts.com)github.com


Previous Comments:
------------------------------------------------------------------------
[2021-06-21 16:36:29] cmb@php.net

> Practical use : updater script
> - overwrite files with new ones
> - force opcache recompilation

Generally a bad idea, since that causes SHM fragmentation, and
should better be avoided.

While compiling a file which would redefine a function is neither
supported nor desireable, in my opinion, the behavior is a bug:
execution proceedes after the fatal error (due to zend_try), but
the respective members of core_globals (e.g. last_error_type) are
not properly reset, so that the script terminates with an exit
code != 0.

------------------------------------------------------------------------
[2014-01-14 11:43:59] geompse at gmail dot com

Please open your mind, I am talking about scopes, contexts and so on.
This is ugly but works :
    system('php -r
"opcache_compile_file(\''.__FILE__.'\')"');
This is clean but does not work :
    opcache_compile_file(__FILE__);

(1) I don't see where the PHP architecture stops you from adding to the documentation
"Notice : It will be compiled in the same compilation context"

(2) It might be difficult/impossible to actually use another context, due to the architecture's
limitations. You're the reference there.

------------------------------------------------------------------------
[2014-01-14 11:31:24] Terry at ellisons dot org dot uk

Let's pick apart the definition of opcache_compile_file()
* Compiles a PHP script
* Cache a PHP script
* Do not execute it.

Step one in this process is that the script must compile successfully.  The architecture of PHP is
such that (i) statically compiled (that is at the outer level and not in "if" or other
blocks) are bound at compile time. (ii) You cannot redefine an existing class or function within a
compile.  This will result in a compile error.  That is what you doing and are getting exactly the
errors that you should expect.  We can't change this without changing the Zend Engine in ways
that will cause all sorts of compatability breaks.  

So the function does what it says, just not what you'd like it to do.

You seem confused as to the architecture of PHP and seem to need help here.   I've offered to
help you understand your requirements and work out a way that they can be met within PHP
architectural constraints on a more appropriate site, as this bugs.php.net is not a support forum.
Clearly it is up to you whether you chose to take up this offer.  

This sort of "how to" dialogue doesn't belong here. My last comment on this thread.

------------------------------------------------------------------------
[2014-01-14 10:55:31] geompse at gmail dot com

There is an issue, something is not doing what it say it does.
There are obvious solutions :
- make it not do that (= let it do it silently)
- say it does what it does (= update documentation)
- add option to handle it cleanly (= add boolean somewhere and use it)
There are more specific solutions :
- cleanup the whole PHP "Zend" code :)
- make OPCache run in a different context (nb : not only a different scope)
- other...

You are telling me that this is not a bug (undocumented behavior is expected) and that instead of
using the bug report system (bugs.php.net) I must talk with the StackOverflow community to convince
them of telling you this is a bug ?
I won't. You may not solve this bug and let other PHP developers get in troubles.

I filled in this report for the PHP community. Live long and prosper.

------------------------------------------------------------------------
[2014-01-13 14:31:50] Terry at ellisons dot org dot uk

Geompse, this may be counter-intuitive behaviour, but this is PHP that we're talking about here
:-)  What you are trying to do is hitting artefacts of Zend engine constraints rather than OPcache
ones.  You will get into just the same sort of problems if you try to do an include __FILE__; if
your file embeds statically declared functions or classes.   

The PHP bugrep system is a poor place to have this discussion.  Why not post a Q to StackOverflow
explaining what you are trying to do, and we can have the discussion on a forum more suited to this?
 If we distill out of that some specific issue that needs raising here, then there is more chance of
it getting actioned that way.  Terry

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=66066


--
Edit this bug report at https://bugs.php.net/bug.php?id=66066&edit=1


Thread (9 messages)

« previous php.bugs (#244161) next »