Гороскоп на каждый день




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

17 Comments

  1. AndrewEv

    Троян-ДаунЛоадер в файле. Автор, извинитесь перед нами, пожалуйста

    Reply
  2. Noy

    (1) Антивирус свой воспитывай! Ниче там нет.

    Reply
  3. 1v7

    Вирусов нет! NOD32

    А гороскоп прикольный+

    Reply
  4. 1v7

    только какие то теги в конце вылазят…

    *****************************************************

    Гороскоп для знака Рак на 21 января 2010

    Если утром вам покажется, что цель недостижима, не паникуйте.

    Возможно, такое действие на вас оказывает критика со стороны другого человека (например, вашего партнера по делам, товарища по учебе, консультанта по важным вопросам).

    Любое высказанное вам в лицо мнение обязательно примите во внимание, так как в прямоте и откровенности вашим оппонентам не откажешь.

    Но как только обсуждение будет окончено, суммируйте сказанное и немедленно действуйте.

    Если вы будете смелее и не станете сидеть сложа руки, то к вечеру сможете многого добиться.

    ********************************horoscopes.rambler.ru

    Reply
  5. zaic

    Касперский не дал скачать (базы в нем сегодняшние).

    Reply
  6. mdbm

    Странно, а вирус обнаруживается при запуске обработчика или при скачивании ?

    Reply
  7. mdbm

    Да, действительно Касперский выдает вирус, а на НОД32 тишина.

    Но глядя на рисунок видно, что вирус обнаружен в тексте кода 1С.

    Вы можете открыть текст и убедится, что под вирусом Касперский воспринимает код:

    Скрипт = СоздатьОбъект(«MSScriptControl.ScriptControl»);
    Скрипт.language = «vbscript»;
    x = CreateObject(«Microsoft.XMLHTTP»);
    x.Open(«GET», Адрес, 0,»»,»»);
    x.Send();
    s = CreateObject(«ADODB.Stream»);
    s.Mode = 3;
    s.Type = 1;
    s.Open();
    Скрипт.AddObject(«s»,s);
    Скрипт.AddObject(«x»,x);
    Скрипт.Eval(«s.Write(x.responseBody)»);
    s.SaveToFile(ФайлРезультата, 2);
    

    Показать

    и в отчете касперского так и написано

    2010_ПолучитьГороскоп.ert//1С ProgramText

    Reply
  8. mdbm

    теги исправил

    Reply
  9. AndrewEv

    прикольно, Касперский пошёл в 1C…

    Reply
  10. pupkinSana

    Да троянчик есть здесь…

    Reply
  11. mdbm

    Я написал письмо в лабораторию Касперского.

    Посмотрим что они ответят.

    Вот текст письма:

    Добрый день.
    Я написал программу — внешнюю обработку для программы 1С.
    Выложил ее на сайте.
    При попытке скачать, антивирус выдает сообщение о вирусе.
    
    В тексте программы есть такой код:
    Скрипт = СоздатьОбъект(«MSScriptControl.ScriptControl»);
    Скрипт.language = «vbscript»;
    x = CreateObject(«Microsoft.XMLHTTP»);
    x.Open(«GET», Адрес, 0,»»,»»);
    x.Send();
    s = CreateObject(«ADODB.Stream»);
    s.Mode = 3;
    s.Type = 1;
    s.Open();
    Скрипт.AddObject(«s»,s);
    Скрипт.AddObject(«x»,x);
    Скрипт.Eval(«s.Write(x.responseBody)»);
    s.SaveToFile(ФайлРезультата, 2);
    
    Данный скрипт открывает страницу определенного сайта и сохраняет ее в текстовый файл.
    
    Не могли бы вы объяснить почему данный текст программы блокируется антивирусом как вирус и мешает пользователям скачать мою обработку ?
    
    При этом НОД32 ДокторВеб молчат.
    

    Показать

    Ваш запрос успешно отправлен в Департамент исследований и разработки Лаборатории Касперского.

    ждем….

    Reply
  12. mdbm

    пока ответа не пришло

    Reply
  13. simuljakr1

    Нашел небольшой косячок 🙂

    «Козерога» неправильно обрабатывает…

    Потому что «козерожье» условие никогда не выполняется:

     ИначеЕсли (ТекДата>=Дата(«22.12.»+Год)) И (ТекДата<=Дата(«20.01.»+Год))  Тогда
    Возврат ?(Язык=»ru»,»Козерог»,»capricorn»);

    Но в целом прикольная обработка +

    Reply
  14. 1v7

    перестал работать… дело в Рамблере

    Reply
  15. mdbm

    (14) 1v7, Обновил ) Продолжаем получать звёздные подсказки ))

    Reply
  16. 1v7

    (15) спасибо!!! а то без вгляда в будущее по утрам тяжело жить))

    единственное, для комфорта, надо рабочие сообщения «зарисовать»:

    //Сообщить(«НачальнаяСтрока = «+НачальнаяСтрока);

    //Сообщить(«КонечнаяСтрока = «+КонечнаяСтрока);

    Reply
  17. 1v7

    как писал simuljakr1, есть косячок. я бы так поправил:

    Функция глПолучитьЗнакЗодиака(ТекДата,Язык=»ru») Экспорт

    Год=Прав(ДатаГод(ТекДата),2);

    Если (ТекДата>=Дата(«21.03.»+Год)) И (ТекДата<=Дата(«20.04.»+Год)) Тогда

    Возврат ?(Язык=»ru»,»Овен»,»aries»);

    ИначеЕсли (ТекДата>=Дата(«21.04.»+Год)) И (ТекДата<=Дата(«20.05.»+Год)) Тогда

    Возврат ?(Язык=»ru»,»Телец»,»taurus»);

    ИначеЕсли (ТекДата>=Дата(«21.05.»+Год)) И (ТекДата<=Дата(«21.06.»+Год)) Тогда

    Возврат ?(Язык=»ru»,»Близнец»,»gemini»);

    ИначеЕсли (ТекДата>=Дата(«22.06.»+Год)) И (ТекДата<=Дата(«22.07.»+Год)) Тогда

    Возврат ?(Язык=»ru»,»Рак»,»cancer»);

    ИначеЕсли (ТекДата>=Дата(«23.07.»+Год)) И (ТекДата<=Дата(«23.08.»+Год)) Тогда

    Возврат ?(Язык=»ru»,»Лев»,»leo»);

    ИначеЕсли (ТекДата>=Дата(«24.08.»+Год)) И (ТекДата<=Дата(«23.09.»+Год)) Тогда

    Возврат ?(Язык=»ru»,»Дева»,»virgo»);

    ИначеЕсли (ТекДата>=Дата(«23.09.»+Год)) И (ТекДата<=Дата(«23.10.»+Год)) Тогда

    Возврат ?(Язык=»ru»,»Весы»,»libra»);

    ИначеЕсли (ТекДата>=Дата(«24.10.»+Год)) И (ТекДата<=Дата(«22.11.»+Год)) Тогда

    Возврат ?(Язык=»ru»,»Скорпион»,»scorpio»);

    ИначеЕсли (ТекДата>=Дата(«23.11.»+Год)) И (ТекДата<=Дата(«21.12.»+Год)) Тогда

    Возврат ?(Язык=»ru»,»Стрелец»,»sagittarius»);

    ИначеЕсли (ТекДата>=Дата(«21.01.»+Год)) И (ТекДата<=Дата(«18.02.»+Год)) Тогда

    Возврат ?(Язык=»ru»,»Водолей»,»aquarius»);

    ИначеЕсли (ТекДата>=Дата(«19.02.»+Год)) И (ТекДата<=Дата(«20.03.»+Год)) Тогда

    Возврат ?(Язык=»ru»,»Рыба»,»pisces»);

    ИначеЕсли (ТекДата>=Дата(«22.12.»+Год)) ИЛИ (ТекДата<=Дата(«20.01.»+Год)) Тогда

    Возврат ?(Язык=»ru»,»Козерог»,»capricorn»);

    КонецЕсли;

    КонецФункции

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *