簡體   English   中英

帶有加載腳本的PHP自動啟動

[英]PHP autostart with loading script

是否有一個設置可以讓我在PHP啟動時自動加載/執行一些腳本,就像讓一些常量進入全局內存一樣。

還有一個可以跨用戶訪問的全局內存嗎? 關於內存還沒有可供所有用戶訪問的內存嗎? 一個人設置另一個人訪問它或者我是否應該每次都要讀取和寫入文件,以便在數據庫臨時表之間共享某些內容。

驚訝的PHP沒有這個?

謝謝。

PHP不提供跨腳本共享的全局緩存。 您可以根據您的要求以不同方式解決此問題。

如果要設置計算成本不高的全局常量,可以編寫定義這些常量的腳本,然后自動使該腳本在請求的文件之前運行。 這是使用php.ini中的auto_prepend_file選項完成的。

如果要計算昂貴的值,可以使用memcached作為所有PHP腳本都可訪問的全局緩存。 多個客戶端API可以使用PHP連接到memcached。

當然,如果這些值是每個用戶,您還可以在用戶會話中存儲全局值。 甚至使用MySQL。

如果我理解正確,您希望PHP在啟動Apache時執行某些腳本,以存儲一些全局共享值。 如果我錯了,請編輯/評論。

簡短的回答是:不,你不能這樣做。 PHP並不是一個等待客戶端請求的服務器。 它單獨處理每個HTTP請求。

答案很長:好吧......你可以在每個請求上執行auto_prepend_file來執行它。 您可以創建一些簡單的bash腳本並使用它來啟動Apache然后調用PHP腳本,但它不會在Apache中執行。

至於共享內存,有幾個選擇。 使用平面文件,數據庫或memcached可能是最便攜的。 某些安裝啟用了共享內存功能,但無法保證。

如果您正在使用某種MVC框架,則可以在那里定義變量並確保每次都加載文件。 你可以使用$ GLOBALS ['var_name'] = $ value; 並在該請求期間在其他文件中訪問它。

每個運行的PHP腳本實例都有自己的全局變量,函數,常量等,沒有辦法直接將變量從一個正在運行的腳本實例復制到另一個。 但是,有一些間接方法,如使用文件,數據庫或memcached。

如果您使用某個子系統(如APC共享內存,甚至是memcached),您可以在apache start上自動運行數據生成器腳本,方法是編輯它的啟動腳本( /etc/init.d/[apache2|httpd] )。 例如,您可以在start | restart之后立即向生成器腳本添加curl或wget請求。

在第一個“外部”請求中有一個未初始化狀態的可能性很小,但我確定你可以處理它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM