How to get full filepath when uploading files in PHP?

30,161

Solution 1

The ['name'] refers to the original filename on the users computer. That's no use to you, in particular because it might be empty. (Or it can contain fake values, causing a directory traversal exploit. So, just avoid it.)

You need to use the ['tmp_name'] which is a server-absolute path like /tmp/upload85728 that can be used for fopen() or move_uploaded_file().

Solution 2

I was able to successfully imported csv file and stored it in the mysql database.

Here are the the codes (actually its almost the same as my question with some slight changes with great effect):

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);
  }
 }
?>
Share:
30,161
Newbie Coder
Author by

Newbie Coder

I am total noob programmer. I am highschool student... I used to be a gangster and got tired of it. I realized it doesn't make any sense at all. I want to have a good future. Now I am studying programming for my future career.

Updated on April 29, 2020

Comments

  • Newbie Coder
    Newbie Coder about 4 years

    I really want to know how am I gonna get the full filepath when I upload a file in PHP?

    Here's my my problem...

    I am importing a csv file in PHP. Uploading a file isn't a problem but the function used to import csv files which is fgetcsv() requires fopen. fopen is the one giving me a headache because it requires an exact filepath which means that the file should be in the same directory with the php file. What if the user gets a file from a different directory.

    Here's my codes:

    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 here can only get the filename which is passed by the variable $_FILES['csv_file']['name']. I was trying to get any functions to get the full filepath for $_FILES in the internet but can't find any.

    I am very new to web development so pls be patient. Pls answer as simple as possible... Pls help...

  • Newbie Coder
    Newbie Coder about 13 years
    What if the user uploaded a csv file not from the file path I specified
  • Chandresh M
    Chandresh M about 13 years
    no..no..you are not understand actually what i mean.. whenever the user upload file from your site that file will upload to your specify path only.so at the time you need to edit/show u can easily get that back...thats what i suggest..thanks.
  • Chandresh M
    Chandresh M about 13 years
    user can upload files from anywhere in computer but the files after uploaded would be at the specific path only. so its make our task simple.