<?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='\
Правильно ли я понимаю, что данная обработка умеет работать с файлами в облаке исключительно средствами http без необходимости установки приложения Яндекс.Диск?
(1) yurii_host, все верно! Для работы нужен только логин, пароль и доступ в интернет!
(1) yurii_host, Единственно что автор не указал, файлы размером больше 2 гб не проходят при таком способе подключения.
(3) apatyukov, а вы тестировали этот метод? А чем отличается загрузка 2гб+ не в курсе?
(4) yandex принудительно прерывает коннект.
(5) apatyukov, так у меня же и используется WebDAV.
(6) ну так попробуй выгрузить 3гб.
(7) apatyukov, протестировал обработку — загрузка файла 1.1 Гб прошла, а вот 2.2 ГБ через 30 секунд отваливается:
Нахакере описали как заставить висеть коннект бесконечно:
Но как это применить к моей разработке, пока не знаю.
Если есть идеи велком!
Поэтому пока добавлю в описание, ограничение до 2 Гб.
(8) собственно что и требовалось доказать.
Есть еще
http://infostart.ru/public/343316/
(12) sikuda, да там ссылка наhttps://tech.yandex.ru/disk/api/concepts/about-docpage/ , а я пока не сильно писал HTTP-запросы. Но я думаю дело за малым. Но смущает регистрация https://tech.yandex.ru/oauth/ .
+ на дальнейшее развитие!
(13) Ну если совсем не заморачиваться с безопасностью то диск яндекс можно подключить к своему компьютеру как виртуальный
https://yandex.ru/support/disk/webdav/webdav-win.xml
И он вообще будет мало отличаться от реального. Только скоростью.
Если Вы не хотите передавать пароль в открытом виде или Вам на вашей фирме серьезно относятся к безопасности. То лучше немного напрячься — получить token на год
Причем token можно получить как на чтение так и на полный доступ. Здесь уже открываются другие перспективы…
Вот насчет файлов в 3 гб. надо попробовать.
(15) sikuda, вчера потестировал сервис, ничего не вышло с запросами, Так что отложим до лучших времен. У меня задача выгружать фото на ядиск, а их размер с текущими камерами на телефонах намного ниже 2 гб, так что задачу я решил.
1С прекрасно работает с Webdav. К чему делать обработку? Простите, немного не понял.
(17) shakmaev, вы сами и ответили на свой вопрос. Обработку пишут для пользователя.
Реализация REST API Я.Диска с OAuth-авторизацией в виде библиотеки для 1Scripthttps://github.com/kuntashov/oscript-yadisk
https://github.com/kuntashov/oscript-yadisk-uploader
http://oscript.io
http://infostart.ru/public/327581/
Пример использования — скрипт для публикации файлов на Я.Диске:
p.s.
1Script:
Подробнее об 1Script на ИС:
(19) kuntashov, реализация в виде библиотеки это самое просто решение, но интересно будет написать все кодом 1С. Конечно тогда будет ограничение на версию 1С: 8.3.
Там и написано все «кодом 1С». По ссылке поленились, видимо, пройти?
(21) kuntashov, использование скрипта это лишнее звено, вот о чем речь была.
(22) вообще-то код будет работать и, например, в модуле обработки практически «как есть» (копированием-вставкой с небольшими доработками, связанными с необходимостью замены использования библиотеки json на штатные методы 1С для парсинга json).
Плюс там описана процедура авторизации oauth и получения токена, с чем у вас возникли трудности, судя по вашему же комментарию выше.
(23) kuntashov, а вот это уже интересно. Много кода портировать придется?
(24) явные отличия есть только в методах работы с json (но на самом деле они взяты из разработкиhttp://infostart.ru/public/119601/ , т.е. можно использовать его же вместо штатных методов платформы) + используется модуль логирования. Но вызовы методов этих библиотек локализованы и могут быть заменены.
Здравствуйте, скачал файл — не работает. Может подскажите в чем причина? При входе в почту диск — файлы добавляются удаляются.
При копировании строки подключения в браузер система даже запрашивает пароль, но дальше ничего не происходит
При чтении
Файл не обнаружен ‘https://imsb1c:xxxxxxx@webdav.yandex.ru/imsb/СКД.jpg’
по причине:
Ошибка работы с Интернет: ресурс не найден (404).
При записи
Ошибка при выполнении файловой операции ‘https://imsb1c:xxxxxxx@webdav.yandex.ru/imsb/СКД.jpg’
по причине:
Ошибка работы с Интернет: запрос не может быть выполнен из-за конфликта с текущим состоянием ресурса (409).
(26) alem, проверяйте настройки вашего ПК. Скорее всего антивирус блокирует.
(27) отключил, тоже самое.
у меня win 10, это может влиять?
+ «При копировании строки подключения в браузер система даже запрашивает пароль, но дальше ничего не происходит «
(28) alem, на 10 я не тестировал.
xxxxxxx это у вас такой пароль?
Введите туда реальные данные!
Если и с реальным паролем через браузер качать не будет, то проблема в винде. Ищите решение в интернете. Скорее всего там еще куча всяких блокировщиков, аля защита от фишинга и прочее!
там данные реальные, при ошибки система меняет пароль на хххххх, код полностью ваш, убрал только «попытку», чтобы видеть ошибку
в яндексе настраивать что то нужно?
попробовал с сервера 2008 r2 — не работает
(30) alem, настраивать ничего не нужно. Нужно ввести логин и пароль. Если эта строка в браузере не работает, то я вам уже сказал, проверяйте настройки винды.
(31) alem, значит у вас проблемы в настройках сети или ваш провайдер ограничил доступ. Спросите админа сети, какие есть ограничения. Можете также написать запрос в яндекс, чтобы они сообщили вам что нужно для работы сервиса!
Сейчас проверил работу обработки: проблем нет!
Решите технические вопросы, которые не связаны с работой обработки и у вас все тоже заработает!
Работает, но только если на компе не установлено приложение диска (если диск установлен, но отключен — не работает)
(34) alem, скорее всего он работает как служба и перехватывает запросы. Попробуйте найти его в службах?
Приложение позволяет же отправлять файлы более 2 ГБ, поэтому они так сделали.
На 8.2 падает платформа, было бы неплохо предупреждать о том что на 8.2, как минимум, такой подход не работает.
(36) o.nikolaev, а какой у вас релиз? Несовместимости с 8.2 в коде нет. Скорее всего у вас длл сбоит.
(37) 8.2.19.130
Какая именно dll «сбоит»?
(38) o.nikolaev, открывайте лог винды и дамп спец утилитой.
Переустановка платформы не помогает?
на клюшка заведется ?
(40) botman4, если переписать синтаксис, то скорее всего да.
Но нужно тестировать.
Здравствуйте?
Выдал ошибку:
{ВнешняяОбработка.ОбменЯндексДиск.МодульОбъекта(257,11)}: Процедура или функция с указанным именем не определена (СтрНайти)
Индекс = <<?>>СтрНайти(URL, «/»);
{ВнешняяОбработка.ОбменЯндексДиск.МодульОбъекта(263,11)}: Процедура или функция с указанным именем не определена (СтрНайти)
Индекс = <<?>>СтрНайти(ИмяСервера, «:»);
Выгрузка на яндекс диск работает, загрузка с я.диска — нет. Что может быть не так?
(42) добрый день! Если у вас конфигурация без совместимости 8.3.5, то «СтрНайти» нужно заменить на «Найти».
Доработаю алгоритм позже, для тех кто выше платформу использует.
(43) проверить фаервол!
(42) проверил свою разработку! Такой строки кода там нет!
Но судя по вашему тексту, кто-то вам сделал доработку!
И в вашей версии конфигурации включен решим совместимости ниже 8.3.6.
В моей версии есть строка:
Так вот до 8.3.6 есть метод «Найти», а вот с 8.3.6 нужно использовать метод «СтрНайти».
Обращайтесь к тому кто вам делал доработку или пишите в ЛС!
Заметил на практике, что ошибка «ресурс не найден (404)» появляется даже без установленного приложения яндекс-диска, а по банальной причине не соответствия регистра имени файла. В моем примере файл «discount.txt» не читался, если указывал название «Discount.txt»
Я правильно понимаю, что не предусмотрена возможность получения публичной ссылки на загруженный в ЯндексДиск файл?
(48) все верно! Данная разработка не предполагает такой функционал!
Интересно, а возможно посмотреть список файлов на яндекс диске, так же просто?
(50) для этого требуется использовать сервис яндекса. На ИС есть уже публикация, в которой этот алгоритм реализован.
(8)
Если есть идеи велком!
Обработку не скачивал.
Если вы используете http соединение, то добавить в заголовки ReadWriteTimeout со значением -1.
(52) там другой принцип. Если переписать на запросы думаю и подойдет, но на текущий момент это уже не требуется.
А как получить ссылку на загруженный файл?
(54) работа обработки не предполагает создание публичной ссылки, только прямой доступ.
5.5 Гб через webdav грузится. Думаю, что это не потолок.
(56) ранее было ограничение, возможно его убрали. Не проверял.