2017-08-25 57 views
0

從數據庫中拉出「大」sql查詢50000條記錄。它在大約5秒內完成,但在拉動之後,我通過一個函數來運行它來創建一個html表格,它由於某種原因保持超時。我可以將查詢限制爲< 30k,並且它將在大約19秒內執行php腳本,但是任何更大的表格都不會顯示,但是頁面上的所有內容都會加載。PHP在公共函數內超時

我試過正在重置的時間限制,但它並沒有解決問題

ignore_user_abort(true); 
set_time_limit(0); 

什麼能出導致時間生成表的時候?

EDIT1:

我修改php.ini文件,允許更長的執行時間,這並沒有解決問題。

public function report_table($data, $header_spacing, $column) 
{ 


    $html = "<div class='accordion_div'>"; 

    foreach($data as $d_row){ 

     $title = $d_row[0][$column]; 
     $html .= $this->accorion_button($title); 
     $html .= "<div class='panel'><table border='0' style='$align; width: 980px;'>"; 
     foreach($d_row as $d1){ 


      $html .= "<tr>"; 
      $x=0; 
      $y=$x+1; 
      $html .= "<td style='width: $header_spacing[$x];' scope='col' >&nbsp;</td>"; 
      foreach($d1 as $d){ 

        $html .= "<td style='width: $header_spacing[$y];' scope='col' >$d</td>"; 

       $x++; 
       $y++; 
      } 

      $html .= "</tr>"; 
     } 

      $html .= "</table>"; 
     $html .= "</div>"; 

    } 



    return $html; 
} 
+1

你使用分頁?爲什麼不使用它一次顯示幾百個? –

+0

爲什麼你不限制你的SQL查詢更少的記錄,讓表讓我們說500行和分頁?我認爲這是不好的做法,在html中有很多行。瀏覽器可能佔用太多內存。 –

+0

順便說一句..你的超時...檢查你的php.ini有我相信60秒的限制,所以增加它 –

回答

1

事情你應該做些什麼來避免這樣的事情:使用

  1. 增加PHP內存津貼的ini_set(),ini_set('memory_limit','512M');

因此您的代碼將是:

public function report_table($data, $header_spacing, $column) 
{ 
ini_set('memory_limit','512M'); 
//then your loop 
} 
  1. 添加分頁php或jQuery,我有一個類似的需求顯示超過65K記錄,使用下面的jquery進行分頁,並且它完美地工作。檢查此:codepen.io/PhilipJohnBasile/pen/weorgm
+0

這固定它。 –