Ver Mensaje Individual
  #11 (permalink)  
Antiguo 21/03/2012, 04:08
SeaPirates
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 10 meses
Puntos: 9
Upload de archivos con php

Intengo crear un upload de archivos pesados con php y ajax, pero creo que con la función copy() consume mucha memoria y me da out of memory (Aunque ya le he dado muchísima memoria)

Código PHP:
Ver original
  1. require_once ("includes/core.php");
  2.  
  3. $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);
  4.  
  5. if ($fn) {
  6.  
  7.  
  8.     $ftmp = explode(".", $_SERVER['HTTP_X_FILENAME']);
  9.     $extensiones = mysql_num_rows(mysql_query("SELECT id FROM formats WHERE format = '$ftmp[1]'"));
  10.     $fExt = strtolower($ftmp[count($ftmp) - 1]);
  11.  
  12.     if ($extensiones == "0") {
  13.         echo "error";
  14.     } else {
  15.         // AJAX call
  16.         $folder_1 = substr(sha1(uniqid(rand())),0,40);
  17.         $folder_2 = substr(sha1(uniqid(rand())),0,40);
  18.         $filename = substr(sha1(uniqid(rand())),0,40);
  19.         mkdir("files/" . $folder_1 . "", 0777, true);
  20.         mkdir("files/" . $folder_1 . "/" . $folder_2 . "", 0777, true);
  21.         chmod("files/" . $folder_1 . "", 0777);
  22.         chmod("files/" . $folder_1 . "/" . $folder_2 . "", 0777);
  23.  
  24.         file_put_contents("files/" . $folder_1 . "/" . $folder_2 . "/" . $fn,
  25.             file_get_contents('php://input'));
  26.         rename("files/" . $folder_1 . "/" . $folder_2 . "/" . $_SERVER['HTTP_X_FILENAME'],
  27.             "files/" . $folder_1 . "/" . $folder_2 . "/" . $filename . "." . $fExt . "");
  28.  
  29.         $refer = substr(sha1(uniqid(rand())),0,10);
  30.    
  31.         $download = substr(sha1(uniqid(rand())),0,40);
  32.         $direct = "files/" . $folder_1 . "/" . $folder_2 . "/" . $filename . "." . $fExt .
  33.             "";
  34.         if (isset($_SESSION['id'])) {
  35.             $type = "user";
  36.             $owner = $user['username'];
  37.         } else {
  38.             $type = "guest";
  39.             $owner = $_SERVER['REMOTE_ADDR'];
  40.         }
  41.         mysql_query("INSERT INTO downloads (refer_id,download_id,direct_download,filename,type,owner,lastdownload) VALUES('" .
  42.             $refer . "','" . $download . "','" . $direct . "','" . $_SERVER['HTTP_X_FILENAME'] .
  43.             "','$type','$owner','" . time() . "')");
  44.         $peso_archivo = filesize($direct);
  45.         if (!isset($_SESSION['upstyle'])) {
  46.             $class = "odd";
  47.             $_SESSION['upstyle'] = true;
  48.         } elseif ($_SESSION['upstyle']) {
  49.             $class = "even";
  50.             unset($_SESSION['upstyle']);
  51.         }
  52.  
  53.  
  54.         echo '<section class="file ' . $class . '"><section class="FileSep">' . $_SERVER['HTTP_X_FILENAME'] .
  55.             '</section> <section class="FileSep">' . file_size($peso_archivo) .
  56.             '</section> <section class="FileSep" style="width:500px;"><a class="link" href="https://' .
  57.             $_SERVER['SERVER_NAME'] . '/d' . $refer .
  58.             '" target="_blank" id="tooltip_left">https://' . $_SERVER['SERVER_NAME'] . '/d' .
  59.             $refer . '<section>Con este enlace podr&aacute;s descargar tu archivo o pasarlo a tus amigos cuando quieras</section></a></section> <section class="FileSep"><a id="tooltip_left" class="tag" href="#" id="tooltip_left">Eliminar<section>Para eliminar esta descarga haz click a este enlace</section></a> <a id="tooltip_left" class="tag" href="#" id="tooltip_left">Compartir<section>Proximamente</section></a></section></section>';
  60.  
  61.     }
  62. }

¿Puede que sea por el file_put_contents, y en ese caso tenga que cambiar de código y función? ¿O si lo cambio seguirá pasándome?

Ya me estoy estresando, llevo semanas intentando solucionando cambiando configuraciones del servidor y nada.

Última edición por SeaPirates; 21/03/2012 a las 04:36