Я действительно хочу знать, как получить полный путь к файлу при загрузке файла в 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'];
вы можете использовать вышеприведенный код в качестве примера.
Благодарю.