2009-09-16 69 views

回答

12

否,通過設計PHP是一個「無共享」架構,這意味着什麼也不在同一時間運行的進程之間或在運行了一個又一個的請求之間共享。有辦法共享數據,但你必須明確地做。

如果你只是想從同一個用戶,會話或餅乾2個請求之間共享可能是要走的路。

如果你想在多個用戶之間共享,您可能需要某種形式的共享持久性的,無論是短期內的高速緩存(如memcached的)或更強健如數據庫。

無論哪種方式,數據實際上是檢索和重建每個請求。它只是在會話中自動處理。

0

不是這樣,但你可以使用cookie或會話,以保持數據的用戶的瀏覽體驗時間,或者你可以寫一個數據庫,或者如果信息需要持續超過該磁盤上的文件。

1

腳本之間唯一可以訪問的是超全局$ _SESSION數組。這是因爲你存儲在數組中的任何內容都會被髮送到一個cookie,然後可以通過下一個PHP腳本來獲取它。

全局變量只是意味着他們可以在腳本無論範圍進行訪問;這並不意味着它們可以在腳本之間發送。

因此,要麼使用$ _SESSION數組傳遞變量(這會在客戶端計算機上存儲Cookie,因此不要通過該數組發送任何敏感信息),要麼您可以在腳本之間傳遞POST或GET發送變量。

+3

會話數據本身不存儲在cookie中,但在服務器上。只有會話ID作爲cookie頭被髮送到客戶端。 – VolkerK 2009-09-16 23:10:16

1

每個請求都由它自己的php實例處理。 php中的全局變量只能從同一個php實例中訪問。但是,您可以使用類似memchached module的東西在不同實例之間共享數據(通常應該比將數據寫入文件系統更快)。

2

實際上,你可以做到這一點使用shared memory,或APC(這是使用共享內存本身)。

0

在PHP全局變量的另一個常見的替換是共享使用一個數據庫如MySQL(雖然不是一個完美的)

-1

全局變量是大多數編程壞。它們在多線程/多用戶系統(如webapps)中尤其糟糕。避免。如果您必須使用全局變量(而不是全局常量),則將它們置於數據庫中並使用保留更新的事務。

由於您談論了不同的腳本,它聽起來像你真正想要的是一個更加面向應用的語言的web應用程序框架,如Django(python)或Rails(ruby)。這些讓你更像是一個凝聚的PROGRAM,而不是許多處理Web請求的鬆散連接的腳本。

2

您可以使用$_SESSION,即:

SCRIPT1。PHP

<?php 
session_start(); 
$_SESSION['myVar'] = "something"; 
?> 

script2.php

<?php 
session_start(); 
echo $_SESSION['myVar']; 
//something 
?>