2015-11-25 63 views
22

Nuovo in PHP. Lavorare su un progetto PHP e avere xdebug abilitato per poter eseguire il debug delle mie applicazioni php. Il server di produzione non ha abilitato xdebug perché è gestito da un altro team. Sulla mia macchina locale, quando ho eseguito compositore che mi dà un avvertimento dicendoPHP compositore xdebug warning

You are running composer with xdebug enabled. This has a major impact on 
runtime performance. 

Non voglio disabilitare xdebug quando sto sviluppando. Volevo solo confermare che l'esecuzione di xdebug in ambiente dev avrebbe dovuto avere nessun impatto sul compositore che installava le librerie/le prestazioni dell'app sul server di produzione.

+0

Non si esegue 'compositore install' (per instaling produzione-dipendenze su server di produzione) in una shell ssh direttamente sul server di produzione o sul computer locale? Quest'ultimo sarà più lento se XDebug è abilitato, ma potrebbe essere necessario XDebug per es. PHPUnit ... – SpazzMarticus

risposta

25

Non voglio disabilitare xdebug quando sto sviluppando. Volevo solo confermare che l'esecuzione di xdebug nell'ambiente dev avrebbe dovuto avere nessun impatto sul compositore che installava le librerie/le prestazioni dell'app sul server di produzione.

C'è un enorme impatto del solo caricamento di Xdebug. Rallenta l'esecuzione del Composer verso il basso di 3x o 4x, anche quando la funzione di creazione del profilo non è abilitata.

In altre parole: xdebug ha un valore inestimabile per il debug, ma aumenta la memoria utilizzata e il tempo di elaborazione di Composer.


Come disattivare Xdebug per corre Composer?

Il mio suggerimento è di scrivere un piccolo helper di invocazione per eseguire Composer.

L'helper è uno script di bash o batch che chiama PHP con un php.ini personalizzato, in particolare configurato per Composer. Lo chiamiamo: php.ini-composer.

È possibile copiare l'attuale php.ini e regolarlo per l'esecuzione di Composer rimuovendo xdebug o commentandolo in questo modo: ;zend_extension = "/path/to/my/xdebug.so".

Mentre ci si trova: l'impostazione memory_limit=-1 è anch'essa utile.

Il comando completo sembra quindi su Windows: php.exe -c php.ini-composer composer.phar %*

clonare l'idea per uno script bash.


E puoi trovare la risposta completa alla tua domanda nelle domande frequenti di Composer.

https://getcomposer.org/doc/articles/troubleshooting.md#xdebug-impact-on-composer

E 'stato aggiunto/aggiornato solo poche ore fa.


Alcune alternative (invece di utilizzare file ini separata) sono menzionati anche here.

+0

Solo per riconfermare: non ha alcun impatto sull'esecuzione effettiva dell'app direttamente su un server di produzione in cui xdebug non è installato? Non mi dispiace che il compositore sia lento. – user275157

+1

Confermato. Nessun impatto, se non caricato! (Inoltre: puoi sempre accelerare un po 'il tuo sistema di produzione riducendo il numero di estensioni caricate al minimo necessario dall'applicazione.) –

5

Come con gli script Web, anche gli script CLI devono essere eseguiti più lentamente.

Se è necessaria la prestazione runtime aggiunta, è possibile disabilitare XDebug solo sulla CLI. Imposta la tua installazione PHP in modo che utilizzi diversi file ini per CLI e il tuo server, as this answer suggests.

1

creare un file denominato php-composer.ini da qualche parte con il seguente contenuto (la configurazione minima di PHP per compositore):

extension_dir = "D:/php/ext/" ;according to your system 
extension=php_openssl.dll 
memory_limit=-1 ;optional 

Ora creare un file denominato cmz.bat con il seguente contenuto. (modificare i percorsi di conseguenza)

@ECHO OFF 
php -c "D:\php-composer.ini" "C:\ProgramData\ComposerSetup\bin\composer.phar" %* 

aggiungere questo file al percorso di sistema o alla root di progetto. Ora usa cmz invece di composer e non vedrai quel messaggio e si spera che la velocità del compositore venga aumentata.

nota: alcuni pacchetti richiedono estensioni php specifiche. è necessario aggiungere loro di php-compsoer.ini file o accodando --ignore-platform-reqs interruttore per cmz.bat file di

1

Su un nuovo download di Symfony 3.1 e PHP 7.0, è possibile eseguire il seguente (dopo aver modificato per includere il percorso del file composer.phar) :

php -n -d extension=json.so -d extension=phar.so -d extension=pdo.so -d extension=ctype.so /path/to/composer update 

Se avete qualsiasi fornitori in più al tuo file di composer.json, si potrebbe trovare che hanno una dipendenza da un interno, quindi è necessario includere che aggiungendo -d extension=name_of_extension.so alla lista.

Quello che sta succedendo qui è il flag -n con i valori predefiniti di PHP - non carica alcun file di configurazione PHP ini, quindi XDebug non viene mai caricato. Quindi ciascuno dei flag -d consente di impostare dinamicamente i valori di configurazione, quindi è possibile includere estensioni.

+0

Grazie, ho impiegato troppo tempo a provare a definire più estensioni come '-d extension = phar. così; extension = pdo.so; 'o' -d extension = phar.so, pdo.so; ' – mickadoo

0

Le versioni moderne di Composer possono funzionare con XDebug abilitato per impostazione predefinita per CLI SAPI. Genera un nuovo processo PHP con l'estensione XDebug disabilitata nel caso in cui venga rilevata.

È possibile disattivare questo comportamento impostando la seguente variabile d'ambiente:

COMPOSER_ALLOW_XDEBUG=1 

trovato questo nella documentazione: https://getcomposer.org/doc/articles/troubleshooting.md#xdebug-impact-on-composer