2017-08-04 14 views
1

巨大なテキストファイル(約2ギガバイト)があり、それには約20億行があります。 私がこれまで試したすべてがウェブサイト上に巨大なテキストファイルを表示する

$myfile = fopen("C:\Users\server\Desktop\primes.txt", "r") or die("Unable to 
open file!"); 
while(!feof($myfile)) { 
    echo fgets($myfile) . "<br>"; 
} 
fclose($myfile); 

ですが、すべての行を終えていないとの問題を有し、第1四半期のどこかにハングアップ - それはまた、読み込みに時間がかかります。私が試した 2つ目は、この

$path="C:/Users/server/Desktop/Server files/application.windows64/"; 
$file="primes.txt"; 

//read file contents 
$content=" 
     <code> 
      <pre>".file_get_contents("$path/$file")."</pre> 
     </code>"; 

//display 
echo $content; 

だった。しかし、それは偶数ラインをロードしていませんでした。

また、私はこのファイルを直接開くことができず、デスクトップ上にある必要があります。私はそれを別のディレクトリにコピーまたは移動するように提案しないでください。

私が仲良くする助けとなるか、少なくともそれがうまくいかない理由についての説明がありますか?

申し訳ありませんが、私の英語はそれほど良いものではありません。

+0

活用HTTPサーバー、X-SENDFILE – Geoffrey

+1

の検索私は、任意のWebサーバの設定を行ってきたが、私は、最大ファイルサイズの制限を持つPHPを思い出すように見えるので、それは10年が経ちました。私はこれが問題かどうか分かりません。それはまったくランダムな推測です。 – stevieb

+1

そのファイルをロードするには、とにかく(または数時間)数分かかることがあります。今日は誰もページが10秒以上ロードされるのを待っていません。 – Teemu

答えて

3
$attachment_location = $_SERVER["DOCUMENT_ROOT"] . $file; 
    if (file_exists($attachment_location)) { 

     header($_SERVER["SERVER_PROTOCOL"] . " 200 OK"); 
     header("Cache-Control: public"); 
     header("Content-Type: text/plain"); 
     header("Content-Length:" . filesize($attachment_location)); 
     header("Content-Disposition: attachment; filename=file.txt"); 
     readfile($attachment_location); 
     die();   
    } else { 
     die("Error: File not found."); 
    } 

それは2ギグファイルですので、それは働いていないと、ユーザーがそれをダウンロードしたり、自分の個人的なマシン上でそれを開くことができとは対照的に、あなたは、画面への出力にそれをしようとしています。これは、このファイルが配信される唯一の方法です。ブラウザのウィンドウに2ギガ出力を出力すると、クライアントとサーバーのどちらかまたは両方がクラッシュする可能性があります。

http://php.net/manual/en/function.readfile.php

あなたが本当に実際にファイルを表示したい場合は、技術的にクリックしたときに、ファイルの異なる部分間で切り替えますことをページャでファイルの特定の%を表示することも可能であろう。

http://php.net/manual/en/function.fseek.php

+0

Answerのコードは何を達成していますか? – guest271314

+0

はファイルを配信し、ダウンロードすることを推奨します。 – thomasmeadows

+0

これは依然としてPHPに依存してデータを出力します。そのような膨大なファイルを使用すると、サーバ上でPHPプロセスを保持して静的データを送信するだけでなく、最大実行時間を超過するリスクもあります。このようなものにはXSendFileを使用し、HTTPサーバーで処理させます。 – Geoffrey

関連する問題