9

我的目标是在表单上上传一个 .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 文件文件夹中的文件时,它首先就违背了拥有文件上传系统的目的。

有人能告诉我这段代码有什么问题吗?

4

5 回答 5

16

逐行阅读,它对我有用这个代码:

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

你不需要保存它。

于 2012-11-01T12:04:39.437 回答
3

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

$contents = file_get_contents($_FILES['file']['tmp_name']);
于 2012-05-21T23:52:24.160 回答
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>";

?>
于 2012-05-21T23:48:02.710 回答
1

您可以使用 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>";
}
于 2017-07-24T18:06:04.477 回答
0

会不会有 open_basedir 限制?

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

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

于 2012-05-21T23:54:24.827 回答