Foros del Web » Programando para Internet » PHP »

Subir archivos grandes al un servidor

Estas en el tema de Subir archivos grandes al un servidor en el foro de PHP en Foros del Web. Hola, tengo el siguiente problema, no logro programar un gestor que me permita subir archivos grandes (más de 1MB) a un servidor a través de ...
  #1 (permalink)  
Antiguo 16/06/2007, 07:59
 
Fecha de Ingreso: mayo-2004
Mensajes: 95
Antigüedad: 20 años, 6 meses
Puntos: 0
Subir archivos grandes al un servidor

Hola, tengo el siguiente problema, no logro programar un gestor que me permita subir archivos grandes (más de 1MB) a un servidor a través de una interfaz web. Me bajé un código (free) de la red y lo implementé y me da errores que asumo son por cause de un timeout del servidor durante la subida de los archivos. Hablé con mi proveedor de hosting y me dicen que subieron el timeout, sin embargo sigue sin funcionar.

Les copio el código y el error que me devuelve. Saludos y espero por su ayuda:


Código del archivo que se encarga de efectuar el upload:
Código PHP:
<?
    
/*
    Silentum Uploader v1.2.0
    Modified March 4, 2007
    uploader.php copyright 2005-2007 "HyperSilence"
    */

    // Begin options

    
$allow_file_deletion true// To allow visitors to delete files, leave this at true; otherwise, change it to false

    
$file_extensions = array(".doc"".gif"".htm"".html"".jpg"".png"".txt"); // Add or delete the file extensions you want to allow

    
$file_extensions_list ".doc, .gif, .htm, .html, .jpg, .png, .txt, .mp3"// Type the same as above, without the quotes separating them

    
$max_length 30// The maximum character length for a file name

    
$maximum_file_size "51200000"// In bytes

    
$upload_log_file "upload_log.txt"// Change this to the log file you want to use

    // End options

    
$folder_directory "http://".$_SERVER["HTTP_HOST"].dirname($_SERVER["PHP_SELF"]);
    
$message "";
    
$set_chmod 0;
    
$site_uri "http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"];
    
$upload_directory "files/";
    
$upload_uri $folder_directory."/files/";

    if(
$allow_file_deletion == true$status "enabled";
    else 
$status "disabled";

    if(
$_REQUEST["delete"] && $allow_file_deletion) {
    
$resource fopen($upload_log_file,"a");
    
fwrite($resource,date("F d, Y / h:i:sa")." - ".$_REQUEST["delete"]." deleted by ".$_SERVER["REMOTE_ADDR"]."\n");
    
fclose($resource);

    if(
strpos($_REQUEST["delete"],"/.") > 0);
    elseif(
strpos($_REQUEST["delete"],$upload_directory) === false);
    elseif(
substr($_REQUEST["delete"],0,6) == $upload_directory) {
    
unlink($_REQUEST["delete"]);
    
$message "File has been deleted.";
    
header("Location: $site_uri?message=$message");
    }
    }

    elseif(
$_FILES["userfile"]) {
    
$resource fopen($upload_log_file,"a");
    
fwrite($resource,date("F d, Y / h:i:sa")." - ".$_FILES["userfile"]["name"]." "
    
.$_FILES["userfile"]["type"]." uploaded by ".$_SERVER["REMOTE_ADDR"]."\n");
    
fclose($resource);

    
$file_type $_FILES["userfile"]["type"]; 
    
$file_name $_FILES["userfile"]["name"];
    
$file_ext strtolower(substr($file_name,strrpos($file_name,".")));
    
chmod($upload_uri."".$file_name0755);
    if(
$_FILES["userfile"]["size"] > $maximum_file_size) {
    
$message "ERROR: File size cannot be over ".$maximum_file_size." bytes.";
    }

    elseif(
$file_name == ""$message "ERROR: Please select a file to upload.";
    elseif(
strlen($file_name $max_length)) $message "ERROR: The maximum length for a file name is ".$max_length." characters.";
    elseif(!
preg_match("/^[A-Z0-9_.\- ]+$/i",$file_name)) $message "ERROR: Your file name contains invalid characters.";
    elseif(!
in_array($file_ext$file_extensions))
    
$message "ERROR: <ins>$file_ext</ins> is not an allowed file extension.";
    else 
$message upload_file($upload_directory$upload_uri);
    
header("Location: $site_uri?message=$message");
    }

    elseif(!
$_FILES["userfile"]);
    else 
$message "ERROR: Invalid file specified.";

    
$open opendir($upload_directory);
    
$uploaded_files "";
    while(
$file readdir($open)) {
    if(!
is_dir($file) && !is_link($file)) {
    
$uploaded_files .= "        <tr>
                <td style=\"background: #fff; color: #000; text-align: left; width: 70%\"><a href=\"$upload_directory$file\" title=\"$file ("
.filesize($upload_directory."".$file)." bytes)\">".$file."</a> (".filesize($upload_directory."".$file)." bytes)</td>";
    if(
$allow_file_deletion)
    
$uploaded_files .= "
                <td style=\"background: #fff; color: #000; text-align: right; width: 30%\"><a href=\"?delete=$upload_directory"
.urlencode($file)."\" title=\"Delete File\">Delete File</a></td>";
    else
    
$uploaded_files .= "
                <td style=\"background: #fff; color: #000; text-align: right; width: 30%\"><del><strong>Delete File</strong></del></td>"
;
    
$uploaded_files .= "
            </tr>
            <tr>
                <td colspan=\"2\" style=\"background: #eee; color: #000; text-align: left; text-indent: 20px\">Uploaded <strong>"
.date("F d, Y / h:ia"filemtime($upload_directory.$file))."</strong></td>";
    
$uploaded_files .="
            </tr>
    "
;
    }
    }

    function 
upload_file($upload_directory$upload_uri) {
    
$file_name $_FILES["userfile"]["name"];
    
$file_name str_replace(" ","_",$file_name);
    
$file_path $upload_directory.$file_name;
    
$temporary $_FILES["userfile"]["tmp_name"];

    
$result move_uploaded_file($temporary$file_path);
    if(!
chmod($file_path,0777))
    
$message "ERROR: A folder to place the files was not found, or the files need to be CHMODed to 777.";
    else 
$message = ($result)?"File has been uploaded." "An error has occurred.";
    return 
$message;
    }
?>
Código de la interfaz:
Código PHP:
<?
    
include("uploader.php");
?>
        <p><strong><span style="background: #fff; color: #000"><? if($_REQUEST["message"] == "") echo "Upload a file below."; else echo $_REQUEST["message"]?></span></strong></p>
        <form action="upload.php" enctype="multipart/form-data" id="upload" method="post">
            <p><input id="userfile" name="userfile" size="45" type="file" /><input name="upload" type="submit" value="Upload File" /><br /></p>

            <p>Allowed file extensions: <strong><?=$file_extensions_list?></strong></p>

            <p>Maximum file size: <strong><?=$maximum_file_size?> bytes (~<?=round($maximum_file_size/1024)?>KB)</strong></p>

            <p>Deleting files is currently: <strong><?=$status?></strong></p>

            <p>Powered by: <a href="http://hypersilence.net" title="Silentum Uploader v1.2.0">Silentum Uploader v1.2.0</a></p>
        </form>

        <p><strong>Uploaded Files</strong></p>
        <table style="border: 2px dotted #000; width: 100%">
    <? if($uploaded_files == "") echo "        <tr>
                <td colspan=\"2\" style=\"background: #fff; color: #000; text-align: center\"><br /><strong>There are no uploaded files.</strong><br /><br /></td>
            </tr>
    "
; else echo $uploaded_files ?>
    </table>
Y ésta es la respuesta que me da la página:

Warning: chmod() [function.chmod]: No such file or directory in /home/ng000141/public_html/helder/uploader.php on line 57

Warning: Cannot modify header information - headers already sent by (output started at /home/ng000141/public_html/helder/uploader.php:57) in /home/ng000141/public_html/helder/uploader.php on line 68


Llevo MESES intentado conseguir alguna manera de subir archivos grandes al servidor, pero no la encuentro, es un proyecto que estoy haciendo y necesito de eso para poder avanzar, por favor que alguien me ayude.

Gracias.
  #2 (permalink)  
Antiguo 16/06/2007, 08:01
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 19 años, 2 meses
Puntos: 49
Re: Subir archivos grandes al un servidor

el chmod indica que la carpeta a la que quieres subir tus archivos no tiene permisos...
via ftp o panel de administracion cambiale los permisos a 777 para pruebas y nos comentas...

respecto a la subida el php.ini vine definido a 2mb pero siempre lo configuran para 10mb si quieres subir cosas mas grandes debes hablar con tu hosting...
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #3 (permalink)  
Antiguo 16/06/2007, 08:08
 
Fecha de Ingreso: mayo-2004
Mensajes: 95
Antigüedad: 20 años, 6 meses
Puntos: 0
Re: Subir archivos grandes al un servidor

Cita:
Iniciado por kaninox Ver Mensaje
el chmod indica que la carpeta a la que quieres subir tus archivos no tiene permisos...
via ftp o panel de administracion cambiale los permisos a 777 para pruebas y nos comentas...

respecto a la subida el php.ini vine definido a 2mb pero siempre lo configuran para 10mb si quieres subir cosas mas grandes debes hablar con tu hosting...
Wow! Imposible recibir una respuesta más rápida!!!! Gracias.

Kaninox, ya me había percatado de la permisología y ya le había cambiado la misma a la carpeta "/files" (que es donde deberán recidir mis archivos al subirse, según mi código). Sin embargo, sigue sin funcionar. Intentaré comunicarme con el proveedor pidiéndole que modifique el tamaño en el php.ini a ver si lo puede hacer, sin embargo, el error sigue siendo el mismo ahorita.

Asumo que da error, pues, según el código, la idea es que una vez que el script suba el archivo, se le cambie su permisología (a dicho archivo previamente subido), el problema es que como no lo sube, pues el script NO encuentra a quién cambiarle la permisología y por eso explota.

De cualquier manera muhas gracias por la extremadamente rápida respuesta e interés.
  #4 (permalink)  
Antiguo 16/06/2007, 08:24
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 19 años, 2 meses
Puntos: 49
Re: Subir archivos grandes al un servidor

de nada por cierto por que defines tu chmod en cero????
$set_chmod = 0;

no has prbado poniendo
$set_chmod = 777;
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #5 (permalink)  
Antiguo 16/06/2007, 08:29
 
Fecha de Ingreso: mayo-2004
Mensajes: 95
Antigüedad: 20 años, 6 meses
Puntos: 0
Re: Subir archivos grandes al un servidor

Cita:
Iniciado por kaninox Ver Mensaje
de nada por cierto por que defines tu chmod en cero????
$set_chmod = 0;

no has prbado poniendo
$set_chmod = 777;
Bueno, en primer lugar ya encontré el error, el problema estaba en el código, no había definido el tipo de archivo que estaba subiendo y el error lo daba era porque no le había puesto la extensión como válida del tipo de archivo que estaba intentado subir (era un MP3).

En cuanto a lo que me preguntas, pues, la verdad es un código que bajé de la red para reutilizarlo, no lo programé yo de cero, tal vez sí sea mejor definir la permisología com full (777) tal como indicas, probaré.

Muchas gracias por tu ayuda e interés.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:53.