提交文件到php soap服务器

提交文件到php soap服务器,php,file,soap,server,Php,File,Soap,Server,我请求帮助解决我遇到的一个问题。我试图使用php SOAP向服务器提交文件,但提交时出现以下错误: Fatal error: Uncaught SoapFault exception: [soap11env:Client.SchemaValidationError] :2:0:ERROR:SCHEMASV:SCHEMAV_ELEMENT_CONTENT: Element '{http://mutalyzer.nl/2.0/services}submitBatchJob': Missing chi

我请求帮助解决我遇到的一个问题。我试图使用php SOAP向服务器提交文件,但提交时出现以下错误:

Fatal error: Uncaught SoapFault exception: [soap11env:Client.SchemaValidationError] :2:0:ERROR:SCHEMASV:SCHEMAV_ELEMENT_CONTENT: Element '{http://mutalyzer.nl/2.0/services}submitBatchJob': Missing child element(s). Expected is ( {http://mutalyzer.nl/2.0/services}data ). in C:\xampp\htdocs\ngs\submit4.php:31 Stack trace: #0 C:\xampp\htdocs\ngs\submit4.php(31): SoapClient->__call('submitBatchJob', Array) #1 {main} thrown in C:\xampp\htdocs\ngs\submit4.php on line 31
WSDL描述如下所示:

submitBatchJob类型submitBatchJob

data type base64Binary
process - optional, nillable; type string
argument - optional, nillable; type string
email - optional, nillable; type string
submitBatchJobResponse类型submitBatchJobResponse

submitBatchJobResult - optional, nillable; type string

<xs:complexType name="submitBatchJob">
<xs:sequence>
<xs:element name="data" type="xs:base64Binary" />
<xs:element name="process" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="argument" type="xs:string" minOccurs="0" nillable="true" />
<xs:element name="email" type="xs:string" minOccurs="0" nillable="true" />
</xs:sequence>
</xs:complexType>
submitBatchJobResult-可选,可为零;类型字符串
下面是我的php脚本:

<?php
$URL = 'https://mutalyzer.nl/services/?wsdl';
?><!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Mutalyzer SOAP client</title>
</head>
<body>
<h1>Mutalyzer SOAP client</h1>
<?php
if (isset($_GET['data']) && $_GET['data']) {

    $variant = $_GET['data'];


    $_FILES['data']['name']=$_GET['data'];
    $filename = basename( $_FILES['data']['name']);
    $file = fopen($filename, "r");
    $handle = fread($file,filesize($filename));
    $data = base64_encode($handle);


    $NameChecker=$_GET['process'];
    echo '<h2>Result for '.htmlentities($variant).'</h2>';

   $options = array('features' => SOAP_SINGLE_ELEMENT_ARRAYS);

    $client = new SoapClient($URL);

    $result = $client->submitBatchJob($data, $NameChecker)
                  ->submitBatchJobResult;


print_r($result); 
}

?>

<h2>Submit job data file to MUTALYZER</h2>

<form action="" method="GET" enctype="multipart/form-data">
<p>
Input file:
</p>
<input name="data" type="file" id="data" />
<br/>
  Process :
<input type="text" size="10" name="process" id="process" value="NameChecker"/>
<br/>
  <input type="submit" name="upload" value="Submit" />
</form>

</body>
</html>

Mutalyzer SOAP客户端
Mutalyzer SOAP客户端
向MUTALYZER提交作业数据文件

输入文件:


过程:
有人知道我做错了什么以及如何纠正我的脚本吗?
非常感谢。

首先,您需要捕获该异常,包括:

 try {
   # some code here that causes a problem, hint: soap11env:Client.SchemaValidationError
    } catch (Exception $e) {
        echo $e->getMessage();
    }
其次,它告诉你错误在哪里:

Element '{http://mutalyzer.nl/2.0/services}submitBatchJob': Missing child element(s). Expected is ( {http://mutalyzer.nl/2.0/services}data ). 
而且:

in C:\xampp\htdocs\ngs\submit4.php:31 Stack trace: #0 C:\xampp\htdocs\ngs\submit4.php(31): SoapClient->__call('submitBatchJob', Array) #1 {main} thrown in C:\xampp\htdocs\ngs\submit4.php on line 31

首先,您需要捕获该异常,包括:

 try {
   # some code here that causes a problem, hint: soap11env:Client.SchemaValidationError
    } catch (Exception $e) {
        echo $e->getMessage();
    }
其次,它告诉你错误在哪里:

Element '{http://mutalyzer.nl/2.0/services}submitBatchJob': Missing child element(s). Expected is ( {http://mutalyzer.nl/2.0/services}data ). 
而且:

in C:\xampp\htdocs\ngs\submit4.php:31 Stack trace: #0 C:\xampp\htdocs\ngs\submit4.php(31): SoapClient->__call('submitBatchJob', Array) #1 {main} thrown in C:\xampp\htdocs\ngs\submit4.php on line 31

您看到他们的PHP客户端示例了吗@mkaatman,是的,我已经检查了他们的PHP客户端。一开始,我做了一些从他们的php客户端得到启发的事情。但是,数组只获取数据文件的最后一行。WDSL语句数据必须是base64Binary,这就是我更改源代码的原因。您看到他们的PHP客户端示例了吗@mkaatman,是的,我已经检查了他们的PHP客户端。一开始,我做了一些从他们的php客户端得到启发的事情。但是,数组只获取数据文件的最后一行。WDSL语句数据必须是base64Binary,这就是我更改源代码的原因。我添加了异常,我有以下错误:
:2:0:error:SCHEMASV:SCHEMAV\u ELEMENT\u CONTENT:ELEMENT'{http://mutalyzer.nl/2.0/services}submitBatchJob”:缺少子元素。预计为({http://mutalyzer.nl/2.0/services}数据)。
但我不明白我做错了什么,我也试着这样做,但它只需要我的csv文件的最后一行:
$options=array('features'=>SOAP\u SINGLE\u ELEMENT\u array)$client=newsoapclient($URL$options)$数据=数组();虽然(!feof($handle)){$data=fgetcsv($handle,0);$result=$client->submitBatchJob(数组('data'=>$data[0],'process'=>$NameChecker))->submitBatchJobResult;print(r(数组('data'=>$data,'process'=>$NameChecker));}
我还没有时间阅读这些文档,但是看起来soap服务器需要一些base64二进制代码
https://mutalyzer.nl/soap-api#op.submitBatchJob
您正在提交一个数组。如果它接受数组,它会请求一些子元素,因此您的数组可能需要是多维的?thx供您回复。我找到了解决办法。我喜欢这样:
$handle=fread($file,filesize($filename))$数据=数组();$data=$handle它工作:)我添加了异常,我有以下错误:
:2:0:error:SCHEMASV:SCHEMAV\u ELEMENT\u CONTENT:ELEMENT'{http://mutalyzer.nl/2.0/services}submitBatchJob”:缺少子元素。预计为({http://mutalyzer.nl/2.0/services}数据)。
但我不明白我做错了什么,我也试着这样做,但它只需要我的csv文件的最后一行:
$options=array('features'=>SOAP\u SINGLE\u ELEMENT\u array)$client=newsoapclient($URL$options)$数据=数组();虽然(!feof($handle)){$data=fgetcsv($handle,0);$result=$client->submitBatchJob(数组('data'=>$data[0],'process'=>$NameChecker))->submitBatchJobResult;print(r(数组('data'=>$data,'process'=>$NameChecker));}
我还没有时间阅读这些文档,但是看起来soap服务器需要一些base64二进制代码
https://mutalyzer.nl/soap-api#op.submitBatchJob
您正在提交一个数组。如果它接受数组,它会请求一些子元素,因此您的数组可能需要是多维的?thx供您回复。我找到了解决办法。我喜欢这样:
$handle=fread($file,filesize($filename))$数据=数组();$data=$handle有效:)