PHP -在数组中插入变量


PHP - Insert a variable into an array

假设我们有这个数组

$args = array('responseType' => 'Xml',
    'serverName' => 'vl18278.dinaserver.com',
    'command' => 'Vps_GetUsedSpace',
) ;

这个数组组成一个URL通过cURL发送。我需要用变量$vps替换vl18278.dinaserver.com,但是当我替换它时,URL在属性serverName的=符号之前显示%5B0%5D:

responseType=Xml&serverName%5B0%5D=vl18278.dinaserver.com&command=Vps_GetUsedSpace

如果没有替换vl18278.dinaserver.com,说明URL是正确的

我的代码有什么问题?为什么那些%5B0%5D进入我的URL?:(提前谢谢。

完整代码:

<?php 
$listavps = simplexml_load_file('servers.xml');

foreach ($listavps->servers->server as $vps) {
$urlApi = 'url.php';
$username = 'user';
$password = 'pass';
$args = array('responseType' => 'Xml',
    'serverName' => 'vl18278.dinaserver.com',
    'command' => 'Vps_GetUsedSpace',
) ;
$args = ( is_array ( $args ) ? http_build_query ( $args, '', '&' ) : $args );
$headers = array();
$handle = curl_init($urlApi);
if( $handle === false ) // error starting curl
{
    $error = '0 - Couldn''t start curl';
}
else
{
    curl_setopt ( $handle, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt ( $handle, CURLOPT_RETURNTRANSFER, true );
    curl_setopt ( $handle, CURLOPT_URL, $urlApi );
    curl_setopt( $handle, CURLOPT_USERPWD, $username.':'.$password );
    curl_setopt( $handle, CURLOPT_HTTPAUTH, CURLAUTH_BASIC );
    curl_setopt( $handle, CURLOPT_TIMEOUT, 60 );
    curl_setopt( $handle, CURLOPT_CONNECTTIMEOUT, 4); // set higher if you get a "28 - SSL connection timeout" error
    curl_setopt ( $handle, CURLOPT_HEADER, true );
    curl_setopt ( $handle, CURLOPT_HTTPHEADER, $headers );
    $curlversion = curl_version();
    curl_setopt ( $handle, CURLOPT_USERAGENT, 'PHP '.phpversion().' + Curl '.$curlversion['version'] );
    curl_setopt ( $handle, CURLOPT_REFERER, null );
    curl_setopt ( $handle, CURLOPT_SSL_VERIFYPEER, false ); // set false if you get a "60 - SSL certificate problem" error
    curl_setopt ( $handle, CURLOPT_POSTFIELDS, $args );
    curl_setopt ( $handle, CURLOPT_POST, true );
    $response = curl_exec ( $handle );
    echo $args;
    if ($response)
    {
        $response = substr( $response,  strpos( $response, "'r'n'r'n" ) + 4 ); // remove http headers
        // parse response

        $responseSimpleXml = simplexml_load_string($response);
        if( $responseSimpleXml === false )
        {
            // invalid xml response
        }
        else
        {
            // parse response
            $errorCode = $responseSimpleXml->response->responseCode ;
            echo $errorCode;
            if( $errorCode == 1000 ) // success
            {
                $usado = $responseSimpleXml->response->data->total_space;
                $capacidad = $responseSimpleXml->response->data->space_limit;
                echo 'Usado: '.$usado.'</br>Total: '.$capacidad.'.';
            }
            else // normal errors
            {
                $errors = $responseSimpleXml->response->errors;
                foreach( $errors->error as $error )
                {
                    // process error
                }
            }
        }

    }
    else // http response code != 200
    {
        $error = curl_errno ( $handle ) . ' - ' . curl_error ( $handle );
    }
    curl_close($handle);
}

}

?>

您的变量$server必须是一个数组,因为,一旦解码,%5B0%5D[0]

我的猜测是使用$server[0]而不是$server,无论你在哪里替换值。如果没有替换代码,很难确定。

我在使用$listavps变量之前使用rawurlencode解决了这个问题。

<?php 
$listavps = simplexml_load_file('servers.xml');
foreach ($listavps->servers->server as $key => $tag) {
$vps = rawurlencode ($tag);
$urlApi = 'url.php';
$username = 'user';
$password = 'pass';
$args = array('responseType' => 'Xml',
    'serverName' => $vps,
    'command' => 'Vps_GetUsedSpace',
) ;