Php 注意使用nusoap进行数组到字符串的转换

Php 注意使用nusoap进行数组到字符串的转换,php,web-services,nusoap,Php,Web Services,Nusoap,我正在用PHP开发一个web服务,使用nosoap。这是我的文件,webservice.php <?php require_once "nusoap/nusoap.php"; $namespace = "urn:mywsdl"; $server = new soap_server(); $server->configureWSDL('myWS', $namespace); $server->wsdl->schemaTargetNamespace = $namespace

我正在用PHP开发一个web服务,使用nosoap。这是我的文件,webservice.php

<?php
require_once "nusoap/nusoap.php";

$namespace = "urn:mywsdl";
$server = new soap_server();
$server->configureWSDL('myWS', $namespace);
$server->wsdl->schemaTargetNamespace = $namespace;

$server->wsdl->addComplexType('datosBasicos', 'complexType', 'struct', 'all', '', array(
    'codigo' => array(
        'name' => 'codigo',
        'type' => 'xsd:string'
    ),
    'nombre' => array(
        'name' => 'nombre',
        'type' => 'xsd:string'
    )
));


$server->wsdl->addComplexType('arraydatosBasicos', 'complexType', 'array', '', 'SOAP-ENC:Array', array(), array(
    array('ref' => 'SOAP-ENC:arrayType',
        'wsdl:arrayType' => 'tns:datosBasicos[]')
        ), 'tns:datosBasicos'
);


$server->register('saludar', array('nombre' => 'xsd:string'), array('return' => 'tns:arraydatosBasicos'), $namespace);

function saludar($nombre) {
    $array[] = array('codigo' => '123', 'nombre' => 'test');
    $array[] = array('codigo' => '5745', 'nombre' => 'probando');
    $datos[] = $array[1];
    return $datos;
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

但是,当我使用SOAPUI部署web服务时,会出现以下错误:

<b>Notice</b>:  Array to string conversion in <b>C:\xampp\htdocs\nusoap\nusoap\nusoap.php</b> on line <b>6132</b><br />
注意:第6132行C:\xampp\htdocs\nusoap\nusoap\nusoap.php中的数组到字符串转换

我做错了什么?

我遇到了一个类似的错误,我不得不在nusoap.php中注释一行。类似于:

//$this->debug("$k = $v<br>");
/$this->debug($k=$v
);
这对我来说很好

显然,它只用于调试,所以不要担心功能,因为如果您对行进行注释,它应该是相同的。我认为,当您创建复杂数据时(这意味着,在您的示例中,一个数组位于另一个数组中) nusoap无法打印它以进行调试


无论如何祝你好运。

我也有同样的问题。您可以将数据转换为字符串,以保留调试供进一步使用,并删除警告

搜索此代码

foreach(curl_getinfo($this->ch) as $k => $v){
    $err .= "$k: $v<br>";
}
$this->debug($err);
foreach(curl\u getinfo($this->ch)作为$k=>$v){
$err.=“$k:$v
”; } $this->debug($err);
换成这个

foreach(curl_getinfo($this->ch) as $k => $v){
    if(is_array($v)){
        $v = implode(" / ", $v);
    }
    $err .= "$k: $v<br>";
}
$this->debug($err);
foreach(curl\u getinfo($this->ch)作为$k=>$v){
if(is_数组($v)){
$v=内爆(“/”,$v);
}
$err.=“$k:$v
”; } $this->debug($err);
对于最新的nuSoap版本,以下选项将解决您的问题:

在nusoap.php中找到以下代码

$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]"); 
在第6132行或者这个号码附近

并对其进行评论

// $this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");

因为它只是为了调试目的。因此,不要担心任何功能问题。

我在nusoap-0.9.5(对于php5.3)中遇到了相同的问题,并且由于某些服务器头被作为空白数组传递而发生了错误。 因此,我添加了以下代码,发现它现在运行良好

if(is_array($v))
{
    $v = implode(",", $v );
}

在较新的nusoap版本中,它是:$this->debug(“序列化数组元素:$k,$v类型:$typeDef[arrayType]”);第6132行谢谢@user3980820您的解决方案已解决!过去几天我一直在挖这个!!:'-D