2012-06-06 19 views
16

Mam skrypt PHP, z którym chcę odczytać serwery z bazy danych i połączyć się z nimi za pomocą cURL. Serwery odpowiadają wynikami z zapytania sql. Problemem jest to, że skrypt po każdej odpowiedzi z serwera wyświetla numer 1. ouput wygląda następująco:cURL i PHP wyświetlające "1"

Serwer 1: niektóre wyniki

1Server 2: niektóre wyniki

1Server 3: niektóre wyniki

Oto kod, który odczytuje z bazy serwerów i łączy się z nimi:

<?php 

$mysql_id = mysql_connect('localhost', 'ms', 'pass'); 
mysql_select_db('servers', $mysql_id); 
mysql_query("SET NAMES utf8"); 

$query = "SELECT * FROM svr"; 
$result = mysql_query($query); 
$num = mysql_num_rows($result); 
while ($data = mysql_fetch_assoc($result)) 
{ 
    $server[] = $data; 
} 

mysql_close($mysql_id); 

$i = 0; 
while($i < $num) { 
    $dealer = $server[$i]['dealer']; 

    echo $dealer . "<br />"; 

    $data = "val=a"; //just for testing                  

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                  
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                      
     'Content-Type: text/html; charset=utf-8')                  
    );                                             

    $result = curl_exec($ch); 
    echo $result; 
    $i++; 
} 

?> 

Odkryłem, że 1 jest wyświetlane z "echo $ result;" a kod do tworzenia odpowiedź jest taka:

<?php 

$mysql_id1 = mysql_connect('localhost', 'ms', 'pass'); 
mysql_select_db('servers', $mysql_id1); 
mysql_query("SET NAMES utf8"); 

    $query2 = "SELECT * FROM data"; 
    $result2 = mysql_query($query2); 
    $num2 = mysql_num_rows($result2); 
    while ($data2 = mysql_fetch_assoc($result2)) 
    { 
     $deli[] = $data2; 
    } 
    $i1 = 0; 
    $space = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"; 
    while ($i1 < $num2) { 
     echo $space . $deli[$i1]['id'] . " "; 
     echo $deli[$i1]['artikel'] . " "; 
     echo $deli[$i1]['znamka'] . " "; 
     echo $deli[$i1]['model'] . " "; 
     echo $deli[$i1]['letnik'] . " "; 
     echo $deli[$i1]['cena'] . " € "; 
     echo $deli[$i1]['zaloga'] . "<br />"; 
     $i1++; 
    } 
    echo "<br />"; 
    mysql_close($mysql_id1); 
?> 

Proszę mi pomóc

Odpowiedz

47

Użyj opcji CURLOPT_RETURNTRANSFER. W przeciwnym razie cURL automatycznie wyświetli dane i po prostu zwróci true (który jest konwertowany na 1 przez echo).

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
7

Trzeba użyć CURLOPT_RETURNTRANSFE lub curl_exec Zwraca StatusCode i wysyła odpowiedź na standardowe wyjście:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
0

Zastosowanie CURLOPT_RETURNTRANSFE opcja jeszcze powróci do StatusCode i wysyła odpowiedź na standardowe wyjście:

curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, true);

1

CURLOPT_RETURNTRANSFER Powinni być TRUE powrót transferu jako ciąg wartości zwracanej curl_exec() zamiast wyprowadzania go directly.read pełną dokumentację php.net

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

czy można zrobić

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);