Archivo de la etiqueta: php

IDEs para programar con PHP – Un poco de historia

Llevo muchos años programando con PHP y aun no me he decantado al 100% por un IDE para programar, creo recordar que al principio usaba Dreamweaver, después pase por el programmers notepad, luego con Aptana, NetBeans, eclipse,  Zend Studio,  de vez en cuando TextMate, Coda, Gedit, Sublime Text 2 y ahora estoy probando PHPstorm.

Y después del notepad llego Dreamweaver

He de decir que en un principio programaba sobre plataforma Windows, y usaba Dreamweaver, pero sus continuas «ayudas» a la hora de dejarnos regalos dentro del código me resultaban bastante molestas a la hora de conseguir los resultados finales deseados, este primer Dreamweaver creo que era la versión 3, y era un gran salto cualitativo comparado con la programación con el notepad, que aunque no lo he nombrado lo he usado, al igual que el vi, y volviendo a visitarlo años después, veo que sigue padeciendo los mismos males, a su favor diré que fue una gran ayuda el código coloreado, y sobre todo a la hora de la creación de sitios, el cliente ftp integrado que llevaba lo cual era, y sigue siendo un gran punto a su favor,  así como la corrección de código.

Programmers Notepad, ¿involución o evolución?

Una de las herramientas que mas me gustaban a la hora de programación en C++ fue el Anjuta, y me resultaba extraño que no existiera alguna herramienta parecida para programar en PHP, y googleando descubrí el Programmers notepad. A su favor,  era gratis, código coloreado, multilenguaje, muy ligero y rápido, hay que tener en cuenta que las maquinas que teníamos entonces no eran ni mucho menos las de ahora, y el en comparación con el Dreamweaver, el programers notepad era muy rápido, eso si no tenia, o por lo menos no recuerdo, el cliente ftp, pero para mi ese era un mal menor.

IDEs multiplataforma – Eclipse & java flavor  (Aptana, Eclipse PDT, Zend Studio, NetBeans, PHPStorm)

Durante un tiempo, consideraba a linux que no era un sistema para trabajo de escritorio, eso si como buen Debianita que soy, si tenia que montar un servidor para cualquier tipo de servicio instalaba y trabajaba con Debian, y mas tarde con Ubuntu. Con la llegada de Ubuntu, considere que ya era hora de cambiar mi escritorio de trabajo a una distro Linux, con ese cambio tuve que buscar herramientas con las cuales poder programar en PHP con linux, lo cual no fue en absoluto un problema sino mas bien una ventaja. Creo que comencé ha programar algo con el Vi y luego con el Gedit, este ultimo me dio y me sigue dando muy buenos resultados, sintaxis coloreada, y multilenguage, ademas también permite cambiar el tema de trabajo para ponerlo a gusto de uno, yo soy de los que le gusta el fondo oscuro a la hora de programar. En esta búsqueda de un IDE completo descubrí Netbeans, el cual a parte de permitirme programar en Java y Ruby me servia perfectamente para programar en PHP, tiene un completo gestor de errores de sintaxis, documentación, vamos genial.  A la par que usaba Netbeans descubrí Aptana, el cual, se centraba mas en Ruby y en PHP y tenia unos cuantos extras que me gustaban bastante. En la ultima versión Aptana ha integrado un servidor web integrado el cual nos permite no tener que instalar un servidor web con php en nuestro navegador para probar nuestras aplicaciones, lo cual suena muy bien, aunque si estamos trabajando con PHP 5.4 ya tenemos un servidor PHP integrado http://www.php.net/manual/en/features.commandline.webserver.php. Decir que el Aptana esta basado en Eclipse así que me lance a probarlo también y la sorpresa fue muy agradable.

Con Eclipse la programación alcanza otro nivel, aparte de la sintaxis, multiplataforma, corrector de errores y multitud de plugins que puedes ponerle, esta el modo debug, la integración con la base de datos de desarrollo, navegador interno, ejecución de test unitarios, control de versiones, etc… vamos completísimo, pero para mi gusto consume muchos recursos.

Al igual que Eclipse, por que no de ja de ser lo mismo el Zend Studio avanza un poco mas en la programación con PHP, el modulo de depuración y refractorización, estadísticas de consumo de procesos, integración con PHPcloud, lo hacen una herramienta completísima, y durante bastante tiempo ha sido mi principal herramienta de trabajo… hasta hace unos días en los que descubrí PHPStorm, el cual me ha sorprendido muy gratamente. A parte de estar basado en java, al igual que Eclipse y Zend Studio, no carga tanto el sistema, y la integración con herramientas de refractorización y calidad de código es impresionante, así como el sistema de gestión de versiones. Hay cosas que podríamos considerar tonterías pero que la verdad se agradecen como por ejemplo en las hojas css cuando defines un color te sale ese color en un recuadro en el lateral, o si tienes una regla css que se puede optimizar, te lo indica y te lo optimiza. O la visualización de código inyectado, por ejemplo una cadena SQL dentro de un código PHP te puede aparecer marcada para que de un solo vistazo la localices, en pocas palabras impresionante.

TextMate, Coda, Sublime Text 2, volvemos al principio.. o vamos más lejos

Aunque  Sublime Text 2 es multiplataforma a diferencia de TextMate y Coda que solo son para Mac, lo he puesto aquí por que los tres editores, según mi opinión son del mismo tipo, aunque quizá Coda se salga un poco de ese estilo.

Durante muchos años, el programa por excelencia para programación en Mac ha sido el TextMate y tengo que decir que ese titulo esta muy bien merecido, rápido no lo siguiente, multilenguage, coloreado, plugins para todo lo que necesitas y mas, detector de errores, vamos completísimo, eso si la hoja de accesos rápidos y atajos de teclado también es completísima. Durante mucho tiempo el TextMate ha estado un poco estancado en su desarrollo, pero ya esta anunciada, y se puede descargar la versión 2 en la cual, aparte de migrar su código a open source las mejoras que han implementado son bastante buenas, pero creo que el tiempo que han estado parados lo han perdido frente a otra herramienta del mismo tipo que es Sublime Text 2. En lineas generales es bastante parecido a TextMate, esta basado en Python y al igual que Textmate tiene una larga lista de combinaciones de teclado para ejecutar distinas rutinas, asi com autocompletar comandos y funciones. También tiene un modo de no distracción y un mapa de código que puede resultados muy útil. A diferencia de TextMate, Sublime Text es multiplataforma.

Finalmente esta Coda, del cual la primera impresión fue muy buena, completísimo, sobre todo la parte de HTML y CSS, algo en lo que suelen flojear los otros, modo vista previa, el autocompletar, vamos un dreamweaver bien hecho y muy ligero.

Listado de IDEs
IDE Plataformas Idioma Precio licencia Enlace
Dreamweaver Win/Mac Multilenguaje 529,82€ / Trial Enlace
Programmer’s Notepad Win Multilenguaje Gratuito Enlace
Aptana Win/Mac/Linux Ingles Gratuito Enlace
Eclipse Win/Mac/Linux Ingles Gratuito Enlace
Zend Studio Win/Mac/Linux Ingles 299,00€ / Trial Enlace
NetBeans Win/Mac/Linux Multilenguaje Gratuito Enlace
PHPStorm Win/Mac/Linux Ingles 94€ / Gratuito / Trial Enlace
Sublime Text 2 Win/Mac/Linux Ingles 59$ / Trial Enlace
TextMate Mac Ingles 45,63€ / Trial Enlace
Coda 2 Mac Multilenguaje 99€ / Trial Enlace

Nombres cortos de variables en bucles – PHP Tips

La inmensa mayoría de programadores, entre los cuales me incluyo, a la hora de escribir un bucle for lo hacemos usando la variable i, y nos quedaría de la siguiente manera:

for ($i = 0; $i <= 10; $i++) {
 // TODO Procesos a ejecutar
}

Este código esta claro y es muy fácil de interpretar.

Imaginemos ahora que tenemos un array llamado $ligas en el cual se almacenan las ligas de fútbol, cada clave de este array apunta a otra array con los equipos de esa liga, y cada clave numérica de este array apunta a un array donde aparecen los nombres de los jugadores.

for ($i = 0; $i < count($ligas); $i++) {
    for ($j = 0; $j <= count($ligas[$i]); $j++) {
        for ($k = 0; $k <= count($ligas[$i][$j]); $k++) {
            echo $ligas[$i][$j][$k];
        }
    }
}

Si realizamos el diseño de nuestros bucles de esta manera seguramente, si queremos compartir este código con alguien le resultara un poco difícil de entender, y cuando digo alguien también nos incluyo a nosotros mismos dentro de un tiempo cuando revisemos el código. Quizá si realizáramos este código de esta manera seria un poco mas claro

for ($liga = 0; $liga < count($ligas); $liga++) {
    for ($equipo = 0; $equipo < count($ligas[$liga]); $equipo++) {
        for ($jugador = 0; $jugador < count($ligas[$liga][$equipo]); $jugador++) {
            echo $ligas[$liga][$equipo][$jugador];
        }
    }
}

Ahora queda mas claro que es lo que se muestra en este bucle.

Conocer el sistema operativo donde se ejecuta nuestro PHP – PHP Tips

A veces podemos vernos en la necesidad de conocer que sistema operativo, o versión de este es en el que se esta ejecutando nuestro codigo PHP, por ejemplo si necesitamos establecer la configuración de las locales.

Tenemos dos opciones para conocerlo, la primera es por medio de la constante PHP_OS, y otra es con la función php_uname(). La primera solo nos va a devolver el sistema operativo, p.e Linux, FreeBSD, WINNT, … en cambio con la funcion nos devolvera una información mas completa. Por ejemplo

 

echo php_uname();
echo PHP_OS;

/* Algunas posibles:
Linux localhost 3.2.0-27-generic #43-Ubuntu SMP Fri Jul 6 14:46:35 UTC 2012 i686
Linux

FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001
FreeBSD

Windows NT XN1 5.1 build 2600
WINNT
*/

 

La funcion php_uname(), puede aceptar varios parametros, mode para poder especificar que tipo de salida queremos. Estos parametros son:

  • ‘a’: Es la opción por defecto. Contiene todos los modos de la secuencia «s n r v m».
  • ‘s’: Nombre del sistema operativo. eg. FreeBSD.
  • ‘n’: Nombre del host. eg. localhost.example.com.
  • ‘r’: Nombre de la distribucion. eg. 5.1.2-RELEASE.
  • ‘v’: Informacion de la version. Varia mucho dependiendo de los sistemas operativos.
  • ‘m’: Tipo de maquina. eg. i386.

 

echo php_uname();
// Linux pajaroto.ensenalia.com 3.2.0-27-generic #43-Ubuntu SMP Fri Jul 6 14:46:35 UTC 2012 i686
echo php_uname('s');
// Linux
echo php_uname('n');
// Localhost
echo php_uname('r');
//3.2.0-27-generic
echo php_uname('v');
// #43-Ubuntu SMP Fri Jul 6 14:46:35 UTC 2012
echo php_uname('m');
// i686

+ Info http://es.php.net/manual/en/function.php-uname.php

Fechas PHP a MySQL y vuelta – MySQL Tips

PHP Programming languageUna de las cosas con las que toca lidiar practicamente siempre que trabajamos con fechas contra una base de datos MySQL es que la base va MySQLa almacenar las fechas de la manera ISO «año-mes-dia» y nosotros a la hora de trabajar trabajos con el formato Europeo, ya sea «dia-mes-año» o «dia/mes/año».

Durante muchos años trabajaba con la tecnica de la función bidireccional, es decir, me creaba una función la cual cuando le llegaba la fecha la convertia en un sentido u otro.

function cambiaFormatoFecha($fechaOriginal)
{
 //Dividimos la fecha de la hora si existe
 $partesStamp = explode(" ", $fechaOriginal);
 // La primera parte es la fecha, la segunda la hora
 $partesFecha = explode ( "-", $partesStamp[0] );
 // La fecha final
 return $partesFecha[2] ."-".$partesFecha[1]."-".$partesFecha[0];
}

MySQL guarda las fechas separadas por guiones, así que si nosotros definimos el formato de fecha separado con guiones, pues eso que tenemos ganado y esta función nos convierte tanto nuestras fechas cuando las introducimos como las fechas que devuelve el MySQL.

Trabajar con esto puede parecer que es una gran ventaja, pero la verdad que a nivel de rendimiento no lo es ya que supone ejecutar la función cada vez que aparezca un registro de fecha.

Una solución bastante mas eficiente es la de procesar las fechas en la consulta. Para eso utilizaremos las funciones incorporadas de MySQL DATE_FORMAT y STR_TO_DATE.

Si queremos unos registros de una determinada fecha podemos hacer:


SELECT * FROM `tabla` WHERE fecha LIKE STR_TO_DATE('mifecha','%d-%m-%Y);

En esta consulta mifecha esta en el formato dia-mes-año

Si queremos ver las fechas en el formato dia-mes-año


SELECT DATE_FORMAT(fecha,'%d-%m-%Y) FROM `tabla`;

Para mas información

STR_TO_DATE http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_str-to-date

DATE_FORMAT http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-format

Función que nos devuelve el numero de días de un mes

Mas de una vez nos habremos visto en la duda de, como hacer que según el mes y el año que hemos marcado que nos de los dias que tiene ese mes, pues bien, en php hay una función interna que nos facilita el trabajo, esta es cal_days_in_month, y hay que pasarle como parametros el calendario que queremos, por ejemplo CAL_GREGORIAN, el numero del mes, y el año y nos devuelve el numero de dias que tuvo ese mes.

$numeroDias = cal_days_in_month(CAL_GREGORIAN, 10, 2008);
echo $numeroDias; //Devolvera 31

vía PHP: cal_days_in_month – Manual.

phpmaster | 10 Tips for Better Coding

 

Gran articulo en el que se ven 10 puntos que hay que tener muy en cuenta a la hora de programar un buen y mantenible codigo php.

phpmaster | 10 Tips for Better Coding.

Archivos php principales de un tema wordpress

Avatar de noellassekaspw2012

Aqui una aproximacion a los archivos mas importantes–>

http://yoast.com/wordpress-theme-anatomy/

Si eliminamos  el footer.php de la plantilla que pasa!? –>

Hay una jerarquia de lo que se carga en caso de que no encuentre el archivo, por si al instalar algo os encontrais que se carga algo que no toca

http://digwp.com/2010/09/wordpress-3-template-hierarchy/

Ver la entrada original

PHP: PHP 5.4.0 Release

The PHP logo displaying the Handel Gothic font.
Ya tenemos la nueva versión estable de PHP y como cada vez que se actualiza una versión tenemos mejoras que nos pueden interesar a la hora de programar y problemas que nos pueden surgir con nuestras antiguas aplicaciones.

Como caracteristicas principales:

Como cambios que pueden afectar a la compatibilidad:

  • Register globals, magic quotes y safe mode a sido eliminado.
  • La sintaxis break/continue $var has sido eliminada.
  • La opcion en el ini de allow_call_time_pass_reference ha sido eliminada
  • El default_charset se ha establecido a «UTF-8».

Actualizando a PHP 5.4

Una vez vi el anuncio, actualize el servidor de desarrollo y las aplicaciones que uso para poder usar las nuevas caracteristicas, probrarlas y comprobar como se comportaba con las aplicaciones que tengo desarrolladas, antes de plantearme la idea de actualizar el servidor de producción y tengo que decir que me voy a esperar un poco a actualizar el de producción ya que me ha surgido algún que otro problemilla, sobre todo con el Zend Framework, y mas concretamente con el Zend_PDF. Por lo demás si que he observado una mejora notable en el rendimiento, y eso que el php 5.3 era muy superior en rendimiento a la versión 5.2

PHP: PHP 5.4.0 Release Announcement.

Clase para la conexión a Base de Datos con PDO basada en Singleton Pattern – PHP Tips

Esta es una clase la cual la uso muchísimas veces para establecer la conexión a una base de datos con PHP. Se establece la conexión via PDO y esta basada en el patrón Singleton.  Una de las ventajas que tiene esta clase es que solo establece la conexión una vez, y por muchas veces que sea instanciada no duplica la conexión.

final class DBConnection {
	
    private static $_handle = null;
    private static $_dsn = "mysql:dbname=mydb;host=my.host.com;port=3306";
    private static $_user = "myUserName";
    private static $_password = "myPassword";
    private static $_options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); // SET UTF-8
    /**
     * Deny Construct
     */
    private function __construct()
    {
    }
    /**
     * Deny Clone
     */
    private function __clone()
    {
    }
    /**
     * Function to connect width database
     */
    function connect()
    {
        if ( is_null( self::$_handle ) ) {
            try {
                self::$_handle = new PDO( 
                    self::$_dsn, self::$_user, self::$_password, self::$_options 
                   );
            } catch ( PDOException $error ){
                die ( $error->getMessage() );
            }
        }
        return self::$_handle;
    }
}

La tengo disponible en http://gist.github.com/1771941 o para clonar con Git en git://gist.github.com/1771941.git

Bugzilla Webservice client con Zend Framework

Este es un ejemplo de como conectarnos al servidor de bugzilla y enviar el Bug con la libreria Zend_XmlRpc

require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
$server = 'http://bugzilla.mydomain.com/xmlrpc.cgi';
$client = new Zend_XmlRpc_Client( $server );
// Create the http client
$httpClient = new Zend_Http_Client();
$httpClient->setCookieJar();
$client->setHttpClient( $httpClient );
// Bugzilla Login
$params = new Zend_XmlRpc_Value_Struct( 
		array(
			'login' => 'bugzilla@mydomain.com', 
			'password' => 'mypassword', 
			'remember' => 1
			)
		);
$request = $client->call('User.login', $params );
// Create the Bug
$bugParams = new Zend_XmlRpc_Value_Struct(
		array( 'product' => 'MyApp',
				'component' => 'Main',
				'summary' => 'Bug Sumary',
				'version' => '1.0',
				'description' => 'This is the description' 
			  )
		);
$result = $client->call( 'Bug.create', $bugParams );
// Logout
$result = $client->call( 'User.logout' );

+Info XmlRpcClient Zend Framework
Bugzilla Webservice API