<?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='\
Интерсно как это можно читать без отрыва от производства? Наврено точнее сказать «почитать незаметно для производства и окружающих», можно ли раскрасить в стиле синтаксиса модуля 1С? 😉
1. Ну и это тоже 🙂
2. Можно, но планирую что бы пользователь сам раскраску ставил. После сдачи отчётностей возьмусь, если интерес к разработке будет.
Класс!!!
Проблемы с кодировкой. Файлы в кодировке utf-8 отображает кракозябрами.
Идея прикольная. +
3) Честно говоря самому не очень нравится из-за невозможности перехода на последнюю прочитанную строку и отсутствия навигации. Но это сделаю в следующей версии на основе html поля а не табличного документа.
4) Не знаю, кодировку я вообще не трогал. Всё как в системе. Из полутора сотен опробованных книг проблем не было.
3,4) спасибо за оценку 🙂
3,5) а то промахнулся :)))
(6) Например,http://lib.rus.ec/b/79791/download , и таких на либрусеке много!
+(8) Запятая в ссылку не входит!
9) Обновил обработку. Теперь воспринимает utf-8.
Действительно странно, что у меня таких файлов не было, хотя с либрусека скачано немало…
10) Да, теперь читает! Но как показала практика, кодировка utf-8 может быть указана в файле и как «UTF-8», и как «utf-8» (http://lib.rus.ec/b/123931).. .
Если ты собираешься развивать читалку, то я бы посоветовал одним из первых пунктов реализовать сноски (тэг <a> с типом note) не как переход, а как отображение сносок внизу страницы. Очень повышает комфортность чтения!
ага, вот тут все и отметятся, кто вместо того чтобы работать, на работе книжки читает 🙂
😀 палитесь
Странно, но у меня почему-то при открытии файла 139101.fb2 (книга отсюдаhttp://lib.rus.ec/b/139101/download ) выдаёт ошибку «C:Documents and Settings…Local SettingsTempFB139101
_1». В электронной книге этот файл открывается без проблем.
(14)А какую именно ошибку?
(15) Вы не правы. Для художественных книг именно FB2. djvu больше для различных руководств и периодических журналов.
Вычитку книг кто делает? Счас дай бог чтобы человек книгу засканил не то что распознал и вычитал. djvu делает черно-белый снимок с со страницы (даже рыжей, старой с масляными пятнами) и при этом размер в 600 стр нерапознанного картиночного текста можно вместить в 6 Мб или меньше.
(18) Во-во. Если человек нормально к свое работе отностися, то скан вычитывается и конвертится в fb. Большая чать художественной лит-ры именно в этом формате благодаря удобству настроек чтения и навигации. На объем сейчас мало внимания обращают, с нынешними-то техническими возможностями 🙂
(16) «C:Documents and SettingsuserLocal SettingsTempFB139101http://lib.rus.ec/b/79791/download открылся нормально
_1», файл из
(14) В этой книге FB2Reader как раз и спотыкается на сносках. Конструкцию[1] он ошибочно пытается обработать как картинку.
На самом деле реализовать нормальную читалку для формата fb2 не простая задача. А если еще учесть все возможных косяки, встречающихся в реальных файлах…
Советую почитать автору:http://reeed.ru/info_fb2.php
21) Да кто ж спорит. Первая версия писалась в течении 3-х дней вместе с работой, как получалось время выкроить. Причём большая часть времени потратилась на то что еще не получилось в ней реализовать. Всё это еще в процессе.
http://www.gribuser.ru/xml/fictionbook/ и отсюда http://alexstmp.vsi.ru/index.php .
22) Спасибо. Брал инфу в основном отсюда
Замечания и предложения принимаю, но далеко не всё можно реализовать сразу.
а вот эта Функция ПреобразоватьВДеревоXML(СтрокаXML) Экспорт уже объявлена в общем модуле =) впрочем можно закомментировать или переименовать вызов и функцию в локПреобразоватьВДеревоXML
Полезно было бы добавить добавить фичу авточтения из zip-файла.
На том же Либрусеке все fb2-файлы лежат в зип-архивах.
У меня на коммуникаторе ХаалиРидер читает зипы, здесь было бы также удобно.
ЗЫ или это уже есть ? 🙂
Последнюю версию пока не изучал.
25) Наверное в ЗУП открывал? 🙂
26) Нету. В принципе не очень проблемно сделать.
25) Обновил не меняя версию.
Расположение текста по умолчанию лучше делать по ширине, чуть лучше смотрится 🙂
И Отступ для начала абзаца было бы удобно добавить!
ОбластьТекста.ТекущаяОбласть.Текст = » «+ ТекстВывода; // это Таб
ОбластьТекста.ТекущаяОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.ПоШирине;
1. И еще небольшой разделитель между абзацами вставить для полноты картины 🙂
2. Последний открытый файл хорошо бы запоминать и открывать его при открытии обработки.
Обновил версию. Пока реализованы не все пожелания, но это в процессе 🙂
Пригодится
Судя по всему версия получилась достаточно читабельна и интерес уже к обновлениям упал :).
В планаш остаются только «фишки» и «фичи», а это не так критично…
Небольшая ошибка — в тегах <p> могут быть атрибуты, которые не надо отображать при выводе текста книги. Пример —http://lib.rus.ec/b/93867/download . И еще пожелание — при смене настроек шрифтов хотелось бы применять эти изменения к текущей открытой книге, а то новые настройки действуют только при открытии книги.
(35) Имеется ввиду текст типа AutBody ? Ок.
Второе пожелание тоже принято.
Вопрос: Как можно отследить движение полосы прокрутки поля текстового документа? Если кто знает, плиз … 🙂
Было бы класно если бы она еще умела в интернет-ресурсах шастать и скачивать вот это другое дело, а то нужно скачать, потом обработке сказать где же файл лежит и потом уж читать….
Или она умеет качать с интернета?
Просто в описании обработки я такого не встретил, а скачивтаь и проверять неохота.
(37)Нет. Данная обработка не умеет этого делать 🙂
Да и не вижу необходимости, если честно, вставлять данный функционал в обработку. Это будет в конфигурации.
Эксперимент с доступом «Для всех» признан неудачным. За всё время нахождения в данном доступе скачивания каждый день и никто даже не прокомментировал. Перевел в рекомендуемый.
В принципе идея неплохая, но доработки требует, что то подобное пишу для своей конфы Дом Библиотека, на УФ, там будет постраничное разбиение, гораздо удобнее читать и запоминать позицию просто
(40) Давно забил за нехваткой времени.
Начинал разработку чтения на совсем другом принципе, но осталось на этапе исходников.
Была идея создания конфигурации библиотеки, но опять же не дошли руки.
(41) а с другими форматами не работал?
(43) Работал.
fb3, html, doc, odt, pdf, txt. С этими всеми достаточно легко.
Была идея работы с chm и hlp — но это закрытые достаточно форматы, сложнее чем с pdf. Не срослось.
1. При наличии 2-х и более бинарных тегов в книге выходит ошибка.
Предлагаю обнулить имя записи в файл:
ИмяФайлаКартинки = «»;
ЗначениеЗаписи = Новый Картинка(ЗначениеЗаписи);
по причине:
Файл не обнаружен ‘C: empFB3_Бенедиктов К. — Война в зазеркальеi_001.jpg’
(44) BRT, спасибо, я в курсе. Данная обработка пока не дорабатывается.