2016-11-10 1 views
0

に変数を挿入しますが、我々はこの配列は、cURLの経由で送信するURLを構成し、この配列PHP - 配列

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

を持っていると言います。私は、変数$ 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); 
} 


} 


?> 
+1

この配列が関数で処理されているためでurlencode – Robert

+0

http://stackoverflow.com/questions/16613015/what-would-cause-5b05d-to-be-added-to-the-url –

+3

提示してくださいあなたの_exact_コード。 – arkascha

答えて

0

私はこれを$ listavps variaでrawurlencodeを使って解決しました。それを使用する前にble。おそらく

<?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', 
) ; 
0

あなたの変数$server一度デコードし、ので、配列でなければなりません、%5B0%5D[0]ある

私の推測では、代わりの$server[0]を使用することです。 $serverどこの値を置き換えます。置換コードがなければ、それは決定するのが難しいです。

+0

私はあなたの提案を試みましたが、それは変わりません。私はちょうどあなたが見たい場合は、質問に完全なコードを入れた。 –

+0

あなたのコードで 'vl18278.dinaserver.com'をどこに置き換えるかわかりません。今のところ、 'echo $ args;'は 'responseType = Xml&serverName = vl18278.dinaserver.com&command = Vps_GetUsedSpace'を返しますので、問題はないようです。 – roberto06

+0

私はその文字列を置き換える必要があります。 $ server = '$ server'、>'command' => 'Vps_GetUsedSpace'、 ); $ args = array( 'responseType' => 'Xml'、 'serverName' => –