у меня такая проблема, import-RSS живёт какой-то своей жизнью. Импорт вставлен в crontab:
0 */1 * * * /usr/local/php5-clicgi-so/bin/php-cli -q /home/u29959/images.lab-pribor.ru/www/cron/import-rss.php > /dev/null 2>&1
но... Импорт новостей происходит с неопределёнными промежутками времени. Проверял по выдаче получается, что он то новые новости удаляет, то старые и в какой именно момент времени (точнее день) определить не возможно, и, тем более, по какой причине. Новости с сайта, с которого беру RSS добавляются каждый день, лимит сохранения 100 элементов. Код php:
<?php
ini_set('display_errors', 1);
/* Подключаем основные классы */
require_once(dirname(__FILE__) . '/../' . 'main_classes.php');
/* Загружаем модули */
$GLOBALS['kernel']->LoadModules();
// Идентификатор информационной системы, в которую помещаются элементы
$infsys_id = 32;
// Группа, в которую помещается новый элемент
$infgroup_id = 738;
// Список источников
$RssSourceTextList = 'http://www.i-mash.ru/rss.xml';
// Разделяем на список источников
$array_RssSourceTextList = explode("\n", $RssSourceTextList);
$rss = new RssRead();
$InformationSystem = & singleton('InformationSystem');
$DateClass = new DateClass();
$kernel = & singleton('kernel');
$count_import_item = 0;
$image_url = '';
$infsys_row = $InformationSystem->GetInformationSystem($infsys_id);
// Получаем список тэгов
foreach ($array_RssSourceTextList as $url)
{
$result = $rss->ReadRSS($url);
/* Цикл по полученным элементам */
for ($i = 0; $i < count($result['items']) - 1; $i++)
{
$count_result = $InformationSystem->GetExternalInformationSystemItem(array(
'information_items_name' => $result['items'][$i]['title'],
'information_systems_id' => $infsys_id));
/* Если не найдено элементов с таким же именем */
if (mysql_num_rows($count_result) == 0)
{
/* Формируем полный путь к источнику материала */
$link = $result['items'][$i]['link'];
/* Заголовок */
$title = $result['items'][$i]['title'];
$title_target = substr($title, 0, 60)."...";
/* Описание элемента */
$desc = $result['items'][$i]['desc'];
preg_match("!<img[^>]*\ssrc=[\"']?([^>\"'#\s]+)[\"']?[^>]*>!is",$desc,$matches);
preg_match("/ThumbBegin/is",$desc,$check);
if(!empty($check))
{
$desc = preg_replace('/<!--ThumbBegin(.*)ThumbEnd-->/is','',$desc);
}else
{
$desc = str_replace(to_str($matches[0]),'',$desc);
}
$image_url = to_str($matches[1]);
/* Тест элемента */
$text = $desc . "<p>Источник: <a target=\"_blank\" href=\"$link\">$title_target</a>";
/* Дата */
$date = $DateClass->DateUnixToSQL (strtotime ($result['items'][$i]['pubdate']));
if (!empty($text))
{
// КОД ДЛЯ ЗАГРУЗКИ ИЗОБРАЖЕНИЙ
$information_item_small_image = '';
$information_item_image = '';
if (isset($image_url))
{
$img = to_str($image_url);
$temp_file = tempnam(TMP_DIR, "TMP_");
if (@copy($img, $temp_file))
{
chmod($temp_file, CHMOD_FILE);
$param_img = array();
/* ---------------------------------- */
// Определяем расширение файла
$exp = strtolower($kernel->GetExtension($img));
$name = 'information_items_' . time() . $count_import_item . '.' . $exp;
$information_item_image = CMS_FOLDER . UPLOADDIR . 'news/world/big/' . $name;
$information_item_small_image = CMS_FOLDER . UPLOADDIR . 'news/world/small/' . 'small_' . $name;
// Путь к файлу-источнику большого изображения;
$param['path_source_big_image'] = $temp_file;
// Путь к файлу-источнику малого изображения;
$param['path_source_small_image'] = $temp_file;
//Оригинальное имя файла большого изображения
$param['original_file_name_big_image'] = '';
// Путь к создаваемому файлу большого изображения
$param['path_target_big_image'] = $information_item_image;
// Путь к создаваемому файлу малого изображения;
$param['path_target_small_image'] = $information_item_small_image;
// Оригинальное имя файла малого изображения
$param['original_file_name_small_image'] = $name;
// Использовать большое изображение для создания малого (true - использовать (по умолчанию), false - не использовать)
$param['use_big_image'] = true;
// Значение максимальной ширины большого изображения
$param['max_width_big_image'] = $infsys_row['information_systems_image_big_max_width'];
// Значение максимальной высоты большого изображения
$param['max_height_big_image'] = $infsys_row['information_systems_image_big_max_height'];
// Значение максимальной ширины малого изображения;
$param['max_width_small_image'] = $infsys_row['information_systems_image_small_max_width'];
// Значение максимальной высоты малого изображения;
$param['max_height_small_image'] = $infsys_row['information_systems_image_small_max_height'];
// Путь к файлу с "водяным знаком"
$param['watermark_file_path'] = '';
$result_img = $kernel->AdminLoadFiles($param);
if ($result_img['big_image'])
{
$information_item_image = basename($param['path_target_big_image']);
}
if ($result_img['small_image'])
{
$information_item_small_image = basename($param['path_target_small_image']);
}
@unlink($temp_file);
}
}
// Вставка элемента
$InformationSystem->InsertInformationItems(0, 0, $infsys_id,
$infgroup_id, $date, $title, $desc, 1, $text, $information_item_image, 0,
$_SERVER['REMOTE_ADDR'], '', 1, '', '', '', -1, array('information_items_small_image' =>
$information_item_small_image));
$count_import_item++;
}
}
}
}
$mysql = new MySQL();
$query = "SELECT count(*) as count FROM information_items_table WHERE information_groups_id = $infgroup_id";
$rez = $mysql->select($query);
if ($row = mysql_fetch_assoc($rez))
{
$count = $row['count']; // общее количество всех элементов
$count_del = $count - 100; // кол-во удаляемых минус 100, которые оставляем
echo "Общее количество всех элементов = ".$count = $row['count']."<br/>";
if($count < 100)
{
echo "Нет элементов для удаления!";
}else
{
echo "Удалено = ".$count_del = $count - 100;
}
if($count_del > 0)
{
$query = "SELECT * FROM information_items_table WHERE information_groups_id = $infgroup_id ORDER BY information_items_date ASC LIMIT $count_del";
$result_to_del = $mysql->query($query);
$path_item_image = CMS_FOLDER . UPLOADDIR;
while($row_to_del = mysql_fetch_assoc($result_to_del))
{
if(file_exists($path_item_image . $row_to_del['information_items_image']))
{
unlink($path_item_image . $row_to_del['information_items_image']);
}
else{
unlink($path_item_image . 'news/world/big/' . $row_to_del['information_items_image']);
}
if(file_exists($path_item_image . $row_to_del['information_items_small_image']))
{
unlink($path_item_image . $row_to_del['information_items_small_image']);
}
else{
unlink($path_item_image . 'news/world/small/' . $row_to_del['information_items_small_image']);
}
$query = "DELETE FROM information_items_table WHERE information_items_id = $row_to_del['information_items_id']";
$mysql->query($query);
}
}
}
$query = "SELECT * FROM information_items_table WHERE information_groups_id = $infgroup_id";
$rez = $mysql->select($query);
$fakeTAGS = array("\n","\r","<br />");
while($row=mysql_fetch_assoc($rez))
{
$text = str_replace($fakeTAGS, "",$row['information_items_description']);
$text1 = str_replace($fakeTAGS, "",$row['information_items_text']);
$itemsID = $row['information_items_id'];
$itemsName = $row['information_items_name'];
if(strpos($text,'<br />'))
{
$trans = array("<br />" => "");
$translate = strtr($text, $trans);
$translate1 = strtr($text1, $trans);
mysql_query("UPDATE information_items_table SET information_items_description='$translate', information_items_text='$translate1' WHERE information_items_id='$itemsID' AND information_items_name='$itemsName'");
}
}
?>
<h1>Импорт информационных элементов</h1>
<p>Проимпортировано <?php echo $count_import_item?> элементов</p>