Моя цель здесь – загрузить файл .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 в дереве каталогов.
Вы можете прочитать весь текстовый файл в массив с 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>"; }