APC è compatibile con PHP 5.4 o PHP 5.5?


103

Non sembra che APC sia stato aggiornato in concomitanza con il rilascio di php 5.4 (vorrei che avessero incluso APC nel core PHP come originariamente previsto).

Non riesco a trovare una risposta definitiva al fatto che l'attuale APC funzioni con php 5.4+. Sono riuscito a trovare pacchetti Ubuntu per php 5.4, ma i pacchetti php-apc non verranno installati.


2
Immagino che tu stia eseguendo un'installazione di apt-get. Hai provato un'installazione di pecl?
Darragh Enright

Sì, ha funzionato davvero. Grazie. E a quanto pare, APC funziona bene con 5.4, in particolare, quando si utilizza la nuova funzionalità traits.
Greywire

1
@Darragh [Ti sto solo facendo sapere] c'è una grossa taglia su questo, potresti voler rispondere.
Tiberiu-Ionuț Stan,

1
No non lo è. La sua ultima versione è stata nel 2012 e questo non è assolutamente compatibile con la versione più recente di PHP
Abadis

Risposte:


163

Zend OPCache incluso in PHP 5.5

Il 21 marzo 2013, è stato rilasciato PHP 5.5 beta 1 che include "Zend OPCache" - Sembra fermamente che questo sarà il sostituto di APC in futuro poiché è incluso nel core PHP e dovrà essere mantenuto per ogni nuovo pubblicazione.

Consiglierei personalmente a coloro che dipendono da APC per la memorizzazione nella cache del codice operativo di testare il proprio codice con l'imminente cache del codice operativo incorporata e restituire eventuali problemi riscontrati per garantire una versione finale stabile.

Non so cosa significhi per il futuro di APC.

APC PER PHP 5.4+ È ANCORA SEGNALATO COME BETA

Ciò significa che gli sviluppatori non lo considerano completamente stabile . Mentre molte persone non stanno riscontrando alcun problema con le attuali versioni di SVN, c'è ancora lo strano rapporto di casi limite da parte di persone con determinate configurazioni o sotto carico pesante.

Come con tutto ciò che si desidera utilizzare in un ambiente di produzione, assicurarsi di testare a fondo ogni rilascio (beta o stabile) in fase di sviluppo o di pre-produzione ambienti prima . Questo include il test di carico!

A partire dalla versione 3.1.13, i commit nel repository SVN sono leggermente rallentati e l' elenco dei bug non ha molte aggiunte recenti. Fatene quello che volete.

Il 10 dicembre 2012 alle 21:05 Rasmus Lerdorf ha scritto:

APC è al punto ora per 5.4 in cui non penso che ci siano più casi limite di quelli che abbiamo in 5.3. Nessuno dei due è perfetto, ma è abbastanza vicino per la maggior parte dei siti.

Chiunque abbia competenze in C / gdb e un po 'di tempo libero è invitato a sorvolare l' elenco dei bug e vedere se può risolvere qualcosa o migliorarlo prodotto open source gratuito su cui tutti facciamo affidamento.

Esistono soluzioni alternative, Wikipedia fornisce un file elenco di acceleratori PHP .

Il 13 febbraio 2013 Zeev Suraski ha annunciato la disponibilità del file codice sorgente Zend Optimizer + .

C'è stata una discussione piuttosto lunga sull'integrazione di Zend Optimizer + nel core PHP nella prossima versione principale (la versione successiva alla 5.5). Le persone potrebbero voler familiarizzare con Zend Optimizer + in anticipo, se questo è il caso.


Non utilizzare APC 3.1.14

APC 3.1.14 è stato rimosso da PECL download causa di alcuni gravi problemi di memoria che sono stati scoperti ma non sono stati ancora rintracciati.

Se stai già utilizzando la 3.1.14, potresti voler eseguire il downgrade fino al rilascio della 3.1.15. Ricorda, questa è ancora beta . Se lo stai usando, lo stai usando a tuo rischio e pericolo.

2013-01-02 :
APC 3.1.14 è disponibile , aggiunge la compatibilità con PHP 5.5, oltre a risolvere un discreto numero di altri bug .

Ancora beta


03/09/2012 :
APC 3.1.13 è disponibile, risolvendo una serie di segfault .


2012/08/16 :
Un APC 3.1.12 tag è stato creato, ma è ancora segnato come versione beta , la sua disposizione sulla pagina di APC PECL , così come il changelog .

Questa volta sono stati risolti molti bug relativi a bin_dump.


2012-07-19 :
Un APC 3.1.11 tag è stato creato, ma è ancora segnato come versione beta , la sua disposizione sulla pagina di APC PECL , così come il changelog . Ho seguito le relative mailing list e stanno ancora lavorando attivamente per correggere i bug di APC, tuttavia è un modulo complesso e non molte persone sembrano essere all'altezza del compito. Questa versione risolve il brutto bug stat = 0 quando si includono i file.


2012-04-11 :
Un APC 3.1.10 tag è stato creato oggi, e una versione beta di 3.1.10 è stato posto sulla pagina di APC PECL

I changelog stati:

  • Aggiungi supporto PHP 5.4 (Dmitry, Anatoliy, Pierre)
  • Risolto bug # 22679: corretto apc_bin_dump per le costanti. Usa IS_CONSTANT_TYPE_MASK per gestire tutte le costanti, comprese quelle non qualificate (invece del controllo ~ IS_CONSTANT_INDEX)
  • Risolto bug # 23822, php si blocca al riavvio di apache

1
basta digitare: "pecl install apc-3.1.10" e poi ho dovuto ricompilare php in modo che aggiorni libphp5.so
targnation

L'ho usato da ottobre 2012 tramite Apt-get su Ubuntu 12. Pulito e stabile!
JustinP

dai un'occhiata a questo articolo relativo a Zend OpCache e APC blogs.oracle.com/opal/entry/using_php_5_5_s e questo thread bugs.php.net/bug.php?id=64625
riotera

10

A partire da PHP 5.4.7 e APC 3.1.13 (e persino APC SVN trunk dal 2012-09-19), sebbene sia "compatibile" non è stabile su server con carico pesante, in particolare se stai usando PHP- FPM e $ GLOBALS. Alcune delle discussioni degli sviluppatori su APC parlano di casi marginali irrisolti .

Sto rispondendo a questa domanda 6 mesi dopo che è stato chiesto perché il problema è ancora prevalente, e incontrare questo thread senza una risposta come la mia è ciò che mi ha fatto fare il salto a PHP 5.4 con APC e bruciarmi. Si spera che questo aiuti le persone a evitare un po 'di dolore.



5

No, APC 1.3.9 (e da questo momento anche il trunk svn) non è compatibile con php 5.4.0, lo so perché ho appena passato ore a cercare di farlo funzionare (testato vari svn / php. impostazioni ini / flag del compilatore / tu lo chiami).

Questo è semplicemente ridicolo, APC è una delle estensioni PHP più popolari e ti aspetteresti che dopo settimane di utilizzo di 8 PHP 5.4 RC avrebbero il tempo di far lavorare APC al suo fianco.

Patetico.


Forse è per questo che APC non è stato incluso in PHP 5.4 come originariamente previsto .. Sembrava funzionare quando l'ho testato, ma ho solo testato i tratti e non nessuna delle altre funzionalità di php 5.4.
Greywire

2
Sembra che l'unico compilatore di cache / bytecode utilizzabile per php 5.4 sia il pacchetto del server zend di Zend. PHP 5.4 mi aveva un po 'eccitato ma senza APC o XCache o qualcosa del genere, è inutile. E questa è stata la storia di PHP per anni e anni .. sempre in attesa, in attesa .. Sto cominciando a pensare seriamente di prendere un altro linguaggio .. solo non sono sicuro di cosa ..
Greywire

È vero, il bug di segfault è stato segnalato nel lontano dicembre dello scorso anno e 3 mesi dopo non è ancora stato risolto, wtf è il punto che rilascia un "aggiornamento importante" se non funziona nemmeno nelle condizioni più comuni. [Bug # 60462 Quando APC è abilitato segfault - Inviato: 2011-12-07] bugs.php.net/bug.php?id=60462&edit=1
JohnSmith

5

Bene, ci sto provando negli ultimi giorni e non c'è modo di far funzionare un cacher di codice operativo con php 5.4. Xcache non verrà compilato e apc non riconoscerà alcune classi quando vengono memorizzate nella cache. Penso che questo sia l'errore di cui parla Simon.

Ho sentito che c'erano alcune correzioni nel bagagliaio, ma ho anche provato le ultime fonti del tronco, ma gli stessi errori continuano a tornare. Penso che php senza un opcode cacher (non ce n'è disponibile nessuno al momento) non sia degno di produzione. Spero che le persone di APC risolvano questo problema al più presto.

AGGIORNARE!!!

Xcache 2.0.0-rc1 è disponibile e compatibile con php 5.4. Godere!



4

Sto usando AMPPS con la versione PHP 5.5.19. Da qualche tempo, esattamente dal rilascio di PHP 5.5, APC è stato sostituito con Zend OPCache che è incluso in PHP 5.5 e versioni successive. Ora tutto quello che devi fare per abilitare "APC" (attualmente "OPcache") è modificare il tuo php.ini. Prima della sezione [XDebug] aggiungi le linee fluide:

php.ini

...

[OPcache]

zend_extension=php_opcache.dll

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=24
opcache.max_accelerated_files=4000
opcache.revalidate_freq=3
opcache.fast_shutdown=1

...

Tieni presente che abbiamo bisogno di due istanze di:

zend_extension =

Uno nella sezione [OPcache] e uno nella sezione [XDebug]. Xdebug spesso non viene fornito come predefinito nell'installazione del server xampp / ampps / easyPHP. Potresti trovarti in una situazione in cui dovrai scaricare l'estensione Xdebug. Puoi farlo facilmente usando un'applicazione online che definisce il giusto Xdebug per il tuo php. Visita http://xdebug.org/wizard.php e segui le loro semplici istruzioni. Dopo aver scaricato la versione corretta di Xdebug per la tua versione php, modifica il link della tua estensione zend nella sezione [XDebug].

...

[XDebug]
zend_extension = "C:\Program Files (x86)\Ampps\php\ext\php_xdebug-2.2.6-5.5-vc11.dll"
......

Notare che! che devi aggiungere la sezione OPcache prima di XDebug nel tuo file php.ini !!! Se mi segui correttamente dovresti avere due istanze di zend_extension nel tuo file php.ini (una in OPcache e una nella sezione Xdebug).

Funziona perfettamente con Symfony2 framework ed elimina il messaggio di raccomandazione per installare e abilitare APC per PHP e Xdebug.

Messaggio a chi esegue symfony 2 e ha rimosso il messaggio di avviso da "web / config.php", ma incontra ancora un problema eseguendo dalla riga di comando "php app / check.php". Se ciò accade, significa che la tua console utilizza un file php.ini diverso. Cambia la tua variabile PATH di sistema: falla puntare alla directory php corretta (dove hai il tuo file php.exe e che è usata dal tuo server locale).

Se hai bisogno di spiegazioni più approfondite fammelo sapere nel commento qui sotto. Saluti.


1
Esorto vivamente le istruzioni di questa risposta da unire alla risposta principale, in modo che tutti coloro che desiderano implementare OpCache sappiano esattamente come farlo.
Joe

Se commentate xdebug "zend_extension", lo spegnerete - non è necessario. L'aggiunta della sezione [OPcache] con "zend_extension" non entra in conflitto con lo stesso parametro della sezione [XDebug]. Anche l'ordine di quelle sezioni non ha molta importanza.
Marek

Nota: [fonte: php.net/manual/en/opcache.installation.php] Se vuoi usare OPcache con »Xdebug, devi caricare OPcache prima di Xdebug.
DevWL

3

Sembra che ci siano alcuni problemi ancora da risolvere. Controlla i bug e potresti essere in grado di capire qual è la soluzione al tuo particolare problema.

Ho affrontato uno di questi errori alcune ore fa e si è scoperto che l'utilizzo di APC dal trunk SVN era la strada da percorrere. Spero che questo ti aiuti!


Bene, finora, sembra funzionare bene. Questo è su Ubuntu 10.04 (appliance LAMP chiavi in ​​mano) con pacchetti PHP 5.4 da launchpad.net/~ondrej/+archive/php5 . Ma se succede qualcosa, controllerò l'elenco dei bug. Grazie!
Greywire

3

Ho scoperto che è necessario svuotare la cache del codice operativo su ogni richiesta di pagina, altrimenti le classi che implementano le interfacce non vengono caricate. Questo è stato compilato dall'ultimo trunk svn, Apache 2.4.1, PHP 5.4.0.


@ michiel-thalen sei perfetto, questo è il problema di cui stavo parlando. È davvero un peccato ... Anche se ho ancora visto un leggero vantaggio in termini di prestazioni anche con il ripristino del codice operativo su ogni caricamento. La cache dell'utente funziona ancora come previsto (nei miei test finora).
Simon

2

APC - non consigliato
Personalmente non ho usato APC con PHP 5.4 o PHP 5.5, ma l'ultimo APC stabile non è compatibile con PHP 5.4, l'ultima beta APC può essere utilizzata con 5.4 ma è scritto che hanno ancora problemi negativi con APC.

Se hai PHP 5.5
usa semplicemente Zend Opcache . È fuori dagli schemi, quindi i problemi sono minimi.

Se hai PHP 5.4
ti consiglio XCache . È completamente compatibile con PHP 5.4 e 5.5. Sviluppato attivamente. L'ultima versione stabile è stata rilasciata 3,5 mesi fa (10 ottobre 2013). Migliora le prestazioni anche se usi fastcgi.


1

Zend OPCache è incluso in PHP 5.5 con il nome php_opcache.dll nella directory php / ext. Per attivarlo:

  • Aggiungi il file php_opcahe.dll come estensione zend nel tuo php.ini file di configurazione .
  • Usa il formato zend_extension = path / to / php / ext / php_opcache.dll .
  • Posiziona zend_extension prima di xDebug zend_extension nella tua configurazione php.ini .
  • Salva il tuo file di configurazione php.ini e riavvia il server.

0

APC ha una nuova versione: 3.1.14 dal 2 gennaio, che risolve alcuni bug: http://pecl.php.net/package/APC

Tuttavia, finora ho eseguito PHP 5.4.x con APC 3.1.13 dal repository dotdeb senza problemi, quindi per me direi che è stabile. dotdeb mi ha anche informato che includeranno l'APC aggiornato nella prossima versione di PHP, che dovrebbe essere la 5.4.11.


Se stai usando APC 3.1.14 ti consiglio di tornare temporaneamente ad APC 3.1.13. Sono stati scoperti alcuni gravi bug relativi alla memoria che hanno portato alla rimozione della versione 3.1.14 dalla sezione dei download.
Leigh

Infatti, ho scoperto che il pacchetto rilasciato da dotdeb per PHP 5.4.11 includeva inizialmente APC 3.1.14 ma che è stato ripristinato per evitare i bug.
Steven De Groote

0

Stiamo sperimentando errori di memoria libera (apache segfault) con PHP 5.4.26 e APC 3.1.9. C'è un bug aperto per APC su PHP 5.4.X: https://bugs.php.net/bug.php?id=61934

Consiglio di non utilizzare questo plugin su PHP> 5.3.


0

Nella versione 5.6.3 di XAMPP (PHP 5.6.3) tutto ciò che devi fare nel tuo ini.php è questo:

[OPcache]

zend_extension = php_opcache.dll
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=24
opcache.max_accelerated_files=4000
opcache.revalidate_freq=3
opcache.fast_shutdown=1

[XDebug]

zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.max_nesting_level = 200
xdebug.profiler_append = 1
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
;xdebug.profiler_output_dir = "C:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
;xdebug.remote_enable = 0
;xdebug.remote_handler = "dbgp"
;xdebug.remote_host = "127.0.0.1"
;xdebug.trace_output_dir = "C:\xampp\tmp"

Configurazione per il framework symfony2.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.