Как вызывать сообщения с PHP
У меня есть веб-сайт, который использует плагин WP Super Cache. Мне нужно перерабатывать кэш один раз в день, а затем мне нужно позвонить в 5 сообщений (URL-адреса), чтобы WP Super Cache снова поместил эти сообщения в кэш (кэширование занимает довольно много времени, поэтому я хотел бы, чтобы оно было предварительно кэшировано до прихода пользователей, чтобы им не пришлось ждать).
На моем хостинге я могу использовать CRON, но только для 1 звонка в час. И мне нужно позвонить сразу по 5 разным URL-адресам.
Возможно ли это сделать? Может быть, создать одну HTML-страницу с эти 5 постов в iframe? Сработает ли что-то подобное?
Изменить: Оболочка недоступна, поэтому мне приходится использовать PHP-скрипты.
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()
.
Пример использования 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
, но это вариант с низким воздействием.
Благодаря подсказке Аркаши я создал 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');