2011-04-28 13 views
5

Realmente quiero saber cómo voy a obtener la ruta de archivo completa cuando cargo un archivo en PHP?¿Cómo obtener un archivo completo al cargar archivos en PHP?

Aquí es mi mi problema ...

Estoy importando un archivo CSV en PHP. Cargar un archivo no es un problema, pero la función utilizada para importar archivos csv que es fgetcsv() requiere fopen. fopen es el que me causa dolor de cabeza porque requiere un archivo de ruta exacto, lo que significa que el archivo debe estar en el mismo directorio con el archivo php. ¿Qué pasa si el usuario obtiene un archivo de un directorio diferente?

Aquí está mi códigos:

index.php:

<form action="csv_to_database.php" method="POST" enctype="multipart/form-data"> 
<input type="file" name="csv_file" /> 
<input type="submit" name="upload" value="Upload" /> 
</form> 

csv_import.php:

<?php 
if ($_FILES['csv_file']['error'] > 0) { 
    echo "Error: " . $_FILES['csv_file']['error'] . "<br />"; 
}else{ 

    if (($handle = fopen($_FILES['csv_file']['name'], "r")) !== FALSE) { 

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 

    for ($c=0; $c < count($data) ; $c++) { 
    echo $data[$c] . " "; 
    } 
    echo "<br />"; 
    } 
    fclose($handle); 
    } 
} 
?> 

fopen aquí sólo se puede obtener el nombre del archivo que se hace pasar por la variable $_FILES['csv_file']['name']. Estaba intentando obtener cualquier función para obtener el archivo completo de $ _FILES en Internet, pero no puedo encontrar ninguno.

Soy muy nuevo en el desarrollo web así que pls sea paciente. Respuesta de Pls lo más simple posible ... Pls ayuda ...

+1

Si haces una print_r ($ _ FILES) verás que hay mucho más información que puedes usarPor ejemplo $ _FILES ['csv_file'] ['tmp_name'] que contiene la ruta completa (temporal) de su archivo cargado. 'fopen' puede hacer cosas con esto. Ver también http://www.php.net/manual/en/features.file-upload.post-method.php – vindia

+1

@vindia Creo que $ _FILES ['csv_file'] ['tmp_name'] muestra dónde almacenar temporalmente el archivo cargado en el servidor. Lo que estoy preguntando es el camino de archivo de la fuente. –

+0

No obtiene el recorrido de archivo de la fuente. **Nunca**. Los navegadores filtran por razones de seguridad/privacidad. @vindia estaba señalando el error de funcionalidad en tu código. No puede utilizar la ruta del archivo de clientes en el servidor de todos modos. Eso es dos sistemas de archivos diferentes, la misma ruta no va a funcionar. – mario

Respuesta

6

El ['name'] se refiere al nombre de archivo original en la computadora de los usuarios. Eso no es útil para ti, en particular porque podría estar vacío. (O puede contener valores falsos, haciendo un recorrido de directorio explotar. Por lo tanto, simplemente evitarlo.)

Es necesario utilizar el ['tmp_name'] que es una ruta de servidor-absoluta como /tmp/upload85728 que se puede utilizar para fopen() o move_uploaded_file().

0

necesita definir una ruta en su archivo de configuración o donde quiera usar y luego esa variable sea lo que sea que defina, puede utilizar en su proyecto.

i.e: define('FILE_UPLOADED_PATH','folder1/folder2/so on'); 

así que después de la puesta este código su ruta al archivo completo sería:

FILE_UPLOADED_PATH.$_FILES['csv_file']['name']; 

puede utilizar el código anterior como ejemplo.

Gracias.

+0

¿Qué pasa si el usuario subió un archivo csv no desde la ruta del archivo que especifiqué? –

+0

no ... no ... no entiendo en realidad lo que quiero decir .. siempre que el usuario cargue archivos desde su sitio, ese archivo se cargará a su ruta específica solo.en el momento en que necesitas editar/mostrar puedes recuperarlo fácilmente ... eso es lo que sugiero ... gracias. – Chandresh

+0

usuario puede cargar archivos desde cualquier lugar en la computadora, pero los archivos después de cargarse estarán en la ruta específica solamente. entonces hace que nuestra tarea sea simple. – Chandresh

3

Pude importar con éxito el archivo csv y lo almacené en la base de datos mysql.

Estos son los los códigos (en realidad es casi lo mismo que mi pregunta con algunos ligeros cambios con gran efecto):

index.php:

<form action="csv_import.php" method="POST" enctype="multipart/form-data" > 
<input type="file" name="csv_file" /> 
<input type="submit" name="upload" value="Upload" /> 
</form> 

csv_import.php:

<?php 
if ($_FILES['csv_file']['error'] > 0) { 
    echo "Error: " . $_FILES['csv_file']['error'] . "<br />"; 
}else{ 
    if (($handle = fopen($_FILES['csv_file']['tmp_name'], "r")) !== FALSE) { 

    $dbconn = mysql_connect("localhost", "root", "") or die("Couldn't connect to server!"); 
    mysql_select_db("csv_test") or die("Couldn't find database!"); 

    $ctr = 1; // used to exclude the CSV header 

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    if ($ctr > 1) mysql_query("INSERT INTO ninja_exer (name, village, country) VALUES ('$data[1]', '$data[2]', '$data[3]')"); 
    else $ctr++; 
    } 
    fclose($handle); 
    } 
} 
?> 
Cuestiones relacionadas