Как получить полный путь к файлу при загрузке файлов в PHP?

Я действительно хочу знать, как получить полный путь к файлу при загрузке файла в PHP?

Вот моя проблема …

Я импортирую файл csv в PHP. Загрузка файла не проблема, но функция, используемая для импорта файлов csv, которая является fgetcsv (), требует fopen. fopen – это тот, который дает мне головную боль, потому что он требует точного пути к файлу, что означает, что файл должен находиться в том же каталоге с файлом php. Что делать, если пользователь получает файл из другого каталога.

Вот мои коды:

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 здесь может получить только имя файла, которое передается переменной $_FILES['csv_file']['name'] . Я пытался получить любые функции, чтобы получить полный путь к файлу $ _FILES в Интернете, но не могу найти.

Я очень новичок в веб-разработке, поэтому pls быть терпеливым. Ответ Pls как можно проще … Помощь Pls …

['name'] относится к исходному имени файла на компьютере пользователя. Это бесполезно для вас, в частности потому, что оно может быть пустым. (Или он может содержать поддельные значения, вызывая эксплойт обхода каталога. Поэтому просто избегайте его.)

Вам нужно использовать ['tmp_name'] который является абсолютным для сервера /tmp/upload85728 , например /tmp/upload85728 который можно использовать для fopen() или move_uploaded_file() .

Мне удалось успешно импортировать файл csv и сохранить его в базе данных mysql.

Вот коды (на самом деле это почти то же самое, что и мой вопрос с небольшими изменениями с большим эффектом):

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); } } ?> 

вам нужно определить путь в вашем файле конфигурации или где бы вы ни хотели использовать, а затем эту переменную, которую вы определяете, вы можете использовать в своем проекте.

 ie: define('FILE_UPLOADED_PATH','folder1/folder2/so on'); 

поэтому после ввода этого кода ваш полный путь к файлу будет –

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

вы можете использовать вышеприведенный код в качестве примера.

Благодарю.