PHP Conference Japan 2024

執行期配置

這些函數的行為會受 php.ini 中的設定影響。

SOAP 設定選項
名稱 預設值 可變更 變更日誌
soap.wsdl_cache_enabled 1 INI_ALL
soap.wsdl_cache_dir /tmp INI_ALL
soap.wsdl_cache_ttl 86400 INI_ALL
soap.wsdl_cache 1 INI_ALL
soap.wsdl_cache_limit 5 INI_ALL

以下是設定指示的簡短說明。

soap.wsdl_cache_enabled int

啟用或停用 WSDL 快取功能。

soap.wsdl_cache_dir string

設定 SOAP 擴充功能放置快取檔案的目錄名稱。

soap.wsdl_cache_ttl int

設定快取檔案將被使用而不是原始檔案的秒數(存活時間)。

soap.wsdl_cache int

如果 soap.wsdl_cache_enabled 開啟,此設定會決定快取類型。它可以是:WSDL_CACHE_NONE (0)、WSDL_CACHE_DISK (1)、WSDL_CACHE_MEMORY (2) 或 WSDL_CACHE_BOTH (3)。也可以透過 SoapClientSoapServer 建構函式中的 options 陣列設定。

soap.wsdl_cache_limit int

記憶體中快取 WSDL 檔案的最大數量。將更多檔案新增至已滿的記憶體快取將會刪除其中最舊的檔案。

新增註解

使用者貢獻的註解 4 則註解

14
martijn at netexpo dot nl
12 年前
請注意,這三個 ini 設定也會影響您的 SOAP 伺服器(以及用戶端)的行為

1. default_socket_timeout 預設為 60 秒
對您的 SOAP 伺服器的大型或緩慢請求,或在您的 SOAP 伺服器上的長時間程序,將會在 60 秒後傳回 SOAP 錯誤,如:Error Fetching http headers。

2. max_execution_time 預設為 30 秒
這可能是下一個瓶頸(但只有在您的 default_socket_timeout 大於此設定時)。您的 SOAP 伺服器不會傳回任何內容,沒有錯誤,沒有輸出,只有一個空字串。

3. memory_limit 預設為 128M
當 SOAP 伺服器腳本本身的記憶體不足時,將會拋出嚴重錯誤,或當其處理的資料將記憶體使用量超出此限制時,將會使您的服務傳回空字串。

其他最大 POST 設定幸運地(但對我來說有點驚訝)對您的 SOAP 伺服器沒有任何影響。它們是

max_input_time
max_input_nesting_level
max_input_vars
post_max_size
suhosin.post.max_array_depth
suhosin.post.max_array_index_length
suhosin.post.max_name_length
suhosin.post.max_totalname_length
suhosin.post.max_vars
suhosin.post.max_value_length
8
michal-ok at o2 dot pl
4 年前
請注意,WSDL 快取可能無法在不同的 PHP 版本之間相容,當您在同一系統上升級 PHP 或使用多 PHP 版本設定(在其中從不同的 PHP 版本執行相同的腳本)時,這可能很重要。換句話說,當 SOAP 請求將檔案寫入快取,然後您從另一個 PHP 版本發出另一個 SOAP 請求時,並且使用了此快取檔案,那麼 *有時* 您可能會遇到無法預期的錯誤,而您不知道它們來自哪裡。

我花了好幾個小時試圖弄清楚為什麼每次我從 PHP 7.3 執行我的一些 SOAP 腳本時,都會收到「編碼:違反編碼規則」的錯誤,而就在幾個小時前我剛從 PHP 7.2 切換過來。結果發現我需要清除 PHP 7.2 建立的所有快取 wsdl 檔案。從 7.3 降級到 7.2 也會導致相同的錯誤,並且也需要清除快取。

當轉換到新的 PHP 版本時,您可以關閉快取或設定非常短的 wsdl_cache_ttl 週期 - 如果您無法自己刪除檔案。如果您需要您的腳本在具有 wsdl 快取的多個 PHP 版本上執行,那麼您需要為每個 PHP 版本設定不同的 wsdl_cache_dir。
11
hpralow at users dot sf dot net
16 年前
如果您想要停用 WSDL 快取,您可以使用以下方式執行
<?php
ini_set
('soap.wsdl_cache_enabled', '0');
ini_set('soap.wsdl_cache_ttl', '0');
?>
但是您必須在建立 SOAP 物件 (soap_client 或 soap_server) 之前執行此動作。
像上面一樣變更設定對已存在的 SOAP 物件沒有任何影響。

[由 danbrown AT php DOT net 編輯:Typofix 由 (james AT voodoo DOT co DOT uk) 於 2 月 4 日提供。]
-3
no dot tehwan dot spam at com dot nospam dot gmail
10 年前
請記住,如果您啟用了記憶體快取,即使您使用了更新的 WSDL 檔案,它仍然會使用記憶體中的檔案。如果您自己下載 WSDL 檔案,請避免使用記憶體快取,因為您將無法控制它,或者將 TTL 設定為一個小值(預設值為 1 天)。
To Top