2015-06-30 46 views
3

是否有可能將PHP數組存儲到我的服務器,現在它總是在有人從CSV文件重新加載頁面時創建,但這是不必要的,因爲該文件僅在每小時後纔有機會。提高頁面性能,保存服務器上的PHP數組?

自動櫃員機,頁面需要9秒加載,這是相當長的。 CSV文件具有10k +行,每行9個元素,因此如果服務器不必爲每個用戶處理100k個元素,那麼對於性能來說這將非常有用。

我已經有一個cronjob用於下載csv文件,所以如果解析命令在下載完成後纔會執行,每小時只執行一次。

的cronjob:

<?php 

function download_remote_file($file_url, $save_to) { 
    $content = file_get_contents($file_url); 
    file_put_contents($save_to, $content); 
} 
download_remote_file(<url here>, realpath(".") . '/dump.csv'); 
?> 

,這將發生在頁面的每一個重載:

1:解析數據陣列

$url = 'dump.csv'; 
$csvData = file_get_contents($url); 
$lines = explode(PHP_EOL, $csvData); 
$array = array(); 
foreach ($lines as $line) { 
$line = str_replace("\\", "&#92;", $line); 
$line = str_replace("#", "&#35;", $line); 
$array[] = str_getcsv($line); 

第二:通過數組的Javascript

var array = <?php echo json_encode($array) ?>;  

第3:創建HTML表

//some code 

4:初始化數據表插件

$(document).ready(function() { 
    createtable(); 
    $('#scoreboard').DataTable({ 
     "iDisplayLength": 50, 
     language: { 
      decimal: ".",  
     }, 
     "lengthMenu": false, 
     "bLengthChange": false 
    }); 
}); 

有什麼事可以做更快?

就像上面提到的那樣,保存php數組服務器端或者可能以某種方式保存帶有HTML表的JS數組?

-Innerwolf

+1

您可以嘗試將分析的數組存儲在會話或Memcached中。也許存儲一個PHP文件與硬編碼數組。打開CSV文件,解析它,保存到PHP文件。然後加載PHP文件。 –

+4

是不是有沒有存儲在數據庫中的原因? – CD001

+0

我認爲數據庫是不必要的,因爲它也適用於php。我也不知道如何將一個文件從一個url直接存儲到sql – Innerw0lf

回答

0

既然你提到越來越以小時爲單位,我建議以下的數據:

  1. 搶CSV:用cron文件,並存儲在數據庫中的數據以小時爲單位
  2. 配置您的數據表組件使用server side data

這樣你就不會強迫每個用戶在每次首頁加載時一次下載整個數組。 服務器端腳本僅獲取需要在表中特定頁面上顯示的記錄數。

1

你解析你的CSV之後,這樣做:

$file = fopen('/tmp/output.js', 'w'); 
fwrite($file, '<script type="text/javascript">'); 
fwrite($file, 'var array ='); 
fwrite($file, json_encode($array)); 
fwrite($file, ';'); 
fwrite($file, '</script>'); 
fclose($file); 

copy('/path/to/script.js', '/path/to/script.js.bak'); 
move('/tmp/output.js', '/path/to/script.js'); 

然後,後來當你輸出HTML,你只需要在堅持:

<script type="text/javascript" src="/scripts/script.js"> 

在標題中。人們的瀏覽器也應該正確緩存它。請注意複製和移動 - 您不必嚴格製作備份副本,但必須使用move()來替換「實時」腳本 - move()是原子的,或多或少,並且不會導致任何人得到一個半文件。

另外,請注意,您需要寫入腳本的寫入權限 - 有一些方法可以保證這個相當安全(不會讓PHP腳本在硬盤上寫滿),但這不在範圍之內。