#php #file-upload #filepath
#php #загрузка файла #путь к файлу
Вопрос:
Может кто-нибудь, пожалуйста, сказать мне, как получить путь к файлу, используя html <input type="file">
в PHP?
Вот мои коды:
index.php
<form action="csv_to_database.php" method="get" >
<input type="file" name="csv_file" />
<input type="submit" name="upload" value="Upload" />
</form>
и в csv_to_database.php
<?php
if (isset($_GET['csv_file'])) {
$row = 1;
if (($handle = fopen($_GET['csv_file'], "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>n";
$row ;
for ($c=0; $c < $num; $c ) {
echo $data[$c] . "<br />n";
}
}
fclose($handle);
}
}
?>
Моя проблема в том, что это работает только тогда, когда данные csv находятся в том же каталоге, что и мои php-файлы. Я думаю, мне нужно получить путь к файлу, но я не знаю, как это сделать.
Комментарии:
Ответ №1:
Вы не должны просто использовать то, $_GET
что у вас есть сейчас. Ваш файл основан на $_FILES["csv_file"]["tmp_name"]
.
Лучше всего вам ознакомиться с этим руководством, в котором в основном говорится, что вам нужно сделать что-то вроде этого:
<?php
if ($_FILES["csv_file"]["error"] > 0)
{
echo "Error: " . $_FILES["csv_file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["csv_file"]["name"] . "<br />";
echo "Type: " . $_FILES["csv_file"]["type"] . "<br />";
echo "Size: " . ($_FILES["csv_file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["csv_file"]["tmp_name"];
}
?>
И вы можете перейти оттуда. Используйте move_uploaded_file
, если вы хотите переместить файл из временного расположения, также объяснено в руководстве 🙂
Ответ №2:
Я думаю, вы бы многое выиграли, взглянув на следующую ссылку: Загрузка методом POST.
Прежде всего, вы должны изменить свой метод form на post
и добавить enctype="multipart/form-data"
.
Затем вы можете получить путь к временному файлу из $_FILES['csv_file']['tmp_name']
.
Ответ №3:
В вашем вызове fopen используйте $_GET['csv_file']['tmp_name']
— это указывает на файл на сервере сразу после загрузки.