2014-10-05 63 views
0

我已經創建了一個PHP文件,它被設置爲讀取本地文本文件的內容,解析爲一個數組,然後在主頁面中填充一個表格。但是,即使只有53行的文本文件在顯示任何內容之前大約需要10秒才能加載頁面。PHP - 加載頁面後填寫表格內容

據我所知,這是一個限制,其中服務器需要創建整個HTML文件之前發送到客戶端,並且這一代需要時間取決於要生成的內容的大小,這意味着這10秒可能會增加有更多的線路要處理。最終產品將有超過500條線路進行處理,因此這需要幾分鐘時間才能生成,然後發送給客戶端。

我想知道是否可以繞過這個,發送客戶端一個小的HTML文件,拿着一個空表,然後開始填充和使用PHP填充這張表,但我不確定如何去做這件事。我是否會將一個include包含到一個單獨的php文件中,該文件將調用生成代碼,或者讓服務器將內容一次一行地「流」到內容中?

相關頁面:http://zionfox.net/cards.php。目前的加載時間大約需要7-10秒,我想通過加載核心表來減少這個時間,然後顯示源表生成的表格行。

編輯:也有一個更大的圖像的原因:當放大移動設備時,我寧願圖像與字體一樣清脆和尖銳。我嘗試使用實際大小的圖像(20px),放大時幾乎不可讀。我意識到.png可能不是最好的格式,但這是我第一次使用file_put_contents(),但我並不完全確定源代碼文件的圖像,也不確保圖像保持透明度。

編輯:編輯:該文件的來源是:http://zionfox.net/cards.php.txt - 請原諒代碼的sc,,它仍然在進行中,並且在整理代碼之前我想先讓它工作。

使用explode()將文件拆分爲一個由字符分隔的數組。然後使用更多explode() s將這些數組中的每個數組分割成更多數組,然後處理該數組的每個部分以查看條件是否匹配,並根據這些值返回正確的結果,包括從外部來源提取圖像(如果我不' t已經有了圖像。這是在for循環底部創建一個新的表格行然後echo,然後它重複下一行的過程。


由於Tenhsor,解決這個:

$handle = fopen($pathToFile, "r"); 
if(ob_get_level() == 0) ob_start(); 

if($handle) { 
    while(($line = fgets($handle)) !== false) { 
     echo $row . "<br />"; 
     //The code you want to process 

     ob_flush(); 
     flush(); 
    } 
} 
ob_end_flush(); 
fclose($handle); 

在他們的反應中發現完整的解決方案。

我也想添加,這個代碼本身並沒有解決我的問題。我正在運行IIS 7.5並且必須發出命令才能正常工作。該命令取決於您的PHP版本,您應該可以通過IIS找到該版本。給予CMD.EXE命令是:

%windir%\system32\inetsrv\appcmd.exe set config /section:handlers "/[name='PHP53_via_FastCGI':ResponseBufferLimit:0" 

哪裏PHP53_via_FastCGI是名稱和您的PHP版本。

回答

1

您可以使用flush php函數向客戶端發送大量信息。 例如,如果你是顯示使用循環HTML表格,你可以做這樣的事情:

file = @fopen('path/to/my/file', 'rb'); 
$buffer = 1024 * 8; 
echo '<table>'; 
while (!feof($file)) { 
    echo '<tr><td>'.fread($file, $buffer).'</td></tr>'; 
    ob_flush(); 
    flush(); 
} 
echo '</table>'; 

ob_end_flush(); 
+0

這似乎是一個有趣的方法,我將不得不看看它是如何工作的,以及它是否可以輕鬆實現到我當前的代碼中。謝謝! – 2014-10-05 16:32:59

+0

沒問題,讓我知道它是如何工作的。 – tenhsor 2014-10-05 16:34:52

+0

不幸的是,這似乎並沒有工作。我創建了一個新文件來測試這個過程,但它仍然希望等到文件完成後才顯示任何數據。測試網址:http://zionfox.net/test.php - 來源:http://zionfox.net/test.php.txt – 2014-10-05 17:19:35

1

如果解析該文件很簡單(意味着不涉及複雜的邏輯),則不需要10秒來處理。檢查你是否可以以某種方式優化你的代碼或在這裏顯示。

如果你的內容不經常改變,你可以考慮的一件事就是緩存。這意味着您只需計算一次表格並重新使用這些計算出的值並將其發佈回瀏覽器。

參見:http://www.slideshare.net/anisniit/caching-new瞭解更多信息。

+0

的源文件是:http://zionfox.net/cards.php.txt - 請原諒代碼的臃腫,它仍然是WIP,我希望在整理代碼之前先讓它工作。 該文件被拆分成一個數組,使用'explode()'分隔字符。然後使用更多'explode()'將這些數組分割成更多數組,然後處理該數組的每個部分以查看條件是否匹配,並根據這些值返回正確的結果,包括從外部源拉取圖像如果我還沒有圖像。 – 2014-10-05 16:23:53