Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/11/2014, 12:07
kiles86
 
Fecha de Ingreso: noviembre-2014
Ubicación: Alicante
Mensajes: 2
Antigüedad: 9 años, 5 meses
Puntos: 0
"Paginas no responden" al subir archivos con PHP y Javascript

Muy buenas.
Tengo un problema con un código de mi página.
Al subir archivos de gran tamaño, me muestra el mensaje de "Las páginas no responden".
He intentado poner un GIF para que lo muestre mientras se ejecuta el script pero se queda congelado.
Adelanto que soy un poco inútil para esto (por eso recurro a ustedes)

El código consta de dos partes:
Primera, formulario html y Javascript:

Código HTML:
<html>
<head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <script src="../_lib/lib/js/uniqid.js"></script> 
        <script>
			$(document).on("click", "#fichero", function(event) {				
				EsperaOn();
			});
    
			$(document).on("change", "#fichero", function(event) {
			
                ficheros = event.target.files;
                fichero = ficheros[0];

                    var total_archivo = fichero.size;
                    var start = 0;
                    var totalPaquete = 8000000; // 8 MB
                    var end = totalPaquete;
				
                    idunico = uniqid();
                                        
                    i = 0;
                    while (start < total_archivo)
                    {
                        i++;
                        corte = fichero.slice(start, end);
                        
                        nombreCorte = idunico+"_"+i;
                        subirFichero(corte,nombreCorte,fichero.name);
                        start = end;
                        end = start + totalPaquete;
					}
					EsperaOff();
            });
			
			function EsperaOn() { $("#Espera").css('visibility','visible'); }
			function EsperaOff() { $("#Espera").css('visibility','hidden'); }
                        function subirFichero(trozo,nombreTrozo,nombreFicheroOriginal)
                        {
				EsperaOn();
                xhr = new XMLHttpRequest();
                formulario = new FormData();
				formulario.append("trozo", trozo); 
                formulario.append("nombretrozo",nombreTrozo); 
                formulario.append("nombreficherooriginal",nombreFicheroOriginal); 
				
                xhr.open("POST", "../bk_subir_archivo_receptor/index.php", false);    
                xhr.send(formulario);
            }
        </script>
    </head>
    <body>
		<div>
			<form action="../bk_subir_archivo_insertabla/index.php">
				<strong style="font-size: 20px;">Asunto: </strong><br><input type="text" id="asunto" name="asunto" /><br><br>
				<strong style="font-size: 20px;">Notas: </strong><br><textarea cols="50" rows="7" id="notas" name="notas" style="font-size:14px; font-type:arial"></textarea><br><br><br>
				<input type="file" id="fichero" onclick="enviar()" /><br><br><br>
				<div style="margin-left: 30%">
					<input type="submit" value="Ok" />
				</div>
			</form>			
			<div id="Espera" style="visibility: hidden; position: absolute; top: 25%; left: 50%; width=300px; height=150px; margin-top:-75px; margin-left:-150px;">    
				<img src="../_lib/img/cargando.gif">
			</div>
		</div>
    </body>
</html> 
El segundo todo PHP.
Al ejecutarse este código se queda congelada la pantalla hasta que termina:

Código PHP:
$_SESSION['nombreFicheroOriginal']            =$_POST['nombreficherooriginal'];
$nombretrozo                             ltrim($_POST["nombretrozo"]);
$nombreTemporal                         $_FILES["trozo"]["tmp_name"];

move_uploaded_file($nombreTemporal,$_SESSION['scriptcase']['login']['glo_nm_path_doc']."/".$nombretrozo);
reajunta($_SESSION['guerola_id']."_".$_SESSION['nombreFicheroOriginal'], $nombretrozo);

function 
reajunta($nombreDefinitivo,$nombretrozo) {
   
    list(
$idunico,$numeroTrozo) = explode("_",$nombretrozo); //el nombre del trozo está compuesto por el ID el NúmeroDeTrozo
    
            
$archivoFinal fopen($_SESSION['scriptcase']['login']['glo_nm_path_doc']."/".$nombreDefinitivo"ab");
                               
            
$trozo fopen($_SESSION['scriptcase']['login']['glo_nm_path_doc']."/".$idunico."_" $numeroTrozo"rb");  //abro el trozo

                
while ($buff fread($trozo10000000)) {
                    
fwrite($archivoFinal$buff);
                }
               
            
unlink($nombretrozo); //borro el trozo porque ya está agregado y no me servirá
            
fclose($archivoFinal);
        } 

De verdad seria de gran ayuda que me dijeran si estoy haciendo algo mal (o muy mal) o si tiene una solución viable.

Muchas gracias anticipadamente!!!

Saludos

Andrés