Как вызывать сообщения с PHP


У меня есть веб-сайт, который использует плагин WP Super Cache. Мне нужно перерабатывать кэш один раз в день, а затем мне нужно позвонить в 5 сообщений (URL-адреса), чтобы WP Super Cache снова поместил эти сообщения в кэш (кэширование занимает довольно много времени, поэтому я хотел бы, чтобы оно было предварительно кэшировано до прихода пользователей, чтобы им не пришлось ждать).

На моем хостинге я могу использовать CRON, но только для 1 звонка в час. И мне нужно позвонить сразу по 5 разным URL-адресам.

Возможно ли это сделать? Может быть, создать одну HTML-страницу с эти 5 постов в iframe? Сработает ли что-то подобное?

Изменить: Оболочка недоступна, поэтому мне приходится использовать PHP-скрипты.

Author: Pupik, 2015-06-15

3 answers

Самый простой способ сделать это в PHP - использовать file_get_contents() (fopen() также работает), если на вашем сервере включена оболочка HTTP-потока :

<?php
$postUrls = array(
    'http://my.site.here/post1',
    'http://my.site.here/post2',
    'http://my.site.here/post3',
    'http://my.site.here/post4',
    'http://my.site.here/post5',
);

foreach ($postUrls as $url) {
    // Get the post as an user will do it
    $text = file_get_contents();
    // Here you can check if the request was successful
    // For example, use strpos() or regex to find a piece of text you expect
    // to find in the post

    // Replace 'copyright bla, bla, bla' with a piece of text you display
    // in the footer of your site
    if (strpos($text, 'copyright bla, bla, bla') === FALSE) {
        echo('Retrieval of '.$url." failed.\n");
    }
}

Если file_get_contents() не удается открыть URL-адреса на вашем сервере (некоторые провайдеры ограничивают это поведение), вы можете попробовать использовать curl:

function curl_get_contents($url)
{
    $ch = curl_init($url);
    curl_setopt_array($ch, array(
        CURLOPT_CONNECTTIMEOUT => 30,        // timeout in seconds
        CURLOPT_RETURNTRANSFER => TRUE,      // tell curl to return the page content instead of just TRUE/FALSE
    ));

    $text = curl_exec($ch);
    curl_close($ch);

    return $text;  
}

Затем используйте функцию curl_get_contents(), указанную выше, вместо file_get_contents().

 2
Author: axiac, 2015-06-15 16:49:29

Пример использования PHP без создания запроса cURL.

Используя PHP shell exec, вы можете иметь чрезвычайно легкую функцию, например:

$siteList = array("http://url1", "http://url2", "http://url3", "http://url4", "http://url5");

foreach ($siteList as &$site) {
    $request = shell_exec('wget '.$site);
}

Теперь, конечно, это не самый краткий ответ и не всегда хорошее решение Кроме того, если вы действительно хотите что-то от ответа, вам придется работать с ним по-другомуcURL, но это вариант с низким воздействием.

 2
Author: Pogrindis, 2015-06-15 16:43:08

Благодаря подсказке Аркаши я создал PHP-страницу, которую я вызываю из CRON. Эта страница содержит простую функцию с использованием cURL:

function cache_it($Url){

  if (!function_exists('curl_init')){
     die('No cURL, sorry!');
  }

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $Url);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_TIMEOUT, 50); //higher timeout needed for cache to load

  curl_exec($ch); //dont need it as output, otherwise $output = curl_exec($ch);

  curl_close($ch);
}

cache_it('http://www.mywebsite.com/url1');
cache_it('http://www.mywebsite.com/url2');
cache_it('http://www.mywebsite.com/url3');
cache_it('http://www.mywebsite.com/url4');
 0
Author: Pupik, 2015-06-15 16:54:39