2012-04-19 107 views
8

我記得閱讀php.net(但很不幸似乎無法找到該網頁)的PHP解釋器可以以不同的方式運行PHP對象 - 最常見的,每次請求一個頁面時,的一個實例PHP解釋器被創建,運行其過程,然後被銷燬,以及與該特定頁面調用相關聯的所有內存。顯然,也可以允許所有的內存留下來,以便它可以在將來的頁面調用中再次使用;據我瞭解,基本上允許多個不同的PHP腳本訪問和修改相同的對象,而不會在腳本完成後丟失它們。是留在記憶

或者至少,讓我記住了。有沒有道理呢?如果是這樣,我將如何設置它?

+3

你想解決什麼問題?原始問題是什麼? – zerkms 2012-04-19 21:11:34

+8

也許$ _SESSION變量是你需要的全部:) – jantimon 2012-04-19 21:12:23

+0

如果你想在內存中保存對象,然後將它們緩存在APC或Memcached中。但是,也許你只是在尋找會話功能。 – halfer 2012-04-19 21:13:26

回答

5

PHP不工作的方式。它關於跑步和忘記。

則可以使用用戶級共享存儲器擴展程序保存請求之間的數據,例如:APC,了XCache,分佈式緩存,等等

或通過使用調用在session_start

$ _SESSION

後的會話的數據數組

不認爲PHP腳本的像如Java應用程序tomcat的。標準的PHP不是爲那個用例設計的。 php編譯器可以即時工作。

+0

我發現[session_name](http://php.net/manual/en/function.session-name.php)對此非常有幫助。每個文件可以共享同一個session_name,並且所有相關數據都可以存儲在會話對象中。這樣,我可以運行一個用於設置會話對象的init文件,然後所有相關的腳本文件都可以相應地使用它。 – Monchoman45 2012-04-19 22:04:34

+0

@ Monchoman45在我看來,如果這是你的話,會議不會取代$ GLOBALS或頁面緩存;) – Hajo 2012-04-19 22:08:31

0

讓請求之間的服務器逗留,所以將物體做:

通用HTTP應用程序的做法有了很好編寫的應用程序這比APC提供了更多的速度,但是如果你需要添加多重盒子(你仍然可以使用粘性會話),它不會在用戶之間進行擴展。

1

您可以使用shared memory一些你想要什麼,但Redis的/內存緩存可能是更好的選擇。