0

私はphpがまったく初めてです。ページAにいる間にA.phpとB.phpがページBを実行できるようにする2つのページがありました。そのために、ソケット接続を作成し、ページBを実行できましたが、問題は、オブジェクトの配列を送信するときですページ B.page A には、配列にリストされている最初のオブジェクトのみが送信され、配列の他の値は何もありませんでした。ここには、A.php のコードがあります。

$arr = array("message" => $pushData,
  "messageType" => $messageType,
  "displayGroupID" => $displayGroupID,
  "db"=>$db);
$fp1 = $this->JobStartAsync('localhost', 'B.php', $arr);
$r1 = $this->JobPollAsync($fp1);

function JobStartAsync($server, $url, $data, $port=80,$conn_timeout=10, $rw_timeout=86400)
{
    $errno = '';
    $errstr = '';
    $data = http_build_query($data);

    set_time_limit(0);

    $fp = fsockopen($server, $port, $errno, $errstr, $conn_timeout);

    if (!$fp)
    {
        echo "$errstr ($errno)<br />\n";
        return false;
    }

    $out = "POST $url HTTP/1.1\r\n";
    $out .= "Host: $server\r\n";
    $out .= "Content-type: application/x-www-form-urlencoded\r\n";
    $out .= "Content-length: ". strlen($data) ."\r\n";
    $out .= "Connection: Close\r\n\r\n";
    $out .= "$data";
    stream_set_blocking($fp, false);
    stream_set_timeout($fp, $rw_timeout);
    fwrite($fp, $out);
    //fwrite($fp, $data);
    return $fp;
}

function JobPollAsync(&$fp)
{
    if ($fp === false)
        return false;

    if (feof($fp))
    {
        fclose($fp);
        $fp = false;
        return false;
    }

    return fread($fp, 10000);
}

IN B.php

fileWrite ($_POST['displayGroupID'],$_POST['message'],$_POST['messageType']);

配列の最初の要素としてリストされているため、「メッセージ」のみを取得します

4

1 に答える 1

0

CURLを見てください。これはあなたが必要としているものであり、他の誰もが使用しています。

ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://www.example.com");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
        "postvar1=value1&postvar2=value2&postvar3=value3");

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec ($ch);

curl_close ($ch);

非同期のバリエーションについては、以前に回答された同様の質問を見てください - How do I make an asynchronous GET request in PHP?

于 2012-10-09T05:51:59.710 に答える