Я только что запустил небольшую библиотеку, которая должна будет просматривать скриншоты с различных URL и искать указанные строки. Чтобы повысить производительность, я хочу кэшировать содержимое найденной страницы (на время запроса, поэтому в памяти).
У меня сейчас есть это:
class Scraper {
private $CI;
private $Cache;
function __construct() {
$this->CI =& get_instance();
$Cache = array();
}
public function GetPage($Url) {
if(!isset($Cache[$Url])) {
dump("Retrieving");
$Cache[$Url] = "DATA";//file_get_contents($Url);
}
return $Cache[$Url];
}
public function FindString($Url, $String) {
$Contents = $this->GetPage($Url);
$Ret = (strpos(strtolower($Contents), strtolower($String)) !== false);
return $Ret;
}
}
Примечание: для повышения производительности при отладке я просто помещаю «DATA» в кеш, а не извлекаю страницу.
Теперь у меня есть цикл, который многократно вызывает FindString()
с тем же URL.
Я ожидаю, что первый вызов выведет «извлечение» и после этого ничего больше не увидит. На самом деле, я вижу «извлечение» неоднократно.
Я подозреваю, что у меня проблема с областью видимости где-то - либо сама библиотека не является одноэлементной, поэтому каждый вызов FindString
достигает уникального экземпляра - либо переменная Cache
переинициализируется каким-то образом.
Может кто-нибудь предложить следующие шаги для отладки.
(dump()
просто форматирует вещи для меня)