Как загрузить файл .txt в PHP и прочитать его по очереди на другой странице?

Моя задача - загрузить файл .txt в форме (просмотреть), разместить файл на другой php-странице, а затем прочитать этот файл по строкам.

Мой код до сих пор здесь. ФАЙЛ 1: HTML UPLOAD:

<form action="TestParse.php" method="post" enctype="multipart/form-data">
   <label for="file">Filename:</label> <input type="file" name="file" id="file"/>
<input type="submit" value="Submit">
</form>

ФАЙЛ 2: ЧТЕНИЕ ФАЙЛА

    if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
elseif ($_FILES["file"]["type"] !== "text/plain")
{
echo "File must be a .txt";
}
else
{
$file_handle = fopen($_FILES["file"]["name"], "rb");
}

Как я вижу, второй файл будет проверять, нет ли ошибки и что загруженный файл является .txt. Затем он будет fopen() файл, и тогда я мог бы читать с помощью fgets() (мне удалось заставить все это работать).

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

Может кто-нибудь сказать мне, что не так с этим кодом?

Ответ 1

чтобы читать строки за строкой, он работал у меня этот код:

$fp = fopen($_FILES['uploadFile']['tmp_name'], 'rb');
    while ( ($line = fgets($fp)) !== false) {
      echo "$line<br>";
    }

вам не нужно его сохранять.

Ответ 2

Вам нужно будет перенести файл туда, куда вы хотите его первыми, тогда вы можете работать с ним. См. move_uploaded_file(), как это делается. См. Также Обработка загрузки файлов в документах PHP, в частности страница, показывающая, как делать с использованием POST, который вы делаете.

<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);

print "</pre>";

?>

Ответ 3

Используйте $_FILES["file"]["tmp_name"] вместо этого. И получите содержимое файла с помощью

$contents = file_get_contents($_FILES['file']['tmp_name']);

Ответ 4

Может быть, существует ограничение open_basedir?

open_basedir ограничивает файлы, которые могут быть открыты PHP в дереве каталогов.

http://www.php.net/manual/en/ini.core.php#ini.open-basedir

Ответ 5

Вы можете прочитать весь текстовый файл в массив с php explode fn.

eg. $wholeTextFile = explode("\n", file_get_contents('textFileName.txt'));

Затем получите общее количество строк, посчитав массив sizeOf.

eg. $totalLinesinFile = sizeOf($wholeTextFile);

Теперь, когда вы перебираете массив в цикле for или forEach, каждая итерация дает вам 1 строку.

eg.

for ($i = 0; $i < $totalLinesinFile ; $i++) {
   echo "Line number is ".$i."<br>";
   echo wholeTextFile[$i]."<hr>";
}