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')
}
?>
0 comentarios:
Publicar un comentario en la entrada