2012-12-28 92 views
3

我必須讀取文件並進行一些計算,而不是將此計算的結果保存在變量中。PHP:持久變量值

我只需要做一次。在Java + Servlet中,我可以使用servlet容器和單例模式來完成此操作。

我知道在PHP中我不能這樣做。哪種方法是更好的方法?在數據庫上保存計算(或傳輸數據)?

+5

[apc_cache](http://php.net/manual/en/function.apc-add.php)如果你已經安裝了 – Sawny

+0

爲什麼你不能在PHP中做單身? –

+0

@JaredFarrish因爲變量不會在多個請求之間持續 – Antonio

回答

9

不,它不會像Java Servlets一樣工作。你必須找到解決方法。

首先,我假設一般情況下使用$ _SESSION,$ _COOKIE或$ _REQUEST對您來說是不切實際的,因爲您要保存每個服務器(或每個應用程序)的狀態,而不是每個「用戶會話」。

在你的情況下使用數據庫聽起來很實用。在常規應用程序設計中,它將是最常見的解決方案。

你也可以做這樣的事情,使用PHP的序列化功能:

<?php 

$resultfile = 'result.dat'; 
if(!file_exists($resultfile)) { 
    $result = compute_result('foo bar'); 
    file_put_contents($resultfile, serialize($result)); 
} else { 
    $result = unserialize(file_get_contents($resultfile)); 
} 

使用時

  • 你是在一個PHP只有環境
  • PHP的serialize()嘗試是特別可行$result是一個複雜的數據類型,但您不想創建數據庫結構並映射$結果太

如果您不在PHP專用環境中,您可能更喜歡其他序列化格式,如JSON或XML。

另外,序列化結果可以作爲字符串存儲在數據庫中而不是文件中。將它保存到數據庫而不是文件會使應用程序更具可伸縮性,因爲結果可供所有訪問相同數據庫(集羣)的服務器使用。

總之:我會建議使用數據庫可能與序列化結合。

+1

正如另一個建議:如果您需要使用其他語言(也許是Java)來訪問這個全局狀態,那麼使用像JSON這樣的格式可能會更容易。 – Carsten

+1

是的,這是正確的。我根據你的評論更新了答案。 – hek2mgl