У меня есть форма (HTML, PHP), которая позволяет конечному пользователю загружать файл для обновления базы данных (MySQL) с записями в загруженном файле (в частности .csv). Однако в phpscript я могу получить только имя файла, а не полный путь к файлу. По этой причине fopen () не работает. Может кто-нибудь, пожалуйста, дайте мне знать, как я могу работать над поиском полного пути?
Код HTML:
<html> <head> </head> <body> <form method="POST" action="upload.php" enctype="multipart/form-data"> <p>File to upload : <input type ="file" name = "UploadFileName"></p><br /> <input type = "submit" name = "Submit" value = "Press THIS to upload"> </form> </body> </html>
PHP-скрипт:
<?php ..... ...... $handle = fopen($_FILES["UploadFileName"]["name"], "r"); # fopen(test.csv) [function.fopen]: failed to open stream: No such file or directory ?>
name
ссылается на имя файла на стороне клиента . Чтобы получить имя файла (включая полный путь) на стороне сервера , вам нужно использовать tmp_name
:
$handle = fopen($_FILES["UploadFileName"]["tmp_name"], 'r');
Используйте следующий код,
$handle = fopen($_FILES["UploadFileName"]["tmp_name"], 'r');
$target='uploads/'.basename($_FILES['UploadFileName']['name']); if(move_uploaded_file($_FILES['UploadFileName']['tmp_name'],$target)) { //Insert into your db $fp = fopen($target, "r"); }
Я писал так:
$filePath = realpath($_FILES["file"]["tmp_name"]);
Это дало мне полный путь к загруженному файлу в PHP. Если вы находите ошибку 0 байтов в загрузке файла, просто измените эту строку длины содержимого так, как это
header("Content-Length: ".filesize($filePath));
Где $ filePath должен быть абсолютным путем для файла, а не только для дескриптора файла.