如何在 PHP 中上传.txt文件并在另一页上逐行读取


How does one upload a .txt file in PHP and have it read line by line on another page?

我的目标是在表单上上传一个.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>";
    }

您无需保存它。

请改用$_FILES["file"]["tmp_name"]。并获取文件的内容

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

您需要先将文件移动到您希望它去的位置,然后才能使用它。请参阅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>";
?>

您可以使用 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>";
}
可能是有

open_basedir限制吗?

open_basedir限制了 PHP 在目录树中可以打开的文件。

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