Автоматический импорт файлов
#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
Цитата
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных













