2024年PHP日本大会

运行时配置

这些函数的行为受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错误,例如:获取HTTP标头错误。

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周期 - 如果您无法自己删除文件。如果您需要您的脚本在多个PHP版本上使用wsdl缓存运行,那么您需要为每个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编辑:由(james AT voodoo DOT co DOT uk)于2009年2月4日提供的拼写更正。]
-3
no dot tehwan dot spam at com dot nospam at gmail
10年前
请记住,如果您启用了内存缓存,即使您使用的是更新的WSDL文件,它仍然会使用内存中的文件。如果您自己下载WSDL文件,请避免使用内存缓存,因为您无法控制它,或者将TTL设置为较小的值(默认为1天)。
To Top