Может ли кто-нибудь рассказать мне, как получить путь к файлу с помощью 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-файлы. Я думаю, мне нужно получить путь к файлу, но я не знаю, как это сделать.
Вы не должны просто использовать $_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
если вы хотите переместить файл из временного местоположения, также объясненного в учебнике 🙂
Я думаю, вы получите много от того, чтобы взглянуть на следующую ссылку: загрузка POST-метода .
Прежде всего, вы должны изменить свой метод формы для post
и добавить enctype="multipart/form-data"
.
Затем вы можете получить временный путь к файлу из $_FILES['csv_file']['tmp_name']
.
В вашем вызове fopen используйте $_GET['csv_file']['tmp_name']
– это указывает на файл на сервере сразу после загрузки.