|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #71024 Unable to use PHP 7.0 x64 side-by-side with PHP 5.6 x32 on the same server
Submitted: 2015-12-04 08:42 UTC Modified: 2015-12-10 18:13 UTC
From: pvasilevich at odin dot com Assigned: dmitry (profile)
Status: Closed Package: opcache
PHP Version: 7.0.0 OS: Windows
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
Block user comment
Status: Assign to:
Bug Type:
From: pvasilevich at odin dot com
New email:
PHP Version: OS:


 [2015-12-04 08:42 UTC] pvasilevich at odin dot com
1) create site in IIS and configure it to use PHP 5.6 x86 for it.
2) create virtual directory (in this case the same pool user will be used for both PHP) and configure PHP 7.0 x64 on it.
3) browse site pages that handled by PHP 5.6 - everything works fine. Notice, that C:\Windows\Temp\ZendOPcache.MemoryBase@user file was created, and process php-cgi.exe holds handle to \BaseNamedObjects\ZendOPcache.SharedMemoryArea@user shared memory
4) then try to request pages under virtual directory handled by PHP 7.0

Expected result:
There could be several solutions and workarounds here. The most elegant and stable (appropriate for all following release as well) will be solution to differentiate shared memory names, and mmap_base files by name. Proposed solution is to include PHP version and architecture in file name and shared memory name, and mutex.

This can separate memory objects between different versions on servers, make it more stable.

The following request looks quite similar:

Actual result:
500 Internal server error.
Looking at crash dump you can see:
000000de`14eeeea0 00007ff9`831433e1 php_opcache!accel_new_interned_string+0x27 [c:\php-sdk\php70dev\vc14\x64\php-7.0.0\ext\opcache\zendaccelerator.c @ 330]
000000de`14eeeee0 00007ff9`831466ca php_opcache!accel_use_shm_interned_strings+0x21 [c:\php-sdk\php70dev\vc14\x64\php-7.0.0\ext\opcache\zendaccelerator.c @ 395]
000000de`14eeef20 00007ff9`75847634 php_opcache!accel_startup+0x1fa [c:\php-sdk\php70dev\vc14\x64\php-7.0.0\ext\opcache\zendaccelerator.c @ 2662]
000000de`14eeef50 00007ff9`757ab25b php7!zend_extension_startup+0x24 [c:\php-sdk\php70dev\vc14\x64\php-7.0.0\zend\zend_extensions.c @ 176]
000000de`14eeef80 00007ff9`7544268c php7!zend_llist_apply_with_del+0x357ebb [c:\php-sdk\php70dev\vc14\x64\php-7.0.0\zend\zend_llist.c @ 171]
000000de`14eeefc0 00007ff7`21142787 php7!php_module_startup+0x95c [c:\php-sdk\php70dev\vc14\x64\php-7.0.0\main\main.c @ 2199]
000000de`14eef4c0 00007ff7`211448ec php_cgi!php_cgi_startup+0x17 [c:\php-sdk\php70dev\vc14\x64\php-7.0.0\sapi\cgi\cgi_main.c @ 918]
000000de`14eef4f0 00007ff7`21148d40 php_cgi!main+0x5bc [c:\php-sdk\php70dev\vc14\x64\php-7.0.0\sapi\cgi\cgi_main.c @ 1899]
000000de`14eefa20 00007ff9`93271611 php_cgi!__scrt_common_main_seh+0x124 [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl @ 264]
000000de`14eefa60 00007ff9`935a64ad kernel32!BaseThreadInitThunk+0xd
000000de`14eefa90 00000000`00000000 ntdll!RtlUserThreadStart+0x1d

In fact PHP 7 tries to use the same memory (looking for the same memory object name). Looks like because PHP 7 is 64-bit process, structure of the memory is different, that brings to crash.


bug71024_system_id_integration_2 (last revision 2015-12-07 14:29 UTC by
bug71024_system_id_integration_1.patch (last revision 2015-12-07 14:13 UTC by
bug71024_system_id_integration.patch (last revision 2015-12-07 13:44 UTC by
use-different-opcache-memory-name-and-mmap-base-file.diff (last revision 2015-12-04 08:43 UTC by pvasilevich at odin dot com)

Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2015-12-04 08:45 UTC] pvasilevich at odin dot com
You can check proposed path or pull request
 [2015-12-05 14:47 UTC]
-Assigned To: +Assigned To: dmitry
 [2015-12-05 14:47 UTC]
I think this is a good improvement, @Dmitry what do you think?
 [2015-12-05 16:57 UTC]
Yeah, this makes sense to me.
 [2015-12-07 09:00 UTC]
Adding just a version may be not enough. The next request will ask for 32 vs 64 bit, ZTS vs non-ZTS, and so on.
We can add ZCG(system_id), that is actually MD5 sum generated by accel_gen_system_id(), based on php version and other sensitive information.
 [2015-12-07 09:02 UTC]
Making the mapping filename configurable per some environment variable or INI were probably the most flexible solution. Fe even same user could decide to not to share cache between two separate sites even running same PHP version.

But otherwise, ZTS factor should be counted in. Also, maybe major+minor could be enough instead of PHP_VERSION? Or nice were even the ACCELERATOR_VERSION instead of PHP_VERSION, but ACCELERATOR_VERSION seems to be not maintained much :)

 [2015-12-07 09:03 UTC]
It might be better to add ZCG(system_id).
 [2015-12-07 10:26 UTC]
Ups, that was just two minutes async between the comments :)

Of course, adding ZCG(system_id) for CreateFileMapping will do the most fine distinction for the compatibility of the cache. Dmitry, I could come up with a patch, or please let me know if i have to test one.

 [2015-12-07 13:44 UTC]
The following patch has been added/updated:

Patch Name: bug71024_system_id_integration.patch
Revision:   1449495892
 [2015-12-07 14:13 UTC]
The following patch has been added/updated:

Patch Name: bug71024_system_id_integration_1.patch
Revision:   1449497625
 [2015-12-07 14:29 UTC]
The following patch has been added/updated:

Patch Name: bug71024_system_id_integration_2
Revision:   1449498560
 [2015-12-07 14:33 UTC]
@pvasilevich please check the latest , it appends ZCG(system_id) to mapping filename and to the mutex filename. That means having the most distinct names which will avoid any possible attaching to an incompatible cache.

 [2015-12-07 17:45 UTC] pvasilevich at odin dot com
Thanks Anatol,

your patch looks quite promising.
Is there any chance to get it in some nearest PHP 7.0.1 update?
 [2015-12-07 21:56 UTC]
Automatic comment on behalf of ab
Log: Fixed bug #71024 Unable to use PHP 7.0 x64 side-by-side with PHP 5.6 x32 on the same server
 [2015-12-07 21:56 UTC]
-Status: Assigned +Status: Closed
 [2015-12-10 18:13 UTC]
Pavel, please test 7.0.1RC1, the patch is included. I'm intended to backport it to 5.6.

 [2015-12-11 03:03 UTC] pvasilevich at odin dot com
Checked on 7.0.1RC1 - works fine.
 [2016-07-20 11:34 UTC]
Automatic comment on behalf of ab
Log: Fixed bug #71024 Unable to use PHP 7.0 x64 side-by-side with PHP 5.6 x32 on the same server
PHP Copyright © 2001-2023 The PHP Group
All rights reserved.
Last updated: Fri Dec 08 11:01:26 2023 UTC