Автоматический импорт файлов
#1
Отправлено 06 Март 2014 - 10:49
Есть скрипт, который позволяет вручную импортировать в КБ данные из определенного файла. Неудобство в том, что это все приходится делать вручную, открывать, выбирать файл, нажимать на кнопочку. А как известно, айтишники очень ленивые люди, и каждый день делать одну и ту же операцию очень напрягает.
Можно ли организовать автоматически(по расписанию, один раз в день в 8 утра, например) захват файла из определенного каталога, и если, операция импорта пройдет успешно, то переместить этот файл в другой каталог?
#2
Отправлено 06 Март 2014 - 11:03
#3
Отправлено 06 Март 2014 - 11:37
#4
Отправлено 06 Март 2014 - 11:47
$file = fopen("c:/www/html/file.txt","r");
Но вот ведь вопрос... Это в том случае, когда мы знаем, что наш файл называется "file.txt". Что делать в том случае, если:
1. Мы не знаем как наш файл называется, но он один в каталоге
2. Мы не знаем как наш файл называется, и их в нужном каталоге больше чем один, как взять по очереди каждый из них
Ну и останется после этот файл переместить в каталог с "отработанными" файлами.
#5
Отправлено 06 Март 2014 - 11:54
<?php if ($handle = opendir('/path/to/files')) { echo "Дескриптор каталога: $handle\n"; echo "Файлы:\n"; /* Именно этот способ чтения элементов каталога является правильным. */ while (false !== ($file = readdir($handle))) { echo "$file\n"; } closedir($handle); } ?>
Программисты? В правильном направлении двигаюсь???
#6
Отправлено 06 Март 2014 - 12:08
<form action="report.php?id=24" method="post" enctype="multipart/form-data"> <label for="file">Выберите файл:</label> <input type="file" name="file" id="file" /> <br /> <br /> <br /> <input style="width:200px; height:50px" type="submit" name="submit" value="Загрузить" /> </form>
А в подготовке данных:
if ($_FILES['file']['name'] != "") { echo "<h4>Информация о загруженном на сервер файле: </h4>"; echo "<b>Оригинальное имя загруженного файла: ".$_FILES['file']['name']."</b><br />"; echo "<b>Mime-тип загруженного файла: ".$_FILES['file']['type']."</b><br />"; echo "<b>Размер загруженного файла в байтах: ".$_FILES['file']['size']."</b><br />"; $filename = iconv("CP1251", "UTF-8", $_FILES['file']['tmp_name']); echo "<b>Временное имя файла: ".$filename."</b><br />"; $kodeF = 0; $y == 1; $myfile = gzfile($_FILES['file']['tmp_name']);
Как? Как в автомате его грузить?
#7
Отправлено 06 Март 2014 - 12:14
<?php if ($handle = opendir('/path/to/files')) { echo "Дескриптор каталога: $handle\n"; echo "Файлы:\n"; /* Именно этот способ чтения элементов каталога является правильным. */ while (false !== ($file = readdir($handle))) { echo "$file\n"; $filenew = fopen("c:/moya_papka/".$file,"r"); $myfile = gzfile ($filenew); // тут дальше обработка файла пойдет // вопрос: теперь отработанный файл надо переместить в каталог c:/moya_papka/well/ } closedir($handle); // Если есть еще файлы, то по порядку будут браться дальше по циклу } ?>
#8
Отправлено 06 Март 2014 - 12:21
<?php if ($handle = opendir('c:/moya_papka/')) { echo "Дескриптор каталога: $handle\n"; echo "Файлы:\n"; while (false !== ($file = readdir($handle))) { echo "$file\n"; // открываем файл для работы с ним $filenew = fopen("c:/moya_papka/".$file,"r"); // распаковываем файл $myfile = gzfile ($filenew); // тут дальше обработка файла пойдет // перемещаем отработанный файл в c:/moya_papka/well/ move_uploaded_file("c:/moya_papka/".$file, "c:/moya_papka/well/".$file); } closedir($handle); // Если есть еще файлы, то по порядку будут браться дальше по циклу } ?>
#9
Отправлено 06 Март 2014 - 12:28
#10
Отправлено 06 Март 2014 - 12:38
#11
Отправлено 06 Март 2014 - 12:42
#12
Отправлено 06 Март 2014 - 13:25
rename("с:/moya_papka/".$file, "c:/moya_papka/well/".$file);
Вторая проблема была в том, что распакованный файл был вовсе не распакованным:
// распаковываем файл $myfile = gzfile ($filenew);Тобишь не находился файл, который мы бы хотели распаковать, потому что это:
// открываем файл для работы с ним $filenew = fopen("c:/moya_papka/".$file,"r");давало нам фиг понять что... Поэтому эту строку мы вообще ликвидировали.
В итоге, решение выглядит так:
if ($handle = opendir('c:/moya_papka/')) { echo "Дескриптор каталога: $handle\n"; echo "Файлы:\n<br />"; while (false !== ($file = readdir($handle))) { echo "file - $file\n <br />"; // распаковываем файл $myfile = gzfile ("f:/distr/auto_ssod/".$file); // тут дальше идет обработка файла, импорт его значений в поля КБ. // перемещаем отработанный файл в c:/moya_papka/well/ rename("c:/moya_papka/".$file, "c:/moya_papka/well/".$file); } closedir($handle); // Если есть еще файлы, то по порядку будут браться дальше по циклу }Интересно, что в любом случае, строка
echo "file - $file\n <br />";Дает результат:
Цитата
file - ..
file - BACKUP05032014.gz
Уважаемые программисты, подскажите почему так? И как может обойти это?
#13
Отправлено 06 Март 2014 - 13:57
#14
Отправлено 06 Март 2014 - 14:19
Цитата
Да, это универсальный оператор для перемещения/переименования файлов. Функция move_uploaded_file предназначена только для загруженных через форму файлов (что-то вроде безопасного режима).
Цитата
Функция fopen возвращает ссылку на файл для дальнейшего чтения/редактирования (в зависимости от опций). Не совсем понял в чем проблема у вас ним. Для распаковки (если нужна была она), он естественно не годится. Также, для прямого чтения можно использовать file_get_contents, он возвращает непосредственно содержимое файла.
Цитата
Уважаемые программисты, подскажите почему так? И как может обойти это?
Это 2 стандартных для файловой системы псевдонима для текущей и родительской папки. Обойти разумеется можно обычным if оператором.
#15
Отправлено 06 Март 2014 - 14:47
Скажите, а
$data['Имя файла'] = $file;Разьве не должно было в поле, наименование которого "Имя файла" - добавить название файла, равное $file?
У меня почему-то при выполнении ничего не произошло.
#16
Отправлено 06 Март 2014 - 14:49
insert_query($data,"НАЗВАНИЕ КАТЕГОРИИ"); unset($data);
#17
Отправлено 07 Март 2014 - 07:02
#18
Отправлено 07 Март 2014 - 09:21
dolphin (07 Март 2014 - 07:02) писал:
В документации есть ссылка на правила задания расширенного режима.
#19
Отправлено 07 Март 2014 - 09:54
#20
Отправлено 07 Март 2014 - 09:55
Цитата
Количество пользователей, читающих эту тему: 10
0 пользователей, 10 гостей, 0 анонимных