Intereting Posts

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

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

Мой код до сих пор здесь. ФАЙЛ 1: HTML ЗАГРУЗКА:

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

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

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

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

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

Вам нужно будет перенести файл туда, куда вы хотите его первыми, тогда вы можете работать с ним. См. 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>"; ?> 

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

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

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

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

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

Вы можете прочитать весь текстовый файл в массив с 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>"; }