PHP - subir file al servidor a una subcarpeta

   
Vista:

subir file al servidor a una subcarpeta

Publicado por julio (54 intervenciones) el 29/05/2010 20:47:42
¿Cómo defino la ruta relativa de la carpeta donde quiero poner el archivo subido con un campo file de html?.
Por una cuestion de ORGANIZACION , tengo oganizado en carpetas y subcarpetas el sitio. Entonces, el script que sube los archivos esté en una subcarpeta del sitio: wwww/fuentes/carga_de_txt
Y el script Index.php reside en la carpeta www/fuentes

Y para seguir un ordén me gustaria que los archivos que subo se guarden la subcarpeta de
carga_de_txt/txt_plano. O sea asi:

www/fuentes/carga_de_txt/txt_plano

He definido la ruta relativa como ../txt_plano
../ txt_plano/
/ txt_plano
../../txt_plano y otras posibilidades más, pero no me funcionaron.

Mi problema es que al archivo sólo lo guarda en la carpeta donde esta el script que carga el archivo www/fuentes/carga_de_txt.

¿Hay alguna forma de hacer que el archivo leído se guarde en la subcarpeta txt_plano?

<?
if ($Enviar=="")
{
?>
<form method="POST" action="<? echo $_SERVER['PHP_SELF']?>" enctype="multipart/form-data">

Leer TXT


<div style='margin-left:1em;'>
Por favor, click en Examinar para Buscar el archivo a recuperar

<input type="file" name="userfile" size="50" >
</div>

<div style='padding-left:14em;'>
<input type="submit" value="Enviar > >" name="Enviar">
</div>



<input type="hidden" name="MAX_FILE_SIZE" value="100000">
</form>
<?
}
else
{



//datos del arhivo
$nombre_archivo = $_FILES['userfile']['name'];
$tipo_archivo = $_FILES['userfile']['type'];

$tamano_archivo = $_FILES['userfile']['size'];
echo 'nombre '.$nombre_archivo .'<br>';
echo 'tipo '.$tipo_archivo .'<br>';

//compruebo si las características del archivo son las que deseo
if (!(strpos($tipo_archivo, "txt")) && ($tamano_archivo > 1000000))
{
echo "La extensión o el tamaño de los archivos no es correcta.

}
else
{
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $ruta_nombre_archivo))
{
$nombre_archivo_ruta="\\txt_plano\\".$_FILES['userfile']['name'];
$ruta_nombre_archivo="../txt_plano/" . $_FILES['puserfile'][name];
echo $ruta_nombre_archivo."<br>" ;


///copy($_FILES['archivo']['tmp_name'], $ruta_nombre_archivo);

echo "El archivo ha sido cargado correctamente";
}
else
{
echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";
}
}
}

El script en general esta funcionando bien, sólo que el archivo es guardado en la misma carpeta donde esta el script y en la medida de lo posible me gustaria que se guarde en una subcarpeta de la carpeta del script.

Desde ya muchas gracias por vuestra ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:subir file al servidor a una subcarpeta

Publicado por Leandro (42 intervenciones) el 31/05/2010 14:38:39
Antes de subir el archivo te fijas si existe el directorio donde lo quieres almacenar.
Si no existe lo creas.
Luego subes el archivo.

A modo de ejemplo:

$path = "FOLDER/"; // Nombre del directorio que quiero guardar.
if (!file_exists($path)){
mkdir($path, 0, true);
}

Directorios:

Si el php que ejecuta mkdir esta en el directorio A
entonces si hace mkdir("subcarpeta");

se crea la ruta: A/subcarpeta
es decir al directorio A le estas creando un subdirectorio.
porque estas en el directorio A.
Si quieres un directorio en el mismo nivel que A , es decir, crear un directorio
que no sea subdirectorio de A, para crear el directorio tienes que salir de A
un nivel. Para esto se usan los dos puntos, es decir , el path seria: ../subdir
Si quieres salir dos niveles harias: ../../subdirectorio.
Recuerdo que siempre estas en el directorio actual, si haces /subdirectorio
accedes al subdirectorio del dir actual.
Si haces ../ sales un directorio afuera, si haces ../../ sales dos directorios
y asi sucesivamente

Saludos
Leandro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:subir file al servidor a una subcarpeta

Publicado por julio (54 intervenciones) el 01/06/2010 03:49:35
Estimado Leandro

Muchisimas gracias por tu aporte. He probado tu sugerencia de crear un subdirectorio con el comando mkdir, funciona perfecto.

Pero en realidad mi problema es que al subir un archivo trato de enviarlo a una subcarpeta (de donde esta el script ), pero esa instrucción no me funciona.

He probando definiendo la ruta de distintas maneras, por ejemplo

$ruta="FOLDER/";
$ruta="/FOLDER/";
$ruta="../FOLDER/";

El archivo si se copia, pero en la misma carpeta del script.

Con ninguna ruta que defini pude ubicar el archivo en la carpeta que elijo como destino. En lo demás el script me funciona perfecto, como por ejemplo abrir y leer el contenido del archivo, etc.

Te resumo el codigo

echo $ruta."<br>";

nombre_archivo=$_FILES['userfile']['name'];
$ruta="FOLDER/";
move_uploaded_file($_FILES['userfile']['tmp_name'], $ruta.$nombre_archivo);

No se que me esta faltando. Desde ya muchisimas gracias por vuestra ayuda.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:subir file al servidor a una subcarpeta

Publicado por Leandro (42 intervenciones) el 01/06/2010 14:42:52
Asumiendo que el input tenga nombre igual a "userfile"
e.g <input name="userfile" type="file" />

Al hacer :

$nombre_temporal = $_FILES['userfile']['tmp_name'];
$nombre_archivo = $_FILES['userfile']['name'];
$ruta = "FOLDER/" .$nombre_archivo ;

if ( ! file_exists("FOLDER/")){
//Si no existe el subdirectorio a donde voy a subir el archivo lo creamos
mkdir("FOLDER", 0, true);
}
move_uploaded_file($nombre_temporal,$ruta)

Estas subiendo el archivo a la subcarpeta ( de nombre FOLDER) del directorio donde se encuentra el script php que esta corriendo.
Esto te deberia funcionar correctamente.

Saludos
Leandro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:subir file al servidor a una subcarpeta

Publicado por julio (54 intervenciones) el 02/06/2010 04:29:01
Estimado Leandro
Infinitamente gracias, copie, pegue y probé el codigo y me funciona de maravillas. Agradezco infinitamente tu ayuda. Muchisimas, Muchisimas Gracias.
Julio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar