Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: DarK_FirefoX en 29 Mayo 2008, 07:40 am



Título: Sistema para subir imagenes a un Servidor usando PHP
Publicado por: DarK_FirefoX en 29 Mayo 2008, 07:40 am
Primero, voy a suponer que saben diseñar, entonces más o menos podrian tener su página conformada. Yo les voy a explicar la siguiente estructura

upload.html[tiene el formulario para especificar el fichero a subir]
upload.php [contiene el script para subir la imagen, luego de procesada la imagen, va a mostrar una vista en miniatura de la imagen, y los vinculos: directo y foro]
imagenes.php [sirve para ver las imagenes subidas al servidor, utiliza el fichero maxFileBrowser.class.php]
maxFileBrowser.class.php [contiene el script que permite ver las imagenes subidas, muestra una vista en minatura de la imagen y los vinculos: directo y foro, este script no fue creado por mi, disculpenme no recuerdo de que página lo descarge]

upload.html
Código
  1. <form method="post" action="upload.php" enctype="multipart/form-data">
  2.                  <p>
  3.                    <input name="userfile[]" type="file" >
  4.                    <br>
  5.                    <br>
  6.  
  7.                    <input type="submit" value="Subir!!!" >
  8.                  </p>
  9.              </form>

Expliación: Este es el formulario que utiliza el metodo POST* para enviar la imagen al fichero upload.php para que este la suba al servidor.



upload.php
Código
  1. <?php
  2.   for($i=0;$i<sizeof($userfile);$i++)
  3.   {
  4.     if(!$userfile_size[$i])
  5.         continue;
  6.  
  7.     $UPLOAD = fopen( $userfile[$i], "r" );
  8.     $contents = fread( $UPLOAD,$userfile_size[$i]);      
  9.     fclose( $UPLOAD );  
  10.     $SAVEFILE = fopen("upload//".$userfile_name[$i], "wb" );
  11.     fwrite( $SAVEFILE, $contents,$userfile_size[$i] );
  12. echo "UploadImage ha recibido la Imágen <b>$userfile_name[$i]</b>";  
  13. echo "<br>";
  14. echo "<table width='200' border='1'>
  15.  <tr>
  16.    <td colspan='2'>Vinculos</td>
  17.  </tr>
  18.  <tr>
  19.    <td><b>Directo:</b></td>
  20.    <td><a target='_blank' href='http://192.168.1.2/imageupload/upload/$userfile_name[$i]'>http://192.168.1.2/imageupload/upload/$userfile_name[$i]</a></td>
  21.  </tr>
  22.  <tr>
  23.    <td><b>Foro:</b></td>
  24.    <td><font color='#FF0000'>[img]http://192.168.1.2/imageupload/upload/$userfile_name[$i][/img]</font></td>
  25.  </tr>
  26. </table>";  
  27.     fclose( $SAVEFILE );      
  28.  }    
  29.  
  30.  
  31. ?>

Expliación: Este Script sube el fichero al servidor a una carpeta llamada upload, que vamos a crear nosotros dentro de la carpeta de nuestro sitio. Luego te muestra los vinculos directo y foro para referirnos a nuestra imagen.



imagenes.php
Código
  1. <?php
  2.    require_once("maxFileBrowser.class.php");
  3.    $fileBrowser = new maxFileBrowser();
  4.    $fileBrowser->displayDir(getcwd());
  5. ?>

Expliación: Hace llamada a las funciones del fichero maxFileBrowser.class.php, para ejecutarlas en esta página. Este código lo insertamos donde queremos mostrar las imagenes. En si lo que hace es mostrar el contenido de una carpeta, en este caso la carpeta upload



maxFileBrowser.class.php
Código
  1. <?php
  2. class maxFileBrowser {
  3.   var $fileList;
  4.   var $dirList;  
  5.   var $dateFormat = 'd-m-Y H:i:s';
  6.  
  7. function displayDir($path='.'){
  8.   $path = 'upload//';    
  9.   $this->showDirSelector($path);
  10.   $dn=dirname($path);
  11.   $sp = strrpos($dn,DIRECTORY_SEPARATOR);
  12.   $up = substr($path, 0, $sp);  
  13.   if ($handle = @opendir($path))
  14.   {
  15.       echo "<table class='fileList'>";
  16.       echo "<tr><th width='25'></th><th>Nombre         </th>
  17. <th width='100'>Tama&ntilde;o</th>
  18. <th width='300'>Fecha que se subio</th>
  19.     </tr>";
  20.       echo "<tr><td></td><td colspan='4'></td></tr>";
  21.  
  22.       while (false !== ($file = readdir($handle)))
  23.       {
  24.           if ($file != "." && $file != "..")
  25.           {
  26.               $fName = $file;
  27.               $file = $path.DIRECTORY_SEPARATOR.$file;
  28.               if(is_file($file)) {
  29.                  $this->fileList[] = $file;
  30.               } elseif (is_dir($file)) {
  31.                   $this->dirList[] = $file;
  32.               }
  33.           }
  34.       }
  35.  
  36.       $i = 0;
  37.       if (sizeof($this->dirList) > 0){
  38.          sort($this->dirList);  
  39.          foreach ($this->dirList as $dir) {
  40.              $size = filesize($dir);
  41.              $perm = substr(sprintf('%o', fileperms($dir)), -4);
  42.              if (function_exists('mime_content_type'))
  43.                  $type = mime_content_type($dir);
  44.              else
  45.                  $type = filetype($dir);      
  46.              $date = date ($this->dateFormat, filemtime($dir));;
  47.              $name = basename($dir);
  48.              if ($i++%2) echo "<tr>";
  49.              else echo "<tr class='tr2'>";
  50.              echo "<td><img src='style/images/file.gif' alt='File' /></td><td class='fname'><img src='http://192.168.1.2/imageupload/upload/$name' width='100' height='100' alt='NO IMAGEN' /><a href='http://192.168.1.2/imageupload/upload/$name' target='_blank'>$name</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>".$size." Bytes</a></td><td>$date</td>
  51.  <tr colspan='4'><td colspan='4'><b>Foro: </b><br><font color='blue'>[img]http://192.168.1.2/imageupload/upload/".$name."[/img]<br><b></font>Directo: <font color='blue'><br></b>http://192.168.1.2/imageupload/upload/".$name."</font><br><br><a href='#top'><img src='go_up.gif'><br><br></td></tr></tr></tr";
  52.          }
  53.       }
  54.  
  55.       if (sizeof($this->fileList) > 0){
  56.          sort($this->fileList);  
  57.          foreach ($this->fileList as $file) {
  58.              $size = number_format(filesize($file), 0, ' ', ' ');
  59.              $perm = substr(sprintf('%o', fileperms($file)), -4);
  60.              if (function_exists('mime_content_type'))
  61.                  $type = mime_content_type($file);
  62.              else
  63.                  $type = filetype($file);      
  64.              $date = date ($this->dateFormat, filemtime($file));
  65.              $name = basename($file);
  66.  
  67.              if ($i++%2) echo "<tr>";
  68.              else echo "<tr class='tr2'>";
  69.              echo "<td><img src='style/images/file.gif' alt='File' /></td><td class='fname'><img src='http://192.168.1.2/imageupload/upload/$name' width='100' height='100' alt='NO IMAGEN' /><a href='http://192.168.1.2/imageupload/upload/$name' target='_blank'>$name</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>".$size." Bytes</a></td><td>$date</td>
  70.  <tr colspan='4'><td colspan='4'><b>Foro: </b><br><font color='blue'>[img]http://192.168.1.2/imageupload/upload/".$name."[/img]<br><b></font>Directo: <font color='blue'><br></b>http://192.168.1.2/imageupload/upload/".$name."</font><br><br><a href='#top'><img src='go_up.gif'><br><br></td></tr></tr></tr>";
  71.          }
  72.       }
  73.  
  74.       closedir($handle);
  75.       echo "</table>";
  76.   }
  77.  
  78. }
  79.  
  80. function showDirSelector($actpath='.'){
  81. ?>    
  82. <?php
  83. }
  84.  
  85. function getActualPath(){
  86.    if (isset($_POST['submitBtn'])){
  87.        $dir = isset($_POST['path']) ? trim($_POST['path']) : getcwd();
  88.    } else if (isset($_GET['path'])) {
  89.        $dir = isset($_GET['path']) ? trim($_GET['path']) : getcwd();
  90.    } else {
  91.        $dir = getcwd();
  92.    }
  93.  
  94.    if (!file_exists($dir)) $dir = getcwd();
  95.  
  96.    return $dir;
  97. }
  98. }
  99. ?>

Expliación: Comprueba los ficheros de una carpeta en este caso upload, y los va a mostrar en la página a la que se le hizo referencia a este Script, en este caso imagenes.php, las muestra como una lista con la vista en miniatura, el nombre, la fecha que se subio, el tamaño, y los vinculos directo y foro

TÉRMINOS
Metodos GET Y POST:
En HTML, se pueden especificar dos métodos de envíos de formularios. Los mismos son establecidos a través de la propiedad METHOD que es un atributo de los formularios HTML.

POST: Cuando se envía un formulario a un script PHP, las variables de dicho formulario pasan a estar automáticamente disponibles en el script gracias a PHP. Estas variables tienen el nombre del campo del formulario, o sea si el campo de entrada de texto se llama nombre, la variable sera $nombre.

GET: Usando un formulario GET es similar excepto en el uso de variables predefinidas, que en este caso serán del tipo GET. GET también se usa con QUERY_STRING (la información despues del símbolo '?' en una URL). Por ejemplo http://www.example.com/test.php?id=3 contiene datos GET que son accesibles con $_GET['id'].

NOTA:
http://192.168.1.2/imageupload/upload/:
En todos donde aprezca esta ruta...debe ser cambiada por la ruta de la carpeta donde estan tus páginas. O sea 192.168.1.2 seria tu IP, imageupload: la carpeta de las páginas, y upload: la carpeta para subir las imagenes.

Espero este tuto les ayude en algo....

Salu2s

DarK_FirefoX