web-dev-qa-db-ja.com

cURLおよびPHP「1」を表示

データベースからサーバーを読み取り、cURLでサーバーに接続するPHPスクリプトがあります。サーバーはSQLクエリの結果で応答します。問題は、サーバーからの各応答後のスクリプトに番号が表示されることです。 1.出力は次のようになります。

サーバー1:いくつかの結果

1サーバー2:いくつかの結果

1サーバー3:いくつかの結果

1

データベースからサーバーを読み取り、それらに接続するコードは次のとおりです。

<?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++;
}

?>

1が「echo $ result;」で表示されていることを発見しました。応答を作成するためのコードは次のとおりです。

<?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);
?>

私を助けてください

23
Soriyyx

CURLOPT_RETURNTRANSFERオプションを使用します。それ以外の場合、cURLは自動的にデータをエコーし​​、trueを返します(これはエコーによって1に変換されます)。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

PHP.net は、

転送を直接出力するのではなく、curl_exec()の戻り値の文字列として返す場合はTRUE。

61
Emil Vikström

CURLOPT_RETURNTRANSFEまたはcurl_execを使用する必要があります。ステータスコードを返し、応答をstdoutに送信します。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
9
ThiefMaster

_CURLOPT_RETURNTRANSFER_は、転送を直接出力するのではなく、curl_exec()の戻り値の文字列として返すためにTRUEである必要があります。完全なドキュメントを読む php.net

_curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
_

またはあなたがすることができます

_curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
_
2
Manoj Kumar

使用する CURLOPT_RETURNTRANSFEまたは、ステータスコードを返し、応答をstdoutに送信します。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
0
Nishant

ユーザーがディーラーフィールドまたは$ deliフィールドを変更できる場合は、ここにXSSの脆弱性が保存されています。


 $dealer = $server[$i]['dealer'];
 echo $dealer . "<br />";
 echo $space . $deli[$i1]['id'] . " ";
 ...etc
 
</ code>

使用する


htmlentities($your fields)
 
</ code>