2014-05-01 22 views
7

Ho recentemente installato xdebug sul mio server ma ne ho limitato l'utilizzo al nostro sito di test, che utilizza il proprio php.ini file.Errore Xdebug: "Caricamento non riuscito xdebug.so: xdebug.so: impossibile aprire il file oggetto condiviso: Nessun file o directory"

Ad esempio, i siti di prova php.ini si trova in:

/home/test_site/public_html/subdomain_name/php.ini 

Dentro questo file php.ini ho il seguente per xdebug:

[XDebug] 
zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so 

xdebug.profiler_append = 0 

xdebug.profiler_enable = 1 

xdebug.profiler_enable_trigger = 0 

xdebug.profiler_output_dir = /home/test_site/xdebug 

xdebug.profiler_output_name = "cachegrind.out.%s-%u.%h_%r" 

Ora, la cosa è, xdebug funziona bene, nessun problema

Tuttavia, sul nostro sito principale, che ha anche un suo file php.ini, che si trova per esempio a:

/home/main_site/public_html/php.ini 

Dentro questo file non ho nulla per xdebug in là.

Ora, di recente ho installato un cron in cPanel per il main site come ad esempio:

php -f /home/main_site/public_html/cron_jobs/main_cron.php > /home/main_site/public_html/logs/main_cron.log 2>&1 

Ora, al momento del check l'uscita del cron all'interno del file di log ho l'uscita:

Failed loading xdebug.so: xdebug.so: cannot open shared object file: No such file or directory 

Perché sto ricevendo questo errore quando il sito principale non dovrebbe nemmeno caricare xdebug?

+0

Potrebbe essere necessario ricontrollare che la versione php-cli che si sta utilizzando per eseguire lo script main_cron.php non stia usando il php.ini che contiene le configurazioni xdebug. 'php -i | grep xdebug' dovrebbe mostrarti. Quindi, 'php -i | grep php.ini' dovrebbe mostrare quale php.ini il php-cli è configurato per l'uso. – dcarrith

+0

Prova con 'quale php' per capire il percorso della versione di PHP che sta eseguendo il tuo script. –

+0

@dcarrith Quando ho eseguito 'php -i | grep xdebug' Ho ottenuto 'Caricamento fallito xdebug.so: xdebug.so: impossibile aprire il file oggetto condiviso: Nessun file o directory simile. Quando ho eseguito 'php -i | grep php.ini' Ho ricevuto lo stesso messaggio di errore oltre a 'File di configurazione (php.ini) Path =>/usr/local/lib ... File di configurazione caricato =>/usr/local/lib/php.ini' – Brett

risposta

10

Anche se i due siti si suddividono e utilizzano due diversi file php.ini, CRON utilizzerà comunque qualsiasi file php.ini che PHP-CLI è configurato per l'uso. Così, per capire quale php.ini CRON sta usando, questo è il comando da utilizzare:

php -i | grep php.ini 

Se PHP-CLI sembra essere utilizzando un file php.ini che non si aspettava di essere utilizzando (come ad esempio /usr/local/lib/php.ini) questa sarà la chiave per capire perché stai vedendo errori Xdebug nei log.

Si scopre che il file /usr/local/lib/php.ini aveva messo questi due valori:

extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20090626" 
zend_extension = "xdebug.so" 

che ha causato l'errore dallo script php che è stato eseguito da cron (ad esempio PHP-CLI) perché zend_extensions bisogno il percorso completo al modulo. Questo è anche indicato nella documentazione di Xdebug: http://xdebug.org/docs/install

Quindi, per eliminare l'errore, basta commentare quella linea (o semplicemente rimuoverla). Si potrebbe anche commento o rimuovere la linea extension_dir finché non si sta caricando altri moduli quali:

extension = memcached.so 
2

Per la cronaca, in Linux Mint e penso che in alcuni Ubuntu Systems. Per cambiare il php.ini è meglio andare su /etc/php/7.0/cli/conf.d e cercare xdebug.ini e devi cambiare le righe dette nel post sopra il mio.

1

A volte potrebbe essere difficile da dove viene caricata la libreria XDebug poiché può essere eseguita specificando il percorso in php.ini o aggiungendo la lib in mods disponibile.

In primo luogo, eseguire:

$ sudo grep 'xdebug' -r /etc/php/* 

Questo vi darà i file che carica l'estensione.

Ora identificare quale php.ini è in uso:

$ php -i | grep php.ini 

Questo vi darà la versione di PHP in uso (nel caso in cui si dispone di più versioni di PHP). Ora collega la versione php al risultato del primo passaggio.

Ora, si deve commentare la riga in cui è caricata l'estensione xdebug o rimuovere il file xdebug.ini (che carica l'estensione) da/etc/php/xx/mods-available (dove xx sta per versione php in uso).

Problemi correlati