<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Новое поколение корчагинцев: два! три замеса в смену!!!
😉
расширил статью комментариям в основном источнике на «вопли» с мисты 🙂
Очень огорчает большое количество ошибок в текстах на сайте автора — такое впечатление что после набора этот текст не читали ни разу…
А сам материал полезный.
(3) материал не коммерческий, много недоделок не только в этом плане, еще бы в одном стиле все оформить, систематизировать….
любой желающий может помочь :)))
(4) я могу поправить грамматику, орфографию и стилистику. Имеется большой опыт разработки сайтов. Вот только как это технически организовать предлагаешь?
в личку написал
У нас был не самые мощный сервер IBM, стойкой. Вначале было все отлично. Работали без проблем. После 1.5 года начал глючить. В день по три раза бывало перезагружался. Оказалось охлаждался плохое было. Решили эту проблему, установив другую систему охлаждения в корпус. Через 3 года работы, отказал RAID-контроллер. Оказалось контроллер вшит в материнскую плату, и значит придется менять мать. А такую модель найти довольно трудно. Отдали в независимый сервис центр, там что-то подшаманили. Заработало. Уф…
В срочном порядке купили другой с отдельным RAID-контроллером. И базы перенесли на новый. А IBM доживает свою жизнь на мелких задачах.
Рассказал свою историю. Может сейчас делают уже другие сервера, уже с учетом прошлых ошибок.
(7) можно узнать модельку железки? 🙂
(8) Из IBM, HP и самосбора из запчастей INTEL, компанией, имеющей статус Intel Channel Partner Premier Membe.
Работают без проблем, без глюков с железом, в любых условиях только эти серваки самосборы. 🙂 Организация «ТИМ Компьютерс»
Хотя один раз они лохонулись с рабочей станцией. 🙂
(9) как бы на вас не набросились, как на меня за пиар :)))
мне кажеться, тут надо просто подходить из той точки зрения, что все вендоры вообщем то закупаются в одном месте (микросхемы и т.п.), не такие и уж различия большие,
ломается любая техника, куда важнее сервис (ремонт) и его качество
а что ему лучше, пусть каждый делает выбор самостоятельно
(10) Согласен, но зависит еще от того, как проводят предпродажную подготовку. В одних просто собирают и выдают, в других еще несколько дней тестируют железку. Если удастся, то лучше заглянуть в их сборочный цех, прежде чем заказывать не из дешевых железок.
По-этому, на мой взгляд, многие считают что лучше покупать брендовое железо. Есть хоть какая-то гарантия, что в трудный момент не бросят с издыхающим сервером.
Может это правильно, у каждого правда своя :))))
к сожалению, мой опыт показывает, что самосбор доставляет проблем на порядок больше чем тот же HP или IBM (там тоже не дураки работают), а наши российские фирмы еще далеки от идеала, что называется «тестирование железок», уж молчу про то, как самосборные сервера плюют на энергопотребление, в этом смысле они чем то напоминают машины стритрэйсеров — ездят хоть и быстро, но понятие «экономии топлива» пустой звук
добавил на основной странице возможность проголосовать за «адекватность» железок
В дополнение к комменту об отдельном (неинтегрированном) RAID контроллере.
Я предпочитаю иметь не просто неинтегрированный RAID.
Я за то, чтобы иметь два идентичных контроллера для возможности спасения фирмы в случае глобального ахтунга.
Даже фирменные серверы иногда умирают!
Случай у клиента:
Забился дренаж у кондиционера. За ночь серверный шкаф был залит несколькими вёдрами воды!
Какой то несведущий человек поставил внутренний блок прямо над шкафом.
И неважно, какой марки был сервер 🙂 , мир его праху.
P.S. Диски удалось спасти.
(15) полностью согласен
об этом уже давно написал
Подробней реальный выбор серверов хочу предложить на моем авторском курсе
Можно заранее задать вопросы по вашему предприятию, которые мы разберем на курсе.
обновилась заметка
Статья конечно хорошая, когда выделение таких сумм денег не проблема. А что делать если пользователей всего 30-40 пока, но некоторые насилуют базы за 10. И 100 килобаксов никто не даст
(18) откуда такие суммы?!!
24 131,00 + 66 003,00 = 90134
Я конечно понимаю, что для моих задач требуется гораздо менее мощное оборудование, но о том как тяжело мне приходится выбивать деньги на оборудование, можно судить о конфигурации моего оборудования. В качестве сервера приложений и сервера БД используются обычные десктопные платформы.
Для 3 баз УТ и 3 бухгалтерских используется сервер приложений (ASUS P5E3, Intel CQ 2.33 Ггц, 2 Gb ОЗУ) который был поставлен временно, так и прижился. и сервер баз данных (ASUS P5Q, Intel CQ 2,33 ГГц, 8 Гб ОЗУ HDD SATA. RAID контроллер Adaptec 5805 на котором 2 десятых рейда на 4 SATA дисках каждый). 2 массива потому что одна база УТ за полтора года выросла уже до 51 Гб и при нагрузке просто не давала другим работать (не справляется дисковая подсистема). Все это работает под Debian 4 и PostgreSQL.
В ближайшее время появятся еще несколько баз УТ, причем одна довольно быстрорастущая. Обосновывать приобретение оборудования будет очень тяжело.
(20) убедительная просьба учитывать что не телепаты тут )
расшифровывайте цифры пожалуйста (хотя бы «за что»)
вы точно читали пункт «расчет потребности в мощностях»? иначе не понятно почему вы не поняли как обосновать руководству потребности.
(21) Dj первых, цены взяты из табличек в статье, где они почему то в USD.
Я извиняюсь, что сразу не оценил, вчера по прайсам глянул, больше уже на рубли похожи цены. Ввело в заблуждение что в таблицах USD указано.
А обосновать я смогу, и начальство будет согласно, что да надо. Но разница в «Да надо» и «Хорошо, приобретаем» очень разная.
(20) извиняюсь, статью про расчет прочитал уже позже. Впредь буду более внимательным.
Статья не до конца читается под ie6. Ошибка в верстке…
(24) вы про или инфостарт?
(25) Инфостарт. У меня такое тоже было. Что-то с тегами.
(26) к сожалению, за хостинг на инфостарте отвечать не могу, помоему тут все понятно, зато обрадую — это всего лишь устаревшее зеркало потоянного адреса
так что если там что то не работает, поправить больше возможностей
(27) хм… а при чем здесь хостинг? В тексте статьи лишняя открывающая или закрывающая скобка тега. Нужно её только найти и поправить.
…или попросить Доржи.
(28) отредактировать статью не получается, глючит движок
(29) Отредактировать статью можно, например, под Mozilla Firefox, а проверить под ie6.
(30) ну так поставьте FF себе и смотрите под ним
Вячеслав, по ссылке Вы описываете что загружает сервер СУБД. В части «2) Запросы без отборов провоцируют интенсивное чтение диска» Вы пишете, что
Примечание. Это действие эффективно, когда в свойствах базы данных Recovery Model в значении Full (такое значение обычно задается по умолчанию при создании базы, еще точнее «наследуется» из свойств системной базы model).
Хочу немного с Вами не согласиться. Дело в том, что модель восстановления практически не влияет на то ЧТО будет записываться в журнал транзакций. Она лишь определяет КАК ДОЛГО там будут находиться записи.
«Практически не влияет», потому что все-таки есть операции (такие как операции массовой вставки или перестройка (rebuild) индексов, например), которые не полностью записываются в журнал транзакций, если используется модель восстановления SIMPLE или BULK-LOGGED. Но, поскольку, 1С нагрузку такого типа не воспроизводит — перенос журнала транзакций на другой диск должен быть эффективным при любой модели восстановления.
спасибо за комментарий, надеюсь набраться силы воли и на выходных экспериментально оценить оказываемую нагрузку (и замерить еще раз), тогд а смогу что то ответить по существу (согласиться/несогласиться)
в теории наверно, но хочу на практике убедиться, очень часто бывают неожиданные результаты