Ответ 1
чтобы читать строки за строкой, он работал у меня этот код:
$fp = fopen($_FILES['uploadFile']['tmp_name'], 'rb');
while ( ($line = fgets($fp)) !== false) {
echo "$line<br>";
}
вам не нужно его сохранять.
Моя задача - загрузить файл .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, он, в первую очередь, ставит перед собой цель иметь систему загрузки файлов.
Может кто-нибудь сказать мне, что не так с этим кодом?
чтобы читать строки за строкой, он работал у меня этот код:
$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"]
вместо этого. И получите содержимое файла с помощью
$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>";
}