9

ここでの私の目的は、フォームに .txt ファイルをアップロード (参照) し、そのファイルを別の php ページに投稿してから、そのファイルを 1 行ずつ読み取らせることです。

これまでの私のコードはここにあります。ファイル 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");
}

2 番目のファイルは、エラーがなく、アップロードされたファイルが .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 の爆発 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 に答える