Jazi
Jazi

Reputation: 6752

Windows, XAMPP, PHP 7 and opcache

I've installed latest XAMPP server with PHP 7 (update: checked also PHP 7.1) (on my Windows 10 system). Wanted to use opcache, so I enabled it in php.ini.

[opcache]
zend_extension=php_opcache.dll
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000

With that change now, and with almost every page refresh, I'm getting this error from Apache:

AH00428: Parent: child process 3748 exited with status 3221226356 -- Restarting.

So, page is loading, and loading... waiting to Apache start again. When I'm turning opcache off (by setting opcache.enable=0), Apache is not restarting and everything works fine (omitting the slower web application topic, of course).

Everything works fine while loading app on XAMPP having PHP 5.6 with enabled opcache.

EDIT (added GIF image):
As you can see, sometimes page refreshes like it should. But sometimes it's refreshing much longer, and Apache is restarting in that moment.

enter image description here

EDIT:
To be honest, I gave up with this application and working with PHP on Windows (was working on it for around 10 years with PHP <= 5.6). It's very hard/impossible (for now) to make PHP 7.x work on that OS (with Opcache). Decided to go with Ubuntu and server created with Docker. Everything is easier to configure (especially with Docker) and works faster. I advise everyone to do the same ;).

Upvotes: 17

Views: 31547

Answers (8)

Robbie KN
Robbie KN

Reputation: 345

First at all:

This is 2022 and I had a similar problem too with PHP-7.2, not on Xamp, but similar server.

How I've got my problem solved?

If you're here because of that, at first try to go with a default "opcache configuration options". And just above opcache.enable=1 put zend_extension=opcache. Your PHP is smart enough to find the extension. And yeah, there's no need to define the full path if you have defined it here extension_dir = [YOUR PATH] (in php.ini). Of course you can use the full path too, if you want too. The path, probably, it's not a problem if your extension is there (in the folder with all PHP extensions). Did you checked, is it there, your extension?

My problem was in this two options:

opcache.memory_consumption
opcache.interned_strings_buffer

I have no idea why, but I guess this two option should have some balance, because both of them is about memory usage.

So, this had my Apache useless, because it didn't wanted to start

opcache.memory_consumption = 64
opcache.interned_strings_buffer = 32 ;this one BAD

next one works fine!

opcache.memory_consumption = 64
opcache.interned_strings_buffer = 16

this one is works fine too!

opcache.memory_consumption = 128
opcache.interned_strings_buffer = 32

So, as I said, at first try to go with a default values of "opcache configuration options", and later do experiments.

How to check everything works on PHP?

var_dump ( zend_version() );
var_dump ( extension_loaded("opcache") ); // bool(false) cuz it's ZEND
var_dump ( extension_loaded("Zend OPcache") ); // bool(true)

// Next one will give you a lot of data about current opcache usage,
// but of course, only if your extension is enabled.
print_r ( opcache_get_status() );

Default OPcache configuration options you can find here: https://www.php.net/manual/en/opcache.configuration.php

Upvotes: 1

suki
suki

Reputation: 1

on php.ini add more

zend_extension=opcache

remove comment

opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=256
opcache.max_accelerated_files=10000

restart apache

Upvotes: 0

Key Shang
Key Shang

Reputation: 917

Your php_opcache.dll path seems wrong, you need write it like below, it works for me.

[opcache]
zend_extension=C:\xampp\php\ext\php_opcache.dll
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256
opcache.max_accelerated_files=2000

More details

If your XAMPP comes with PHP 5.5+ by default, opcache already included in the bundle, you will just need to enable it. To enable the extension:

  1. Open php.ini (by default it should be located here: C:\xampp\php\php.ini).

  2. Add this line at the end of the file: zend_extension=C:\xampp\php\ext\php_opcache.dll

  3. Restart Apache server.

Upvotes: 22

Kailas
Kailas

Reputation: 3241

open a php.ini file

  1. Change the ;opcache.enable=1 to opcache.enable=1
  2. Add opcache dll path at the end of the file zend_extension = "C:\xampp\php\ext\php_opcache.dll"
  3. Restart apache

for more reference check this video https://www.youtube.com/watch?v=GvWrNoRDjUY

Upvotes: 6

Wasim Khan
Wasim Khan

Reputation: 1247

In case of Xampp, just put the below lines next to [opcache]

zend_extension="C:\xampp\php\ext\php_opcache.dll"
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1

Upvotes: 2

Sergey  Matunin
Sergey Matunin

Reputation: 1

ThreadStackSize 8388608 

Helped me in the similar case. This is a httpd option.

Upvotes: 0

Chetan Bhosale
Chetan Bhosale

Reputation: 1

Creeating directory with appropriate permissions and setting it php.ini worked!

opcache.file_cache=d:\xampp\htdocs\opcache

Upvotes: 0

BlackWebWolf
BlackWebWolf

Reputation: 19

To be honest - do not use xammp. Right now we have a bit better tech stack, to run PHP on Linux servers. Docker https://docs.docker.com/docker-for-windows/

Vagrant: https://www.vagrantup.com/

Both of them are based on linux systems, where most of xammp problems will not have place.

Upvotes: 1

Related Questions