1

cURL を使用してゲームで使用可能な名前をチェックするツールがあり、チェックを実行しているユーザーに使用可能な名前を表示し、取得した名前を却下する必要があります。基本的に、名前のリストに対してテストを実行すると、それらすべてがチェックされ、使用可能の場合は 0、使用可能の場合は 1 のいずれかでデータベースに挿入されます。

現時点では、チェックが完了するまでページはロードされません。その後、それらはすべてデータベースにまとめて挿入されます。チェックのステータスを動的に表示し (つまり、「チェックされた名前 405/4938」)、名前がチェックされている間は読み込みイメージを表示し、チェックされているときに利用可能な名前も表示したいと思います。最後に、読み込み中の画像を削除し、使用可能な名前の完全なリストを取得します。

これを行うにはどうすればよいですか?jQuery/AJAX についてはよくわかりません。それらが最後にまとめて表示されるのは、今のところ理想的ではありません。

これは名前チェック スレッドのコードです。

<?php
$query = mysql_query("SELECT * FROM `lists` WHERE id = '$id'");
while($row = mysql_fetch_assoc($query)) {

    $id = $row['id'];
    $list = $row['list'];

    foreach(explode("\n", $list) as $listItem) {
        checkname_RS(trim($listItem));
    }
}

チェック用の機能です。

<?php   
function checkname_RS($name) {

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://services.runescape.com/m=hiscore/compare.ws?user1=" . $name);
    curl_setopt($ch, CURLOPT_HTTPGET, TRUE); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $output = curl_exec($ch);


    if (stristr($output,"Skill Stats")) {
        mysql_query("INSERT INTO names (name, plat, status) VALUES ('$name', 'Runescape', '0')") or die(mysql_error());
    }
    if (stristr($output,"Member Rankings")) {
        mysql_query("INSERT INTO names (name, plat, status) VALUES ('$name', 'Runescape', '1')") or die(mysql_error());
    }

    curl_close($ch);

}
4

3 に答える 3

0

これを行う方法の 1 つは、ワーカー (ジョブを完了するタスク) とクライアントを備えたJob Queue Serverを使用して、このワーカーにプロセスの完了について尋ねることです。多くの人の1人はGearmanです。

別の方法としては、cURL を使用して自分でタスクを実行しますが、完了を待たずに set_time_limit(0) を使用し、ジョブのステータスを mysql テーブルに保存するなどして自分でステータスをクエリします。

マルチスレッドの例:
https://github.com/petewarden/ParallelCurl
http://semlabs.co.uk/journal/object-directional-curl-class-with-multi-threading

暗黙的なフラッシュは常に機能するとは限りません。

うまくいきますように!

于 2013-07-23T19:00:04.960 に答える