2017-08-04 74 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); 

,但有沒有完成所有線路的問題,並在第一季度的某個地方掛了 - 這還需要較長的時間來加載。我試過 第二件事是這個

$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

它已經10年了,因爲我已經做任何Web服務器的配置,但我似乎記得有最大文件大小限制PHP。我不知道這是否是問題,這只是一個非常隨意的猜測。 – 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."); 
    } 

它不工作,因爲它是一個2G的文件,你想它輸出到屏幕上,而不是允許用戶下載或打開他們的個人計算機上。這應該是這個文件交付的唯一方式。 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進程發送一個靜態數據的blob,而且還存在超過最大執行時間的風險。使用XSendFile這樣的東西,並讓HTTP服務器處理它。 – Geoffrey