domingo 19 de octubre de 2008

Cargar un modulo con un archivo zip

Bueno aqui les traigo como cargar un modulo automatico.
Lo primero que debemos saber hacer es como cargar un archivo.

Se necesita una base de datos con una tabla llamada "modulos"
la cual tiene tres columnas llamadas:

ID-NOMBRE-RUTA

Importante para ejecutar este ejemplo hay que tener conexion a una base de datos con las tablas correspondientes.(c.php)

cargar.php:
<?php

//Se crea el formulario html para cargar el archivo:

include('c.php');

echo'

<form action="pagina.php" method="post" enctype="multipart/form-data">

    <input type=file name="nom" size="15"> <br>

    <br>

    <input type=submit name="send" value="Enviar">

</form>';



//Luego pasamos a copiar  el archivo zip a una carpeta, para capturar mejor su informacion:



if(!copy($_FILES['nom']['tmp_name'], './modulos/'.$_FILES['nom']['name']))

    {

        echo 'Error';

//Si ocurre un error de que no se puedo copiar el archivo mandara error.

    }

    else

    {



//Si logra capiarlo sin problemas, utilizamos la funcion "pathinfo", que creara una matriz con los datos del archivo.

//Estos datos son:

//['filename']= nombre del archivo sin extension

//['basename']= nombre del archivo con extension

//['extension']= extension del archivo

//['dirname'] = ruta del archivo



$file = pathinfo('./modulos/$_FILES['nom']['name']');



//Ya que capturo el archivo con la la funcion "pathinfo" paso a ver se la extension del archivo es zip.



if($file['extension'] == 'zip')

{



// Si la extesion del archivo es zip, procedo a usar la funcion "str_replace" para ver el nombre que tiene el zip

// contiene espacios, si contiene espacio, debo de cambiarlos por "_"

//Ej: "prueba 1.zip" deberia de ser "prueba_1.zip"



$nombredir=str_replace(" ", "_", $file['filename']);



/*

Ahora debo crear una carpeta para poder descomprimir los archivos del zip en esa carpeta.

Pero antes debo saber si existe ya una carpeta con ese mismo nombre.

*/

if(!is_dir('./modulos/'.$nombredir'))

{



//Si no existe



mkdir('./modulos/'.$nombredir);



//Ya que tengo la carpeta creada, procedo a descomprimir el zip en esa carpeta.



$archive = new PclZip('./modulos/'.$file['basename']);

if ($archive->extract(PCLZIP_OPT_PATH, './modulos/'.$nombredir.'/',

    PCLZIP_OPT_REMOVE_PATH, 'temp_install') == 0)

    {

    die("Error : ".$archive->errorInfo(true));

    }



//Ya que tengo el archivo descomprimido. debo verificar si existe un archivo llamado 'index.php'.



if(file_exits("./modulos/$nombredir/index.php"))

{

//Si el archivo existe, es que todo esta bien, procedo a insertar la ruta en la base de datos



$q="Insert into modulos values(NULL,'$nombredir','./modulos/$nombredir/index.php'))";



$query=mysql_query($q) or die('No se pudo insertar datos en la BD');



Echo"Se agrego el modulo";

}

else

{

    echo"No existe un archivo 'index.php', se borraran todas las carpetas creadas";



//Utilizo la funcion "unlink" para borrar archivos y "rmdir" para borrar directorios.

    

    unlink("./modulos/$file[basename]");

    rmdir("./modulos/$nombredir");

}

}

else

{

    echo"Ya existe un modulo con este nombre, intente cambiandole en nombre";

    unlink("./modulos/$file[basename]");

    }



}

else

{

    echo"El archivo no es un zip :S";

}

?>



Ahora tenemos que crear el archivo donde se presentaran los modulos que tenemos en la BD.

vermodulos.php

<?php

include('c.php');

//Hago un query a la base de datos para que traiga todo lo hay alla.



$q="Select * from modulos";

$query=mysql_query($q) or die('Error en el query');



if(mysql_num_rows($query) != 0)

{

    while($result = mysql_fecth_assoc($query)

    {

        echo "<a href=principal.php?id=".$r['nombre'].">Modulo de ".$r['nombre']." <br />";

    }

}

else

{

    echo'No se han encontrado modulos';

}

?>


Con esto se nos muestran los modulos que tenemos en la BD
Ahora tenemos que llamar el modulos que queramos.
principal.php?id=".$r['nombre']."= a un gestor para manejar todos los modulos encontrados en la base de datos. id sera capturado en modulo.php el cual indentificara el modulo.

modulo.php

<?php

include('c.php');

$get=$_GET['id'];



//Verifico si existe el GET de id

if($_GET['id'])

{



//Hago un query que me busque el los campo donde nombre sea igual al GET de id.

//El campo nombre de la tabla modulos tiene que ser unique para que no haya duplicacion de datos.

$q="Select * from modulos where NOMBRE = $get";

$query=mysql_query($q) or die ('Error en el query');



if(mysql_num_rows($q) == 1)

{

    while($r = mysql_fetch_assoc($query))

//Inclullo la ruta del modulo

    include($r['ruta'];

}

}

else

{

//Si no existe GET que me mande a "vermodulos.php", para seleccionar uno.

header('location:vermodulos.php')

}

?>
Related Posts Plugin for WordPress, Blogger...