Foros del Web » Programando para Internet » PHP »

Subir archivos a la web

Estas en el tema de Subir archivos a la web en el foro de PHP en Foros del Web. Hola! estoy intentando subir unos fichero al servidor. Uso un formulario para ello, y despues hago el proceso, como hacen en el manual y todos ...
  #1 (permalink)  
Antiguo 14/02/2007, 14:21
Avatar de irenuska**  
Fecha de Ingreso: noviembre-2006
Ubicación: A veces aquí y otras veces allí
Mensajes: 43
Antigüedad: 17 años, 5 meses
Puntos: 0
Subir archivos a la web

Hola!

estoy intentando subir unos fichero al servidor. Uso un formulario para ello, y despues hago el proceso, como hacen en el manual y todos los ejemplos que he visto por ahí.

tengo algunas preguntas:

El directorio al que se sube es el que viene indicado en el php.ini, en el apartado de uploads, no?

Puede ser que no me funcione, xq lo esté probando en local?? Yo tengo instalado en el PC (windows) un HTTP + PHP + MySQL., y así había hecho todas las pruebas. He mirado el directorio que tengo puesto en el php.ini, que es dentro de la carpeta del servidor PHP, una que se llama uploads, y es de 'solo lectura', xo por más que intento cambiarlo, no me deja.... ¿Os ha pasado esto a alguien?, o es que no debo poner esta carpeta??

Gracias por cualquier tipo de ayuda!
  #2 (permalink)  
Antiguo 14/02/2007, 14:38
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Re: Subir archivos a la web

Si le echas un ojo a la función move_uploaded_file(), podras ver que en el segundo parametro, tu le puedes establecer la ruta destino.

Creo que en el php.ini, la ruta que aparece ahi, los archivos se almancenan temporalmente

Saludillos.
  #3 (permalink)  
Antiguo 14/02/2007, 14:59
Avatar de irenuska**  
Fecha de Ingreso: noviembre-2006
Ubicación: A veces aquí y otras veces allí
Mensajes: 43
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Subir archivos a la web

Hola,

a eso me refería.. si eran temporalmente, y de ahí se cogen para guardarlos en el de destino...

Lo que pasa, que en el directorio que le pongo de destino, no me aparece ningún fichero, y quería probar a guardarlo directamente en el temporal, xo con el nombre del fichero. Pero... si es el directorio que vienen en el php.ini, tampoco me aparece nada.......

¿Qué puede estár pasando??
  #4 (permalink)  
Antiguo 14/02/2007, 15:04
Avatar de irenuska**  
Fecha de Ingreso: noviembre-2006
Ubicación: A veces aquí y otras veces allí
Mensajes: 43
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Subir archivos a la web

El código que tengo es:

Código:
<?php
/* Prueba para subir archivos a una carpeta del servidor*/

if (isset($_POST['Enviar']))
{
	//tomo el valor de un elemento de tipo texto del formulario
	$cadenatexto = $_POST["cadenatexto"];
	echo "Escribió en el campo de texto: " . $cadenatexto . "<br><br>";

	//datos del arhivo
	$nombre_archivo = $HTTP_POST_FILES['userfile']['name'];

    if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $nombre_archivo)){
       echo "El archivo ha sido cargado correctamente.";
    }else{
       echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";
    }
}
?>

<html>
<head>
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form action="subirArchivo2.php" method="post" enctype="multipart/form-data">
    <b>Campo de tipo texto:</b>
    <br>
    <input type="text" name="cadenatexto" size="20" maxlength="100">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    <br>
    <br>
    <b>Enviar un nuevo archivo: </b>
    <br>
    <input name="userfile" type="file">
    <br>
    <input type="submit" value="Enviar" name="Enviar">
</form>
</body>
</html>
El formulario llama a este mismo archivo... ¿Tiene algún fallo, o algo que se me escapa a mi???

y en php.ini:

Código:
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = "C:\SERVIDOR\PHP\uploads"

; Maximum allowed size for uploaded files.
upload_max_filesize = 5M
¿Necesito configurar algo más?
  #5 (permalink)  
Antiguo 14/02/2007, 15:37
Avatar de dopon  
Fecha de Ingreso: julio-2005
Ubicación: Cucuta / Colombia
Mensajes: 493
Antigüedad: 18 años, 9 meses
Puntos: 1
Re: Subir archivos a la web

podrias intentar usando la variable predefinida
$_FILES en lugar de
$HTTP_POST_FILES
  #6 (permalink)  
Antiguo 14/02/2007, 15:43
Avatar de lusam  
Fecha de Ingreso: enero-2007
Ubicación: Panamá
Mensajes: 56
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Subir archivos a la web

Saludos,

Debes crear un directorio a donde quieres subir el archivo y listo, aquí t va el script corregido.

Luz

Código PHP:
<?php
/* Prueba para subir archivos a una carpeta del servidor*/

if (isset($_POST['Enviar']))
{
    
//tomo el valor de un elemento de tipo texto del formulario
    
$cadenatexto $_POST["cadenatexto"];
    echo 
"Escribió en el campo de texto: " $cadenatexto "<br><br>";

    
//datos del arhivo
    
$nombre_archivo $HTTP_POST_FILES['userfile']['name'];
    
$directorio 'xxx/'// pon al xxx el nombre de tu carpeta a donde lo vas a mover
     
if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'],$directorio "/" $nombre_archivo)) 
    {
       echo 
"El archivo ha sido cargado correctamente.";
    }else{
       echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.";
    }
}
?>

<html>
<head>
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form action="subirArchivo2.php" method="post" enctype="multipart/form-data">
    <b>Campo de tipo texto:</b>
    <br>
    <input type="text" name="cadenatexto" size="20" maxlength="100">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    <br>
    <br>
    <b>Enviar un nuevo archivo: </b>
    <br>
    <input name="userfile" type="file">
    <br>
    <input type="submit" value="Enviar" name="Enviar">
</form>
</body>
</html>
  #7 (permalink)  
Antiguo 14/02/2007, 16:11
Avatar de irenuska**  
Fecha de Ingreso: noviembre-2006
Ubicación: A veces aquí y otras veces allí
Mensajes: 43
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Subir archivos a la web

Gracias Luz, ya lo he solucionado

pero no sé supone que tal y como lo tenía se debía guardar en el directorio temporal??
  #8 (permalink)  
Antiguo 15/02/2007, 10:56
Avatar de irenuska**  
Fecha de Ingreso: noviembre-2006
Ubicación: A veces aquí y otras veces allí
Mensajes: 43
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Subir archivos a la web

Hola de nuevo, parece que con esto no avanzo.

Haciéndolo con la corrección de LUz, me funciona a la perfección. El fichero se me guarda en el directorio que le pongo.

Peroooo, ahora tengo otro problema. El caso, es que me gustaría sustituir todo ese código, por una llamada a una función. Y dentro de esta función he metido este código que ya me funcionaba. Lo que pasa es que ahora no me sube el fichero.

El código que tengo es:

Script con el formulario y que llama a la función:

Cita:
<?php
/* Prueba para subir archivos a una carpeta del servidor*/

//se incluye el fichero de la libreria donde están las funciones que se utilizan
require ('libreria/varios/var_funciones_archivos.php');

if (isset($_POST['Enviar']))
{
//tomo el valor de un elemento de tipo texto del formulario
$cadenatexto = $_POST["cadenatexto"];
echo "Escribió en el campo de texto: " . $cadenatexto . "<br><br>";

$path = './home/ficheros/';
var_guardar_archivo_en_diretorio($path);
}
?>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
</head>

<body>
<form action="" method="post" enctype="multipart/form-data">
<b>Campo de tipo texto:</b>
<br>
<input type="text" name="cadenatexto" size="20" maxlength="100">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<br>
<br>
<b>Enviar un nuevo archivo: </b>
<br>
<input name="userfile" type="file">
<br>
<input type="submit" value="Enviar" name="Enviar">
</form>
</body>
</html>
y la función tiene el siguiente código:

Código PHP:
function var_guardar_archivo_en_diretorio($path)
{
    
//datos del arhivo
    
$nombre_archivo $_FILES['userfile']['name'];
    echo 
'Nombre archivo: '.$nombre_archivo;
    
$tipo_archivo $_FILES['userfile']['type'];
    
$tamano_archivo $_FILES['userfile']['size'];
    
//path
    //$path = './home/ficheros/';
    //Se comprueba si las características del archivo son las que se desean
    //El archivo que se sube no puede tener estas extensiones
    
$extensiones '.php|.html|.exe|.bmp';
    if (
ereg($extensiones,$nombre))
    {
        echo 
"<p>El formato de archivo no es valido, no se permiten archivos en formato html, bmp , php y exe.</p>";
        exit;    
    }
    else
    {    
        
//Se cambia el nombre del archivo
        
$partes pathinfo($nombre_archivo);
        echo 
$partes['dirname'] . "\n"//.
        
echo $partes['basename'] . "\n"//nombre + extension
        
echo $partes['extension']; //extension
        
$partes['name'] = basename($nombre_archivo'.'.$partes['extension']); //solo nombre
        
echo $partes['name']; //solo nombre

        
$nombre_archivo $partes['name'].date("dmyHis").'.'.$partes['extension'];
    
        if (
move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $path.$nombre_archivo))
        {
           echo 
"El archivo ha sido cargado correctamente.";
           echo 
'Nombre archivo: '.$nombre_archivo;
        }
        else
        {
           echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.";
        }
    }

El problema es que los ficheros no se guardan. El move_uploaded_file parece que falla....

Como la función la incluyo con require, ¿el path tiene que ser relativo al script desde el que le llamo verdad???? ¿Alguien ve algo raro????? Ayuda, please!!
  #9 (permalink)  
Antiguo 15/02/2007, 11:35
Avatar de irenuska**  
Fecha de Ingreso: noviembre-2006
Ubicación: A veces aquí y otras veces allí
Mensajes: 43
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Subir archivos a la web

Ya lo he solucionado. El problema estaba en que en el move_upload_file accedia con el nombre de variables superglobales... vaya despiste!
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 04:52.