Estas instrucciones (viejas) nos permiten hacer remote debugging sobre el entorno local de eltiempo.es a través de dbg, el módulo de debugging para PHP del autor del IDE para Windows NuSphere PhpED.
Primero averiguamos la version del php en nuestro Ubuntu para saber qué modulo instalar (5.2, 5.3, etc):
$ php -v
C:\Program Files (x86)\NuSphere\PhpED\
debugger\server
y abrimos el archivo: dbg-x.x.x-Linux.tar.gz
Cómo averiguar la carpeta del tar.gz
que debemos usar:
x86\ x86_64\ x86_TS\ x86_64_TS\
Determinar si nuestro Ubuntu es x86 o x86_64 (32 o 64 bits) y si es _TS (Thread Safe):
$ getconf LONG_BIT 32
Determinar si php tiene activado o desactivado el “Thread Safety” (TS). Usando phpinfo() o php -i
buscamos la cadena Thread Safety: si sale disabled es NO-TS, enabled sería TS…
Una manera rápida desde línea de comandos:
$ php -i -c ~/eltiempo/local_regress/etc/php5/cgi/ | grep "Thread Safety" Thread Safety => disabled
Normalmente está disabled, por tanto del directorio x86 ó x86_64 a secas, trincamos el módulo dbg adecuado según la versión de PHP.
Copiamos el dbg-php-5.3.so
(ejemplo para PHP 5.3) del tar.gz
al dir. /home/myuser
Ahora averiguamos dónde huevos van las librerías de PHP en la instalación de Ubuntu:
$ whereis php5 php5: /usr/bin/php5 /etc/php5 /usr/lib/php5 /usr/bin/X11/php5 /usr/include/php5 /usr/share/php5 /usr/share/man/man1/php5.1.gz $ cd /usr/lib/php5 $ find -name *.so ./20090626/memcache.so ./20090626/imagick.so ./20090626/mcrypt.so ./20090626/mysql.so ./20090626/gd.so ./20090626/pdo_mysql.so ./20090626/pdo.so ./20090626/mysqli.so ./20090626/imap.so ./20090626/curl.so ./20090626/http.so
Con este ejemplo vemos que los módulos van dentro del dir. 20090626
, dentro de /usr/lib/php5
así que:
Colocamos el módulo del PhpEd en la carpeta de modulos del PHP5:
$ sudo mv ~/dbg-php-5.3.so /usr/lib/php5/20090626/
Le establecemos los permisos adecuados:
$ cd 20090626 $ sudo chown root:root dbg-php-5.3.so $ sudo chmod 644 dbg-php-5.3.so
Modificamos el archivo php.ini.tpl
del proyecto, que es la plantilla que luego el comando make li convertirá en php.ini a secas:
$ nano ~/eltiempo/etc/php5/cgi/php.ini.tpl
Buscamos la linea que pone “; extension_dir directive above.”
, y justo debajo añadimos…
zend_extension="/usr/lib/php5/20090626/dbg-php-5.3.so" [debugger] debugger.hosts_allow=192.168.0.* 192.168.1.* 127.0.0.1 localhost debugger.hosts_deny=ALL debugger.ports=7869
Indicamos en hosts_allow
las IPs que deben estar autorizadas a debuggear.
También deberíamos buscar cualquier referencia a xdebug
(otro debugger) en el tpl.ini
y comentarlas prefijando las líneas con ;
(punto y coma), para no tener dos módulos de debugging ahí en el PHP…
Ya está, guardamos.
Para regenerar el php.ini
, regeneramos todo el proyecto:
$ make li lstart
Comprobamos que PHP está cargando correctamente el módulo al iniciarse, pidiéndole al PHP por línea de comandos que use el php.ini del directorio local_regress
, ejecutando lo siguiente:
$ /usr/bin/php -v -c ~/eltiempo/local_regress/etc/php5/cgi/php.ini PHP 5.3.6-13ubuntu3.6 with Suhosin-Patch (cli) (built: Feb 11 2012 02:17:16) Copyright (c) 1997-2011 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies with DBG v4.x.x, (C) 2000,2012, by Dmitri Dmitrienko
Deberíamos ver la línea final que empieza por with DBG v4.x.x. Si no la vemos es que la hemos liado con la version del módulo (32/64 bits, version PHP, etc), o no estamos ejecutando realmente el PHP que usará nuestro proyecto local de eltiempo.es.
Ahora solo nos queda mapear correctamente el proyecto en el IDE NuSphere bajo Windows para empezar a gozar…
Necesitamos tener creada una unidad de red en Windows para acceder al directorio raíz del Ubuntu desde Windows.
Ver el documento Compartir Ubuntu por red con Windows.
Suponiendo que ya tenemos creada la unidad de red R:
que corresponde al directorio raíz de Ubuntu:
En el IDE del NuSphere PhpED:
Vamos a project ⇒ properties:
Pestaña: Project:
Root directory
: R:\home\myuser\eltiempo
Run mode
: HTTP mode (3rd party WEB server)
Pestaña: Mapping:
Remote directory | Local directory | URL | Publishing directory |
---|---|---|---|
/home/myuser/eltiempo/local_regress/opt/eltiempo/php | R:\home\myuser\eltiempo\opt\eltiempo\php | http://local.eltiempo.es:50008 | |
/home/myuser/eltiempo/local_regress/opt/eltiempo/php/application/cache | R:\home\myuser\eltiempo\local_regress\opt\eltiempo\php\application\cache | ||
/home/myuser/eltiempo/local_regress/opt/common/php/CodeIgniter_1.5.4 | R:\home\myuser\eltiempo\local_regress\opt\common\php\CodeIgniter_1.5.4 | ||
/home/myuser/eltiempo/local_regress/opt/common/include | R:\home\myuser\eltiempo\opt\common\include | ||
/home/myuser/eltiempo/local_regress/opt/common/php/Smarty-2.6.18 | R:\home\myuser\eltiempo\local_regress\opt\common\php\Smarty-2.6.18 | ||
R:\home\myuser\eltiempo |
Notar cómo la última fila debe contener sólo R:\home\myuser\eltiempo
en Local directory y nada más. Así debe ser y es el truco para un mapeo correcto con una unidad de red en el NuSphere PhpED.
UPDATE para NuSphere v10:
En project properties, dentro de Run & Debug : Run Mode ha cambiado el aspecto, pero los datos vienen a ser los mismos:
Remote directory | Local directory | URL |
---|---|---|
P:\home\myuser\eltiempo | ||
/home/juanga/eltiempo/local_regress/opt/eltiempo/php | P:\home\juanga\eltiempo\opt\eltiempo\php | http://local.eltiempo.es:50008 |
etc… | … | … |