<?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='\
хм…. ну да ладно может кому и пригодится ..
http://www.xstarter.com/rus/index.html (там задачу можно по втыканию флешки организовать и сообщением типа «доставай хозяина я синхронизировалась») короч много там чего.
Имеет место быть..
Ну как альтернативу посмотрите
Запускается самостоятельно или при «втыкании» флэшки?
(1) Спасибо, посмотрю
(2) Запуск производится вручную, т.к. предполагается, что программа постоянно находится на флэшке и не делает записей в реестре, не висит в процессах. Схема такая: воткнул флэшку, запустил программу, выбрал настройку, запустил синхронизацию, просмотрел отчет, закрыл.
Начиная с Windows 95 существует встроенные в систему средство синхронизации, которое называется Портфель (Briefcase).
Причем синхронизация двухсторонняя, если изменения будут на компьютере они перенесутся на флеш, если на флеш то пересутся на компьютер. Переносятся только модифицированные файлы. И можно устанавливать приоритетность замещения файлов, т.е. если один и тот же файл модифицирован на компе и на флеш, приоритет можно настроит на флеш, чтобы с флеш перетирал файл на компе.
Я так синхронизирую флешку уже несколько лет.
Справка windows xp:
Общие сведения о портфеле
При частой работе с файлами вне основного компьютера (например, на переносном компьютере) можно использовать портфель для синхронизации соответствующих файлов основного и переносного компьютеров.
После завершения работы с переносным компьютером подключитесь к основному компьютеру (или вставьте съемный диск, содержащий измененные файлы) и портфель автоматически заменит файлы их обновленными версиями. Нет необходимости удалять измененные файлы из портфеля или их неизмененные копии с основного компьютера.
Портфель хранит файлы и отображает их состояние. Например, он показывает связан ли файл с исходным файлом на основном компьютере или это файл без пары. Эти данные помогают сохранить упорядочивание файлов и предотвратить нежелательное удаление или замену последней версии файла промежуточной.
+ как включить портфель, можно прочитать в справке windows
Хотелось бы еще иметь возможность зиповать данные и уже потом копировать на флешку, а потом раззиповывать в указанный каталог на диске с флешки. 💡 Возможно ли подключение архиватора какого? 😳
Можно ли предварительно удалить файл с флешки или переименовать, чтобы не затереть уже имеющийся, а потом уже выполнить задание по архивации файла на диске и записи его на флешку. То же самое делать в
обратную сторону с флешки на диск.
❓
(6) По архивированию можно доработать. Нужна еще будет настройка, какие именно файлы/папки архивировать, так ведь?
Как я понял, нужно не затирать имеющиеся файлы, а дописывать переименовывая к уже имеющимся?
Да, было бы неплохо иметь возможность указать после архивирования к примеру таким образом:
если файл-архив с таким именем существует (на флешке), то при копировании файла с диска на флешку
либо: удалять исходный файл (на флешке)
либо: дописать файл на флешку добавив к имени файла номер (001) либо дату создания файла-архива (01_10) (день_месяц)
причем, количество номеров можно задать к примеру от 1 до 5 и тогда после записи пятого номера будет автоматически удаляться первый и на его место записываться новый первый номер. Таким образом можно иметь возможность получать копии не только текущие, но и предыдущие 5 штук.
Я это из-за того пишу, что порою не имеет смысла копировать базу не заархивировав её, так как просто флешек не напасешся. Кроме того архив некоторых других вещей куда меньше места занимает чем в оригинале. Да и возможность иметь более ранние копии документов тоже плюс.
Разворачивать обратно с флешки хотелось бы тоже иметь возможность в новую папку из более нового архива. Так дома уже есть база за предыдущий день и можно её не затирать а развернуть новый архив в новую папку на компьютере, к примеру в папку ..Базы бухгалтерии где уже есть папка с базой предыдущего дня. ..база_01_10 развернуть архив с датой от 02-10-2010 который помечен как 02_10 в папку ..база_02_10 . А если по номеру, то можно так:
.. база_01 , база__02, а потом затирать имеющиеся на компе, переписывая заново, так как номер файлов-архивов опять начал идти с 01. Таким образом на компе мы будем иметь постоянно определенное количество версий баз, да и других файлов