2016-01-23 47 views
13

Speriamo che qualcuno qui sappia una cosa o due su questo.PHPDocumentor 2 e PHP 7 con problemi opcache in Doctrine

breve domanda

Sono in esecuzione in un errore utilizzando phpdoc sulla riga di comando, installato tramite pera su PHP 7.0.2. L'errore è:

#> phpdoc 
PHP Fatal error: Uncaught Doctrine\Common\Annotations\AnnotationException: 
You have to enable opcache.load_comments=1 or zend_optimizerplus.load_comments=1. 
in /usr/local/php5-7.0.2-20160108-102134/lib/php/phpDocumentor/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php:193 

Come risolvere questo errore?

dettagli

Opcache è abilitata e opcache.load_comments=1 è nel mio file opcache.ini, verificata utilizzando i comandi: rispettivamente php -i | grep "Opcode" e php -i | grep "opcache". All'interno di quel file .ini posso verificare che le modifiche siano caricate controllando abilita e disabilita opcache tramite quel file.

Detto ciò, se ho opcache.load_comments=1 nel mio file .ini, perché ricevo ancora questo errore?

Grazie!

risposta

14

Ho riscontrato lo stesso problema durante l'utilizzo della versione PHAR di PHPDocumentor. Il PHAR include una versione obsoleta di Doctrine Annotations.

La versione precedente di annotazioni si riferisce alla impostazione opcache.load_comments in php.ini, che non esiste in PHP 7:

Ciò è stato risolto monte Note:

Per ora, l'utilizzo della versione di compositore di PHPDocumentor eseguendo composer require --dev phpdocumentor/phpdocumentor ha risolto il problema per me.

+1

Ora questo ha senso. PHP 7 non ha più questo nel file ini, ok questa è la ragione. In questo momento l'ho installato con PHAR e pecl, quindi se uso il compositore (che ho attualmente) si installerà su phpdocumentor nella mia attuale versione PHP usata? Voglio solo assicurarmi prima di inserire questo comando. – DataHerder

3

Grazie deepdivedylan per i collegamenti. Tuttavia, composer require --dev phpdocumentor/phpdocumentor non ha risolto il mio problema. Ma leggere i link e scaricare doctrine annotations patch 1.2.5 ha funzionato bene. Basta scaricare l'archivio e sostituire la cartella vendor/doctrine/annotations con il suo contenuto.

+0

Ha funzionato per me, grazie! –

+0

Errore irreversibile: Errore non rilevato: Classe "Doctrine \ Common \ Annotations \ AnnotationRegistry" non trovata in /home/vasu/work/hosting/prekkha/app/autoload.php:11 –

+0

risolto. non "replace folder", ma "replace content" - merge –

7

È inoltre possibile utilizzare il compositore senza modificare manualmente il contenuto delle directory dei fornitori. Basta usare:

composer require doctrine/annotations 

di avere l'ultima versione di dottrina/annotazioni (almeno 1.2.5 risolve il problema)

+1

Ha funzionato bene per me, con Symfony 2.6. – Nevertheless

+0

"- Installazione doctrine/annotazioni (v1.4.0)" dsn't lavoro. risolto da dottrine annotazioni patch 1.2.5 –

7

phpDocumentor 2.8.5 è la versione di default con Ubuntu 16.04. Tuttavia, il supporto per php7 non è stato aggiunto fino al 2.9.Ho ottenuto che funziona utilizzando la seguente nella riga di comando:

sudo apt-get install php7.0-mbstring 
wget https://github.com/phpDocumentor/phpDocumentor2/releases/download/v2.9.0/phpDocumentor.phar 
chmod +x phpDocumentor.phar 
sudo mv phpDocumentor.phar /usr/local/bin/phpDocumentor-2.9.phar 
sudo ln -s /usr/local/bin/phpDocumentor-2.9.phar /usr/local/bin/phpdoc 

Se è stato installato phpDocumentor dalla pera, utilizzare il seguente per rimuoverlo:

sudo pear uninstall phpdoc/phpDocumentor 
+1

assolutamente la migliore risposta finora per i sistemi di devops. Non richiede l'esecuzione di comandi di composizione ad hoc che estraono 62 milioni di sorgenti di composizione e richiedono il collegamento diretto a un percorso di comando finale. Questo semplice script mi ​​ha fornito un .phar che potevo usare, messo in opera che funziona perfettamente con la nostra builder 7.0.10 senza problemi! Grazie!! –

0

È possibile scaricare l'ultima versione di phar da github releases.

Il collegamento dal sito Web è a una versione precedente di esso.