Цепочка рычагов является рядом функций в который каждый вызовы функции следующее. То, что является значительным о цепочке рычагов, - то, что программист может добавить другую функцию к цепочке во время выполнения. Один способ сделать это должно искать известное местоположение, где адрес первой функции в цепочке сохранен. Вы тогда сохраняете значение того указателя функции и перезаписываете значение в начальном адресе с адресом функции, которую Вы хотите вставить в цепочку рычага. Функция тогда вызвана, ведет свой бизнес и вызывает следующую функцию в цепочке (если Вы не решаете иначе). Естественно, существует много других способов создать цепочку рычагов от записи непосредственно в память к использованию средств метапрограммирования языков как Ruby или Python.
примером цепочки рычагов является способ, которым приложение MS Windows обрабатывает сообщения. Каждая функция в цепочке обработки или обрабатывает сообщение или отправляет ее в следующую функцию в цепочке.
Вы передаете заголовок $ в curl_getinfo ()
. Это должно быть $ curl
(дескриптор curl). Вы можете получить только filetime
, передав CURLINFO_FILETIME
в качестве второго параметра curl_getinfo ()
. (Часто filetime
недоступен, и в этом случае он будет сообщен как -1).
Ваш класс, однако, кажется расточительным, отбрасывая много информации, которая могла бы быть полезной. Вот еще один способ сделать это:
class URIInfo
{
public $info;
public $header;
private $url;
public function __construct($url)
{
$this->url = $url;
$this->setData();
}
public function setData()
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $this->url);
curl_setopt($curl, CURLOPT_FILETIME, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
$this->header = curl_exec($curl);
$this->info = curl_getinfo($curl);
curl_close($curl);
}
public function getFiletime()
{
return $this->info['filetime'];
}
// Other functions can be added to retrieve other information.
}
$uri_info = new URIInfo('http://www.codinghorror.com/blog/');
$filetime = $uri_info->getFiletime();
if ($filetime != -1) {
echo date('Y-m-d H:i:s', $filetime);
} else {
echo 'filetime not available';
}
Да, нагрузка на сервер будет меньше, поскольку он возвращает только заголовок HTTP (в конце концов, отвечая на запрос HEAD
). Насколько легче будет сильно варьироваться.
(1) Да. Запрос HEAD (который вы отправляете в этом случае) намного легче на сервере, потому что он возвращает только заголовки HTTP, в отличие от заголовков и содержимого, как стандартный запрос GET.
(2) Вам необходимо установить для параметра CURLOPT_RETURNTRANSFER значение true
перед вызовом curl_exec ()
для возврата содержимого вместо вывода на печать:
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
Это также должно заставить ваш класс работать правильно.
Вам нужно добавить
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
, чтобы вернуть заголовок вместо его печати.
Будет ли возвращение только заголовков более светлым на сервере, зависит от запущенного скрипта, но обычно быть.
Думаю, вам также нужно "filetime" вместо "datetime".