运行时配置

这些函数的行为受 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 个注释

martijn at netexpo dot nl
11 年前
请注意,这三个 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 服务器脚本本身内存不足时,将抛出致命错误;或者当它处理的数据使内存使用量超过此限制时,将让您的服务返回空字符串。

其他 max 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
michal-ok at o2 dot pl
4 年前
请注意,wsdl 缓存可能在不同的 PHP 版本之间不兼容,这在您升级同一系统上的 PHP 或使用多 PHP 版本设置(您从不同的 PHP 版本运行相同的脚本)时可能很重要。换句话说,当 SOAP 请求将文件写入缓存,然后您从另一个 PHP 版本发出另一个 SOAP 请求并使用此缓存文件时,*有时*您可能会遇到无法判断来源的意外错误。

我花了几个小时试图找出为什么每次我从 PHP 7.3 运行一些 SOAP 脚本时,都会收到“编码:违反编码规则”错误,而就在几个小时前我从 PHP 7.2 切换到了 7.3。事实证明,我需要清除由 PHP 7.2 创建的所有缓存的 wsdl 文件。从 7.3 降级到 7.2 也导致了相同的错误,也需要清除缓存。

在迁移到新的 PHP 版本时,您可以关闭缓存或设置一个非常短的 wsdl_cache_ttl 周期(如果您无法自己删除文件)。如果您需要您的脚本在多个 PHP 版本上运行并使用 wsdl 缓存,那么您需要为每个 PHP 版本设置不同的 wsdl_cache_dir。
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) 于 4-FEB-09 提供的拼写修正。]
no dot tehwan dot spam at com dot nospam dot gmail
9 年前
请记住,如果您启用了内存缓存,即使您使用更新的 WSDL 文件,它仍然会使用内存中的文件。如果您自己下载 WSDL 文件,请避免使用内存缓存,因为您将无法控制它,或者将 TTL 设置为较小的值(默认值为 1 天)。
To Top