Inicio

jueves, 1 de septiembre de 2011

Subiendo ficheros al servidor

Una de las tareas que más pueden presentarse a la hora de programar con PHP es la de subir archivos al servidor. la función que nos va a permitir esta tarea es upload().
Para el correcto aprendizaje utilizaremos un ejemplo, en él que subiremos un archivo. Este solo puede ser de extencion .zip y ocupar menos de 30 kb, definiendo así las opciones del upload con php.

Primero empezaremos con el formulario html, encargado de enviar el archivo al servidor.



action="subir.php" method="post" name="miformulario" enctype="multipart/form-data">




Este formulario tiene un parametro nuevo llamado enctype, con el valor "multipart/form-data", informando que envía datos y archivos, opción indispensable para subir correctamente el fichero.


El fichero al que enviamos el formulario, encargado de procesarlo se llama subir.php.
Cómo vimos en el formulario, el campo de archivo se llama archivo:



De acuerdo a este nombre sera que trabajaremos en el lado del servidor, o sea en el script.
El archivo se guarda en la carpeta temporal del servidor, dato que hay que tenerlo en cuenta ya que no todos los servidores cuentan con esta opción y ponen el tamaño de dicha carpeta a 0, imposibilitando subir archivos.

Para referirnos al archivo en el script lo hacemos por medio de: $archivo

Otras propiedades que tendremos a nuestra disposicion es el tamaño (en bytes) y el nombre del archivo.
$archivo_name - Nombre del archivo (ej: instaladores.zip, miarchivo.zip)
$archivo_size - Tamaño del archivo en bytes (si son 10kb serian 10000 bytes)

Nota: A este punto cuándo nos referimos al archivo lo hacemos siempre con $archivo, debido a que en el formulario lo denominamos de esta forma().

La explicacion la hago suponiendo un conocimiento basico de php por parte del lector.

Primero mostrare el script, luego explicare linea por linea el script:


<?
$extension = explode(".",$archivo_name);
$num = count($extension)-1;
if($extension[$num] == "zip")
{
if($archivo_size < 30000)
{
if(!copy($archivo, "archivos/".$archivo_name))
{
echo "error al copiar el archivo";
}
else
{
echo "archivo subido con exito";
}
}
else
{
echo "el archivo supera los 30kb";
}
}
else
{
echo "el formato de archivo no es valido, solo .zip";
}
?>


Lo primero que haremos sera comprobar que la extencion del archivo es la permitida (.zip).
Para ello utilizamos la funcion de php explode, la cual guardará en un array el nombre del archivo segun el primer parametro (el punto):

$extension = explode(".",$archivo_name);
Para mejor entendimiento, si el archivo se llama ficheros.zip el explode pondria en este caso en la variable $extencion el nombre en dos partes: $extension[0] y $extension[1] los cuales contienen:
$extension[0] --> "ficheros"
$extension[1] --> "zip"
Ahora obtendremos la longitud del array, en este caso seria de 2 (ya que contiene 2 elementos "ficheros" y "zip"), a ese numero le mermamos 1 y lo asignamos a una variable llamada $num:
$num = count($extension)-1;

Nota: Le hemos mermado 1 a la longitud por que cuando queramos llamar al array $extension[$num] debemos de hacerlo teniendo en cuenta que los elementos van desde 0, por lo que aunque contenga 2 elementos no podemos llamar al segundo con $extension[2], si no que tenemos que llamarlo por su posicion $extencion[1].


Ahora haremos el condicional. Si la extencion del archivo es zip continuaremos con el proceso de upload, de lo contrario mostraremos mensaje de error.

if($extension[$num] == "zip")
{
...
}
else
{
echo "el formato de archivo no es valido, solo .zip";
}


Ahora, continuaremos con el upload, suponiendo que el archivo era el correcto.

Lo siguiente a hacer es comprobar el tamaño del archivo; para ello utilizaremos la variable antes mencionada $archivo_size. Si el tamaño es menor a los 30kb (recuerde, debe especificarlo en bytes, por lo que serian 30000) continuaremos con el upload, de lo contrario mostraremos un mensaje de error:

if($archivo_size < 30000)
{
...
}
else
{
echo "el archivo supera los 30kb";
}


Ahora, continuaremos con el upload, suponiendo que el tamaño del archivo es correcto.
Utilizaremos la función copy() de php, la cual copiara el archivo a la carpeta que especifiquemos.

Nota: El archivo que hemos subido por medio del formulario se guarda en la carpeta temporal del servidor y se accede a él por medio de la variable $archivo, este archivo será borrado de la carpeta temporal cuando el script finalize su ejecución, este proceso es automatico y lo realiza el servidor, usted no tiene que preocuparse por este aspecto.


En este caso copiaremos el archivo a una carpeta del servidor llamada archivos. Notese que la ruta de copiado debe de ser relativa, no absoluta, y es relativa al script.
Osea, si el script se ejecuta en:
http://www.servidor.net/cuenta/carpeta/subir.php

La funcion en este caso intentara copiarlo a:
http://www.servidor.net/cuenta/carpeta/archivos/

Lo hemos puesto en un if y con signo de negación(!), para que en caso de no poder copiar el archivo nos salga mensaje de error:

if(!copy($archivo, "archivos/".$archivo_name))
{
echo "error al copiar el archivo";
}
else
{
echo "archivo subido con exito";
}


En este caso el archivo ha sido copiado a la carpeta archivos y con el mismo nombre que tenía, osea, si el archivo se llamaba "ficheros.zip", el archivo ha quedado en la carpeta con el mismo nombre "archivos/ficheros.zip".

Notese que esto no es obligatorio, y podemos ponerle el nombre que queramos, si hubieramos querido que el archivo se llamara "jlmm.zip", simplemente pondriamos en el copy() lo siguiente:
copy($archivo, "archivos/jlmm.zip")

MANEJO DE FICHEROS

PHP ofrece una extensa gama de funciones para acceso a ficheros:
fopen(): se utiliza para abrir ficheros.
fclose():para cerrar ficheros.
La primera además cuenta con una serie de argumentos:
modo Descripción
'r' Apertura para sólo lectura; ubica el apuntador de archivo al comienzo del mismo.
'r+' Apertura para lectura y escritura; ubica el apuntador de archivo al comienzo del mismo.
'w' Apertura para sólo escritura; ubica el apuntador de archivo al comienzo de éste y lo trunca a una longitud de cero. Si el archivo no existe, intenta crearlo.
'w+' Apertura para lectura y escritura; ubica el apuntador de archivo al comienzo de éste y lo trunca a una longitud cero. Si el archivo no existe, intenta crearlo.
'a' Apertura para sólo escritura; ubica el apuntador de archivo al final del mismo. Si el archivo no existe, intenta crearlo.
'a+' Apertura para lectura y escritura; ubica el apuntador de archivo al final del mismo. Si el archivo no existe, intenta crearlo.
'x' Creación y apertura para sólo escritura; ubica el apuntador de archivo al comienzo de éste. Si el archivo ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el archivo no existe, intenta crearlo. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT en la llamada de sistema open(2) interna.
'x+' Creación y apertura para lectura y escritura; ubica el apuntador de archivo al comienzo de éste. Si el archivo ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el archivo no existe, intenta crearlo. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT en la llamada de sistema open(2) interna.

Ejemplo:
<?php
$gestor 
fopen("/home/rasmus/archivo.txt""r");$gestor fopen("/home/rasmus/archivo.gif""wb");$gestor fopen("http://www.example.com/""r");$gestor fopen("ftp://usuario:contrasenya@example.com/un_archivo.txt""w");?>


Para crear un nuevo directorio usaremos la función mkdir():

<?
$nuevodir="x";
mkdir($nuevodir);
?>
   

martes, 30 de agosto de 2011

MySQL Primeros pasos

MySQL no es una base de datos (BD), es un GESTOR DE BASES DE DATOS. Como tal nos permite crear bases de datos, insertar tablas, modificar, eliminar datos, definir usuarios y asignar permisos, realizar copias de seguridad, etc. Está escrita en PHP y se ejecuta desde el navegador, si está inserta en la carpeta phpmyadmin, desde la barra de direcciones escribimos : http://localhost/phpmyadmin/, le aparecerá una imágen como esta:
A partir de aquí si todo ha salido bien, el siguiente paso será crear una BD. Lo podemos hacer directamente desde la página anterior, o con PHP.

CREANDO UNA BD DESDE MySQL
Desde la interfaz del gestor aparece una caja de texto con una etiqueta CREAR BASE DE DATOS. Si observa en el menú de la izquierda ya aparecen unas BD de plantilla creadas, pero por ahora nos centraremos en crear la nuestra propia. Insertamos el nombre que queramos y seleccionamos el cotejamiento utf8_unicode_ci ; en Cotejamiento de las conexiones MySQL también ponemos utf8_unicode_ci y finalmente pinchamos en crear. Nos tiene que devolver una frase del tipo: La base de datos bd se creó.
En el recuadro de la izquierda, nos tiene que aparecer el nombre de nuestra BD recién creada.
Evidentemente, en esa base no hay nada, así que el siguiente paso será crear las tablas que precisemos con sus campos correspondientes. Supongamos que desamos crear una tabla para clientes.


Volvemos a nuestro phpMyAdmin, y buscamos la pestaña SQL, pinchamos en ella y en el recuadro en blanco escribimos lo siguiente:

CREATE TABLE clientes (
codigo int(11) NOT NULL auto_increment,
nombre_titular varchar(40) default NULL,
numero_pers int(4) default 1,
localidad varchar(60) default NULL,
fecha_llegada varchar(60) default NULL,
fecha_salida varchar(60) default NULL,
recorrido int(11) default NULL,
forma_pago int(11) default NULL,
telefono int(11) default NULL,
mail varchar(50) default NULL,
PRIMARY KEY (`codigo`)
)
Si todo se ha hecho de forma correcta, nos debe aparecer un mensaje "Su consulta se ejecutó con éxito ( La consulta tardó 0.0389 seg )".



MySQL

Hablar de PHP es hablar de APACHE pero también hablar de MySQL, uno de los gestores de base de datos más populares por su potencialidad, funcionalidad y facilidad de uso, que existen.
A lo largo de los siguientes posts iré explicando las diferentes formas de instalar este gestor de bases de datos.  Ahora doy por sentado que están utilizando XAMPP o algún otro IDE parecido, que integra PHP y MySQL. Por lo tanto activar el gestor de BD es facilísimo, tan sólo (en el caso de XAMPP) desde el panel de control es activar en Star y ya está.
Si desea instalar MySQL en Windows de forma independiente aquí tiene un tutorial que explica paso a paso como debe hacerlo.
Instalación de MySQL 5.1 en Windows
MySQL es un motor de base de datos Open Source. Es usado en una gran cantidad de aplicaciones, cuenta con excelente documentación oficial y no oficial y es una de las grandes opciones a elegir como base de datos personal.
Esta es una breve guía para la descarga e instalación de la versión MySQL Community Server 5.1 proporcionada por SUN Microsystems Oracle en el sitio Web del producto.
Siga las indicaciones especificadas a continuación:
1. Ingrese al sitio Web de descargas de MySQL en la dirección http://dev.mysql.com/downloads/ y seleccione el enlace “MySQL Community Server”:

2.Deslícese hasta que encuentre el enlace de la versión para Windows.

3.Seleccione la opción “Download” de “Windows Essentials”:

4. Guarde el archivo en su computador como se lo indique su navegador (Google Chrome en este caso):

5. Ejecute el archivo descargado (mysql-essential-5.1.32-win32.msi) para comenzar con la instalación:

6. Aparece la pantalla de inicio del instaladar. Seleccione “Next” para continuar:

7. Seleccione el tipo de instalación “Complete” y presione “Next”:

8. Presione el botón “Install” para comenzar con la copia de archivos:

9. Así comienza el proceso de instalación:

10. A continuación aparecen 2 pantallas de MySQL Enterprise, presione “Next” en cada una para continuar:


11. En la siguiente pantalla seleccione la opción “Configure The MySQL Server Now” y presione “Next”:

12. La siguiente pantalla es la de configuración de la instancia del MySQL Server. Presione “Next” para comenzar:

13. Seleccione la opción “Standard Configuration” para su instalación y presione “Next”:

14. Seleccione las opciones “Install As Windows Service“ e “Include Bin Directory in Windows Path”. No siempre se desea que el motor arranque automáticamente cuando inicie el sitema operativo, para eso deseleccione la opción “Launch the MySQL Server Automatically”, si lo hace, siempre deberá iniciar el servidor manualmente. No hay problema si se deja seleccionada la opción. Presione “Next” para continuar.
15. Ingrese la contraseña para el usuario root (el administrador del motor). Si previamente tuvo instalado MySQL aparece un campo para ingresar la clave actual.
  • Si desea administrar el motor de forma remota, seleccione la opción “Enable root access from remote machines”.
  • Si desea una cuenta anónima (sin usuario ni clave) seleccione la opción “Create an Anonymous Account”.
Presione “Next” para continuar.
16. Presione “Execute” para realizar la configuración:

17. Si previamente tuvo instalado MySQL es probable que tenga problemas al iniciar el servicio, la mejor solución es usar la instalación previa para eliminar la instancia y desinstalar el producto completamente. Sin embargo esto no siempre se puede hacer ya sea porque se desinstaló sin eliminar la instancia o porque el producto falló. En estos casos, se puede solucionar de la siguiente forma:
  • Borrar la carpeta C:\Documents and Settings\<usuario_actual>\Datos de programa\MySQL.
  • Borrar la carpeta C:\Archivos de programa\MySQL.
Tenga cuidado, esto eliminará bases de datos anteriores. Hágalo sólo si está seguro que no se están usando.
18. Al finalizar el proceso de configuración la pantalla deberá indicar que los pasos se ejecutaron correctamente. Presione “Finish” para finalizar el proceso.
19. Si la instalación fue exitosa, aparecerá en el menú inicio una opción como la que se muestra en la imagen:
20. Para comenzar a utilizar MySQL seleccione la opción del menú inicio MySQL → MySQL Server 5.1 → MySQL Command Client. Ingrese la contraseña que utilizo en el paso 15 de la instalación.
21. Puede probar ejecutando algunos comandos básicos como “show databases”, “connect”, “show tables”:
22. Si todo le resultó como se indica en esta guía, quiere decir que el proceso de instalación fue exitoso.