[英]How do i make this script run faster
<?php
header('Content-Type: text/html; charset=UTF-8');
$con = mysqli_connect("localhost", "*******", "******", '*****');
$result = mysqli_query($con, "SELECT * FROM mybb_streams");
while ($row = mysqli_fetch_array($result)) {
$json_array = json_decode(file_get_contents('https://api.twitch.tv/kraken/streams/' . strtolower($row['channel']) . '?client_id=' . $clientId), true);
if ($json_array['stream'] != NULL) {
// turn them into variables to prevent outside SQL injection
$displayname = mysqli_real_escape_string($con, $json_array['stream']['channel']['display_name']);
$title = mysqli_real_escape_string($con, $json_array['stream']['channel']['status']);
$game = mysqli_real_escape_string($con, $json_array['stream']['channel']['game']);
$viewers = mysqli_real_escape_string($con, $json_array['stream']['viewers']);
$preview = mysqli_real_escape_string($con, $json_array['stream']['preview']['medium']);
$followers = mysqli_real_escape_string($con, $json_array['stream']['channel']['followers']);
mysqli_query($con, "SET NAMES utf8mb4");
mysqli_query($con, "UPDATE mybb_streams SET `online` = '1', `title` = '$title', `viewers` = '$viewers', `game` = '$game', `preview` = '$preview', `followers` = '$followers' WHERE `channel` = '" . strtolower($row['channel']) . "'") or die("A MySQL error has occurred.<br />Your Query: UPDATE `streams` SET `online` = `1`, `title` = `$title`, `viewers` = `$viewers`, `game` = `$game`, `preview` = `$preview` WHERE channel = '" . strtolower($row['channel']) . "'<br /> Error: (" . mysqli_errno($con) . ") " . mysqli_error($con));
} else {
mysqli_query($con, "UPDATE mybb_streams SET `online` = '0', `viewers` = '0' WHERE `channel` = '" . strtolower($row['channel']) . "'") or die("A MySQL error has occurred.<br />Your Query: UPDATE streams SET `online` = '0', `viewers` = '0' WHERE `channel` = '" . strtolower($row['channel']) . "'<br /> Error: (" . mysqli_errno($con) . ") " . mysqli_error($con));
}
}
?>
這是我用來更新數據庫上流列表的代碼。 問題是,數據庫越來越大,此代碼開始運行緩慢+占用了我的帶寬。 該腳本每3分鍾自動運行一次,有時不會更新。 那么對此代碼有什么建議嗎? 這樣它可以運行得更快,更高效嗎?
我看到2個問題:
1個數據庫訪問
我認為您應該使用mysqli_multi_query而不是一個循環地進行查詢。
2 HTTP請求-file_get_content-
您只能使用此功能撥打一個電話
https://api.twitch.tv/kraken/streams/' . strtolower($row['channel']) . '?client_ids=' . implode(',',$array_clientId)
這樣,您可以一次獲取所有id的所有數據。
然后將數組解析為循環。
試試這個-> https://api.twitch.tv/kraken/streams/?client_ids=2,3,4是的,正在工作
$con = mysqli_connect("localhost", "*******", "******", '*****');
$result = mysqli_query($con, "SELECT * FROM mybb_streams");
$array_ids;
while ($row = mysqli_fetch_array($result)) {
$array_ids[] = $row;
}
$json_array = json_decode(file_get_contents('https://api.twitch.tv/kraken/streams/' . strtolower($row['channel']) . '?client_ids=' . implode(',',$array_ids)), true);
foreach($json_array as $user){ /* do your stuff */}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.