上传文件时SoapFault未知错误

时间:2015-02-01 11:08:11

标签: php mysql soap zend-framework2

运行两台服务器,服务器1:是Soap Client&服务器2:是肥皂服务器

从服务器1,我使用以下参数向服务器2发送信封:

client_hash(string), unique_code(string), unique_code2(string), query_id(整数), 参数(字符串)

参数将是一个json字符串,它将包含: file_name(string), file_mime(string), file_content(string:base64 file encoded), file_size(整数)

由于某种原因,如果文件大于700kb,php将通过SoapFault未知错误。虽然任何小的都可以。但

尝试使用Wireshark调试它,发送信封但在0.5234秒后连接已关闭。

所以我已经尝试过各种方法来增加双方相关的php变量限制,但仍然相同,

知道还有什么可以限制连接吗?

注意:

关于PHP:

post_max_size
upload_max_filesize

已经是15M

和mysql:

[mysqld]
local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

innodb_buffer_pool_size=10M
innodb_additional_mem_pool_size=10M
innodb_log_buffer_size=10M
innodb_thread_concurrency=2
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sql_mode=NO_ENGINE_SUBSTITUTION
long_query_time=1
max_allowed_packet=500M
log-slow-queries=/var/log/mysql-slow-query.log

4 个答案:

答案 0 :(得分:1)

几个月前,我们遇到了大型SOAP请求的类似问题。经过几个小时的调查后,我们看到了Transfer-Encoding - 标题的差异。一个小请求正在使用gzip传输编码,而大请求正在使用分块编码(您可以使用Wireshark或SOAPUI客户端进行检查)。

您是否与其他SOAP客户端(如SOAPui)存在相同的问题,或者仅与本机SoapClient存在问题?!如果您在任何SOAP客户端中收到错误,则看起来问题是服务器端问题。我知道一些较旧的nginx版本已经知道了分块编码的问题......

如果您只使用本机SoapClient收到此错误:您是否使用跟踪参数启动SoapClient?因为我认为unkown错误有这样的消息:“错误获取http正文,无内容长度,连接已关闭或分块数据”:

try {
 $client=new SoapClient("your wsdl",array('trace'=>TRUE));
} catch(SoapFault $error) {
 print_r($error);
} 

如果您收到有关内容长度的错误,可以通过设置协议版本来修复它:

$client = new SoapClient("your wsdl", 
    array(
        'trace' => 1,
        'stream_context' => stream_context_create(array('http' => array('protocol_version' => 1.0) ) )
        )
    );

如果问题与其中一个服务器/客户端分块编码问题无关,请添加一些(服务器)信息。

答案 1 :(得分:1)

在soap服务器幻灯片的php.ini上尝试以下设置。确保根据您的方案调整参数。最有可能这些应该没问题。

post_max_size = 1024M         ; Maximum size of POST data that PHP will accept.

max_execution_time = 7200     ; Maximum execution time of each script, in seconds

max_input_time = 7200         ; Maximum amount of time each script may spend parsing request data

memory_limit =1024M           ; Maximum amount of memory a script may consume

file_uploads = On             ; Whether to allow HTTP file uploads.

upload_max_filesize = 1024M   ; Maximum allowed size for uploaded files.

答案 2 :(得分:1)

在服务器上,您可能需要添加:use_soap_error_handler();以使服务器返回error-repsonse并在其中包含错误消息,如果错误源自服务器。

这可能会帮助您获得比" SoapFault未知错误更好的错误消息"。

答案 3 :(得分:1)

    post_max_size = 1024M         ; Maximum size of POST data that PHP will accept.

max_execution_time = 7200     ; Maximum execution time of each script, in   seconds

max_input_time = 7200         ; Maximum amount of time each script may spend parsing request data

memory_limit =1024M           ; Maximum amount of memory a script may consume