2014-12-27 2 views
0

Я пытаюсь получить данные монеты этого сайта: http://www.tf2wh.com.Вопрос о производительности PHP

С помощью этого скрипта:

$name = $_POST["item"]; 

$url = file_get_contents("http://www.tf2wh.com/allitems"); 
$dom = new DOMDocument(); 
@$dom->loadHTML($url); 
$dom->saveHTML(); 

$code = ""; 
$xpath = new DOMXPath($dom); 
foreach($xpath->query('//div[contains(attribute::class, "entry qual")]') as $e) { 
    $code .= $e->nodeValue; 
} 
$code = substr($code,strpos($code,$name)-30,30); 
$code = explode("(",$code); 
$coins = ""; 
for($i = 0; $i < strlen($code[0]); $i++){ 
    if(is_numeric($code[0][$i])){ 
     $coins .= $code[0][$i]; 
    } 
} 
echo $coins; 

Он отлично работает, но есть две проблемы. Во-первых, его медленное время, время между запросом и ответом составляет около 15-30 секунд. Во-вторых, где-то эта ошибка возникает:

Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\steammarket\getCoins.php on line 6

Как исправить эту проблему с проблемой производительности.

+0

проверили Вы имеете ли они API, так что вы не должны царапать веб-страницы? – Barmar

+0

Вы проверили, какая линия медленная? Используйте некоторый инструмент профилирования? Или распечатать временную метку? –

+0

@Barmar Нет, нет API для получения данных о монете. – Nimmi

ответ

1

Подключить сайт медленно. Первый PHP-код set_time_limit (0); или ini_set ('max_execution_time', 300); // 300 секунд = 5 минут

<?php 
set_time_limit(0); 
$name = $_POST["item"]; 

$url = file_get_contents("http://www.tf2wh.com/allitems"); 
$dom = new DOMDocument(); 
@$dom->loadHTML($url); 
$dom->saveHTML(); 

$code = ""; 
$xpath = new DOMXPath($dom); 
foreach($xpath->query('//div[contains(attribute::class, "entry qual")]') as $e) { 
    $code .= $e->nodeValue; 
} 
$code = substr($code,strpos($code,$name)-30,30); 
$code = explode("(",$code); 
$coins = ""; 
for($i = 0; $i < strlen($code[0]); $i++){ 
    if(is_numeric($code[0][$i])){ 
     $coins .= $code[0][$i]; 
    } 
} 
echo $coins; 
+0

Спасибо, много, он отлично работает :) – Nimmi