Я составляю список участников для игры и получаю некоторые данные из его истории.Сначала я получаю список имен, затем вставляю их в свою базу данных, затем я передаю их в cURL, чтобы получить статистику из его истории, и после этого я обновляю их в своей базе данных.
Кажется, проблема вКогда я делаю запрос cURL, мне удается обновить всего около 30 имен, прежде чем мой хост отобразит ошибку 503 (вероятно, из-за максимального времени выполнения).Тем не менее, я должен быть в состоянии обновить больше, чем это.Я бы сказал, что 100 - это минимум.
Я пытался оптимизировать код, чтобы он работал быстрее с некоторым успехом.Кажется, около 30 человек - это максимум, что я могу обновить в одном запросе.
Что-то не так с самим кодом, почему он так долго?Ниже приведена часть кода cURL, и она, вероятно, не самая красивая, которую вы видели.Я бы предположил, что cURL способен обрабатывать больше данных за один раз, и у меня было похожее решение раньше, без базы данных.Может ли причина быть https?Раньше это было не нужно, но теперь это так.
<?php
$ch = curl_init();
if(isset($_POST['submit'])){ //check if form was submitted
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
//get users
$stmt = $conn->prepare("SELECT m.name, m.id, m.group_id, p.field_1, g.prefix, g.suffix FROM members m INNER JOIN pfields_content p ON m.id = p.id INNER JOIN groups g ON g.g_id = m.group_id WHERE
m.group_id = 1
");
$stmt->execute();
$result = $stmt->get_result();
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
// add new member ID to database
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn->prepare("INSERT IGNORE INTO `table` (`member_id`, `name`, `dname`) VALUES ('".$row['member_id']."', '".$row['name']."', '".$row['field_1']."')");
$stmt->execute();
// dname
if($row['field_1'] != '' || $row['field_1'] != NULL) {
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_URL, "https://secure.runescape.com/m=hiscore_oldschool/index_lite.ws?player=".$row['field_1']);
curl_setopt($ch, CURLOPT_HEADER, 0);
// grab HTML
$data = curl_exec($ch);
$array = array();
$array = explode(',', $data);
//formula
if (!empty($array[15]) && (is_numeric($array[15]))) {
$level = ((round($array[13]/2, 0, PHP_ROUND_HALF_DOWN)+$array[9]+$array[7])/4) + (($array[3]+$array[5])*0.325);
$level = number_format($level, 2);
// if valid name, update
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn->prepare("UPDATE table SET
member_id = '".$row['id']."',
name = '".$row['name']."',
cb = '".$level."' WHERE member_id = ".$row['id']."");
$stmt->execute();
$conn->close();
}}}}