Archivos en la Categoría: php

Editores PHP para Linux

Buscando un editor de PHP que disponga de algunas características esenciales para mi gusto como coloreado de sintaxis, autocompletado de código, gestión de proyectos, chequeo de sintaxis y bastante importante que sea gratuito. Después de muchas pruebas me quedé con los siguientes 3 que pongo a continuación:

Eclipse Uno de los primeros que probé, no es el que utilizo actualmente pero siempre lo tengo instalado por si lo llegara a necesitar, es bastante pesado y requiere de Java para funcionar. Es muy completo y tiene versiones tanto para 32 o 64 bits, funciona tanto para Windows como para Linux.

Aptana Está basado en Eclipse y dice ser incluso más completo. Me pareció más pesado que Eclipse y trae la desventaja que también requiere de Java para funcionar.

Komodo Edit Llevo un tiempo utilizando este, tiene versiones 32 y 64 bits y la diferencia principal con los anteriores que está escrito en Phyton lo que lo hace mucho más veloz que los anteriores editores.

Otros editores de son más livianos y por más que tengan funciones más reducidas no dejan de cumplir con su propósito son:

Quanta Plus
Bluefish

Anuncios

Debian Php Apache Mysql Phpmyadmin Ftp

Si bien no es muy complicado instalar los componentes para dejar funcionando un servidor web casero, las guías que hay no son muy actuales y el nombre de algunos de los paquetes necesarios cambiaron o cambian según el tipo de distribución base que se esté utilizando.

El sistema es Debian Squeeze con los siguientes repositorios

deb http://ftp.debian.org/debian squeeze main non-free contrib
deb-src http://ftp.debian.org/debian/ squeeze main non-free contrib

deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

Instalación de Apache
# apt-get install apache2

Instalación de Php5 con componentes necesarios para la integración con otros servicios
# apt-get install php5 libapache2-mod-php5 php5-common php5-mysql

Instalación de Mysql con componentes necesarios para la integración con otros servicios
# apt-get install mysql-common mysql-client mysql-server

Instalación de PhpMyadmin
# apt-get install phpmyadmin

Con estos pasos ya están corriendo los servicios básicos, para probarlo primero es necesario reiniciar Apache
# /etc/init.d/apache2 restart

Probar Apache
En el navegador teclear

http://localhost

Debería mostrar una página con el texto “It works!”.

Probar Php
# vim /var/www/php.php

Colocamos Phpinfo, guardamos y cerramos
En el navegador teclear

http://localhost/php.php

Debería mostrar una página con información sobre la versión de Php que se encuentra corriendo.

Instalación de un servidor Ftp

Cabe aclarar que la intención es usar estos servicios en un entorno de prueba o de desarrollo donde la seguridad que se maneja es mínima o ninguna. La intención es tener los recursos disponibles para probar sitios web mientras son desarrollados. Como detalle en esta guía no se explica como abrir puertos en el router para que el sitio alojado en nuestro servidor puede ser consultado desde afuera. El servidor que vamos a utilizar es Vsftpd.

Instalación de Vsftpd
# apt-get install vsftpd

Configuracion de Vsftpd
# vim /etc/vsftpd.conf

Las siguientes lineas deben estar descomentadas (sacarles el “#”) y con los siguientes valores:

listen=YES
local_enable=YES
write_enable=YES
local_umask=022

Es necesario también agregar al final del archivo la siguiente linea.

local_root=/var/www

Esto lo que hace es cambiar el directorio por defecto una vez que estamos conectados, al directorio /var/www. Este directorio es desde donde el servidor Apache toma los scripts.

Reiniciar el servicio Vsftpd
# /etc/init.d/vsftpd restart

Con esta configuración básica, los archivos que subamos a nuestro servidor ftp pueden ser ejecutados por nuestro servidor Apache,

En el sistema (el que está corriendo el servidor Ftp) es necesario que estén creados los usuarios con los cuales nos vamos a conectar, para este caso asumimos que existe el usuario “usuario1” con la contraseña “usuario1”. El usuario Root no puede loguearse por Ftp.

Desde el equipo cliente:

De no disponer de un cliente ftp, podemos instalar uno muy poderoso que trabaja a través de una terminal, su nombre es Lftp.

Instalación de Lftp
# apt-get install lftp

Ingresamos desde una terminal a nuestro servidor ftp, para el ejemplo tomamos que la ip del servidor es 192.168.1.2
lftp -u usuario1 192.168.1.2

Se nos va a solicitar la clave para el usuario “usuario1”, en nuestro ejemplo la contraseña es “usuario1”.

Algunos comandos que podemos utilizar:

ls Para que nos muestre los archivos y directorios junto con sus permisos.
pwd Para que nos muestre en que directorio estamos parado
cd Para subir de directorio
cd .. Para bajar de directorio
mget Para traer un archivo desde el servidor a la ubicación donde estamos posicionados en nuestro equipo
mput Para subir un archivo desde la ubicación en la que estamos posicionados al servidor
lcd Podemos cambiar el directorio en el cual estamos posicionados en nuestro equipo sin necesidad de cerra la sesión Ftp.

Cada vez que modificamos algo en el archivo vftpd.conf es necesario reiniciar el servicio para que este tome la nueva configuración. También es necesario cerrar la sesión Ftp si estuviéramos conectados y volvernos a conectar.

Phpmailer parse error unexpected

El error puede ocurrir tanto durante la configuración, como en un momento determinado, ya que no depende en si de la clase, sino de la version de Php del servidor donde esté corriendo. En mi caso descargué la versión para Php 5 pero en el servidor corria la versión de Php 4.4.4, como el servidor tenía también la opción de usar la versión 5.2.0 de Php, la cambié y no volví a tener el mismo error.

Mientras que investigaba porqué pasaba esto, encontré que mucha gente lo utilizaba sin problemas, hasta que (lo más seguro) el servidor actualizó la versión de Php y la clase Phpmailer dejó de funcionar, obteniendo el mismo error. Hay varias versiones de Phpmailer según la versión de Php que corra en nuestro servidor.

El error completo es:

parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’

Campos con tildes en Mysql, Php

Intentando guardar textos en la base de datos, me encontré con el problema que las letras con tildes no se guardan como tales, sino que según la codificación pueden aparecer de distintas maneras, al momento de mostrarlo, se siguen viendo igual, con lo que distorsiona la palabra.

La codificación que debería usarse es Utf8. El problema es que son distintos y variados los lugares donde hay que cambiar la codificación, y si todo el programa usa una codificación, y el servidor donde termina colgada la página otra, nos encontramos con un enorme problema. Una solución simple es usar

htmlentities

Suponiendo que tenemos una cadena de texto en la variable $texto

Se utiliza

$texto = htmlentities($texto);

Lo que hace es cambiar los tildes a su equivalente en html, por ejemplo una á lo cambia a á

Al momento de mostrar el texto, el navegador lo entiende como una letra con tilde y la muestra.

Validar formulario en la misma página Php

Con esto, se logra que si algún campo no es correcto, se muestre, sin tener que usar variables de sesion, o formularios enviando hacia atras para que muestren los datos que si estaban correctos. En algunos casos, y según la configuración del paquete que se use que contenga php, mysql, y apache (wamp, lampp, etc) y si se utilizan variables de sesion, se pierden los valores pasados por post al volver hacia atrás. Con este método, además de ser más sencillo, se evita eso.

Una función contiene el formulario, que es, llamado 2 veces, la otra función contiene la validación (En este caso solo cambia la primera  letra a mayúscula).

$nomb = $_POST[nombre];
$apell = $_POST[apellido];
$ocupa = $_POST[ocupacion];

if($nomb == “” or $apell == “” or $ocupa == “”)
{
crear_formulario($nomb, $apell, $ocupa);
}
else
{
validar_form($nomb, $apell, $ocupa);
}

//================== -FUNCIONES- =========================

function validar_form($nombre, $apellido, $ocupacion)
{
$nombre= ucfirst($nombre);
$apellido= ucfirst($apellido);
$ocupacion= ucfirst($ocupacion);

crear_formulario($nombre, $apellido, $ocupacion);
}

=======================================================

function crear_formulario($nombre, $apellido, $ocupacion)
{
echo “<table align=’center’ name=’tabla2′><form method=’post’ action=’ffunction.php’ name=’formvalifunct2′>”;

echo “<tr><td align=’center’>Nombre</td></tr>”;
echo “<tr><td align=’center’><input type=’text’ size=’25’ name=’nombre’ value=’$nombre’></td></tr>”;
echo “<tr><td align=’center’><br></td></tr>”;

echo “<tr><td align=’center’>Apellido</td></tr>”;
echo “<tr><td align=’center’><input type=’text’ size=’25’ name=’apellido’ value=’$apellido’></td></tr>”;
echo “<tr><td align=’center’><br></td></tr>”;

echo “<tr><td align=’center’>Ocupaci&oacute;n</td></tr>”;
echo “<tr><td align=’center’><input type=’text’ size=’25’ name=’ocupacion’ value=’$ocupacion’></td></tr>”;
echo “<tr><td align=’center’><br></td></tr>”;

echo “<tr><td align=’center’><input type=’submit’ value=’enviar’></td></tr>”;

echo “</form></table>”;
}

?>

Trabajar con fechas, comparar, cortar php

Algo bastante complicado en php es trabajar con fechas, realmente lo complicado es levantarlo de la base de datos y  mostrarlo como se quiera mostrar.

Antes de poder levantarlo de la base de datos, es necesario ingresarlo:

Una formula bastante buena es usar un campo “DATETIME” en la base de datos.

$fecha= date(“d-m-Y H:i:s”);

Y al momento de ingresar el valor se usa $fecha.

Tres problemas que aparecen usando este método.

Uno es que la mayoría de las veces uno no necesita mostrar las horas, los minutos y los segundos, sobre todo cuando se muestra la fecha de registración de alguien. Pero si al menos una vez se usan las horas, minutos, o segundos a lo largo del programa, tienen que estar ya insertados, en ese caso, se cortan los caracteres que no se quieran mostrar.

Supongamos que ya se hizo un select del campo fecha, y se recorrió el array, osea, está pronto para ser mostrado el valor.

$fecha=substr($fecha, 0, 11);

En ese caso, al desplegar el valor de $fecha mostraría la fecha hasta el caracter 11, justo antes de que empiece a desplegar la hora. La función substr también sirve para cortar una cadena de texto.

El segundo problema que se puede encontrar es querer comprobar que fecha es mas nueva, en ese caso, se hace el select de las dos fechas, y con un if se comprueba cual es mayor.

if($fecha1 < $fecha2)

El tercer problema es que el formato de fecha (aaaa-mm-dd) no corresponde a la que se usa habitualmente (dd-mm-aaaa).

En ese caso, con una función de php, se convierte a segundos esa fecha, empezando a contar desde una fecha unix estipulada, (1960-12-31).

$conv=strtotime($fecha);

Y luego se puede volver a convertir usando el formato que se quiera mostrar.

$fecha= date(“d-m-Y H:i”,$conv);

En este caso, se puede mostrar como dd-mm-aaaa

Definir funciones en php

Se dice que las funciones se deben definir en otro script y mediante include o require para poder usarlos. De todas maneras igual una función puede definirse en el mismo script donde se llama porque php primero lee todo el código y no lo implementa hasta que es llamado.

Otra cosa que se puede hacer es tener primero el lugar donde se llama la función y después definida la función por lo mismo que se dijo antes.

Algo que me dio problemas, y que no está explicado en muchos lados, es cuando se define la función dentro de un if, o un while. Lo mejor sería definir la función al final del todo y asegurarse que no esté dentro de nada para que no de problemas.

header(“location:pagina.html”); – php

header(“location:pagina.html”);

Cuándo se trabaja con headers hay que tener dos cosas muy en cuenta, una es que todos los echo que se pongan ya sea para pruebas o para lo que sea, no se van a ver, y es porque se ejecuta en el servidor, y cuando llega, ya llega la siguiente página que se llama.

De todas maneras, un header da un error si hay un echo en la misma sentencia o medio cerca, me pasó de no darme el error si la linea del echo esta lejos de la linea del header.

Asimismo dichos echos no se van a ver, así que no tiene sentido que se ejecuten.

Editores php

Editores Php hay muchos que corran sobre Linux, pero encontrar uno que se ajuste a las necesidades no siempre es fácil. Yo más que un editor, buscaba un entorno de desarrollo.

Mis primeros pasos los di con Bluefish desde Ubuntu, y Notepad ++ desde Windows. Al querer dar pasos mas grande, necesitaba algo que fuera más poderoso, y a la vez me ayudara más.

Hablando con gente que domina el tema hace tiempo me recomendó Zend Studio. Es del mismo equipo que desarrollo Php, el problema es que es pago.

Al final pude encontrar uno que se ajustaba a mis necesidades, que coloree sintaxis, que indente automático, que cierre comillas, paréntesis, llaves y corchetes estomáticamente, que cheque los errores en código, y que muestre opciones al momento de escribir el código. Y de paso, tenía otra importante característica que no era un requisito pero que ayuda, es la que es multiplataforma, y no precisa instalarse porque está echo en java, eso si, precisa tener java corriendo en el sistema.

Para los menos exigentes está Easyeclipse

Para los más exigentes está Eclipse Pdt

Después hay otros editores que cumplen sus funciones, pero no llegan a mis expectativas, uno de esos casos es Quanta Plus, que sería mi elección si ayudara con la sintaxis, pero que está muy completo al momento de trabajar con Html.

Un editor bastante completo es

Gphpedit, indenta automático, resalta con colores la sintaxis, incluso ayuda con la sintaxis, y es muy liviano, es la opción para cuando hay que salir del apuro, y no se pueden descargar los 122 mb del proyecto Pdt de eclipse.

Y uno un poco mas básico, pero interesante igual es Geany.

Todas las opciones que nombre corren mínimo en Linux, pero desconozco si todos tienen su versión para Windows.

Uno que extrañe al momento de migrar a linux fue el notepad ++ aunque tenía sus déficit, saca muy bien del apuro.

Php volver para atrás y tener el valor de los campos

Un problema común que nos encontramos al momento de crear formularios, es que si falla la validación de algún campo es necesario recargar el mismo, por lo que según nuestra configuración los campos pueden aparecer en blanco y es necesario volver a cargarlos. Lo que si estamos haciendo pruebas es bastante engorroso sobre todo con formularios largos.
Este problema surge porque Php se ejecuta del servidor y no en el cliente, osea en el navegador. Sería como estar jugando un juego de estrategia por turnos.
La validación no se realiza en tiempo real, sino que es necesario llamar a otra página o a ella misma para que la misma se realice.

Otra opción que tenemos es validar los campos con Javascript, pero esto tiene básicamente dos problemas, el primero es que los navegadores pueden bloquearlos, y el segundo es que pueden saltarse la validación lo que implica que estaríamos ingresando datos no comprobados a nuestra base de datos. En este caso lo mejor sería realizar una validación con Javascript y una segunda validación con PHP.

La mejor opción para validar con PHP y mantener el valor de los campos en caso de que la validación falle es llamar a la misma página y realizar la validación al comienzo de la misma, en los campos del formulario como opción “value” se utiliza la variable de PHP.