<?php
require_once( dirname(__FILE__) . '/shared.php');
function tabelle_holen_hosters( $condition = "" ) {
global $wpdb;
$sql = "SELECT * FROM whatever" . $condition;
if( $table = $wpdb->get_results( $sql, ARRAY_A ) ) {
return $table;
} else {
echo "SQL ERROR in tabelle_holen()";
var_dump( $table );
return false;
}
}
$test = tabelle_holen_hosters( " WHERE working=1 AND alexacheck=0 LIMIT 200" );
?>
<table>
<tbody>
<?php
foreach ( $test as $row ){
$rank = (int) alexaRank( $row['hoster'] );
if ($rank == 0)
$rank = 999999999;
echo '<tr>';
echo '<td>' . $row['hoster_id'] . '</td>';
echo '<td>' . $row['hoster'] . '</td>';
echo '<td>' . $rank . '<td>';
echo '</tr>';
$wpdb->update(
'fhw_filehosters',
array(
'alexa' => $rank,
'alexacheck' => 1
),
array( 'hoster_id' => $row['hoster_id'] ),
array(
'%d',
'%d'
),
array( '%d' )
);
flush(); // <----- NOT working.
}
?>
</tbody>
</table>
<?php
function alexaRank( $url ) {
$request_url = "http://data.alexa.com/data?cli=10&url=".$url;
$xml = simplexml_load_file($request_url) or die("feed not loading");
return $xml->SD->POPULARITY['TEXT'];
}
私はこのスクリプトを持っています。 wordpress なしで wordpress データベース クラスを使用します。行数を 200 に制限しました。そうしないと、ページロードに何年もかかり、Alexa 関数からの xml の php 実行時間が非常に長くかかるなどの問題が発生するからです。そのデータベースでチェックする URL がたくさんあり、1 つのアクションですべてを更新したい、つまり 200 の制限を削除したいと考えています。一度に 50 を実行し、出力してから続行するようにするには、どうすればよいですか? アヤックス?どうすればいいですか?
更新 1:
コメントで言ったように、私は自分のウェブサイトでこれを(バックグラウンドで)実現する何かを探していますが、実際には、この時点でphpの実行時間制限になるかどうかはわかりませんが、「一度に」解決策についてはキューの最後で flush() をテストしましたが、機能していません!
しかし、質問を更新した今、ルーチン関数を探しています。答えは非常に一般的であり、私はその経験者ではありません。実際のコードをいくつか見てみたいと思います。それが多すぎて「プログラムを書いて」になりがちな場合は、時間をかけて掘り下げてこれを理解しなければなりません。次に、最も役立つ答えを受け入れます。