Заголовок только извлечение в php через завихрение

Цепочка рычагов является рядом функций в который каждый вызовы функции следующее. То, что является значительным о цепочке рычагов, - то, что программист может добавить другую функцию к цепочке во время выполнения. Один способ сделать это должно искать известное местоположение, где адрес первой функции в цепочке сохранен. Вы тогда сохраняете значение того указателя функции и перезаписываете значение в начальном адресе с адресом функции, которую Вы хотите вставить в цепочку рычага. Функция тогда вызвана, ведет свой бизнес и вызывает следующую функцию в цепочке (если Вы не решаете иначе). Естественно, существует много других способов создать цепочку рычагов от записи непосредственно в память к использованию средств метапрограммирования языков как Ruby или Python.

примером цепочки рычагов является способ, которым приложение MS Windows обрабатывает сообщения. Каждая функция в цепочке обработки или обрабатывает сообщение или отправляет ее в следующую функцию в цепочке.

59
задан Paul Wagland 13 May 2012 в 08:10
поделиться

3 ответа

Вы передаете заголовок $ в 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 ). Насколько легче будет сильно варьироваться.

50
ответ дан 24 November 2019 в 18:19
поделиться

(1) Да. Запрос HEAD (который вы отправляете в этом случае) намного легче на сервере, потому что он возвращает только заголовки HTTP, в отличие от заголовков и содержимого, как стандартный запрос GET.

(2) Вам необходимо установить для параметра CURLOPT_RETURNTRANSFER значение true перед вызовом curl_exec () для возврата содержимого вместо вывода на печать:

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

Это также должно заставить ваш класс работать правильно.

15
ответ дан 24 November 2019 в 18:19
поделиться

Вам нужно добавить

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

, чтобы вернуть заголовок вместо его печати. ​​

Будет ли возвращение только заголовков более светлым на сервере, зависит от запущенного скрипта, но обычно быть.

Думаю, вам также нужно "filetime" вместо "datetime".

4
ответ дан 24 November 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: