McLotos
7.09.2015 - 06:20
Всем привет. Такой момент, скриптом создаю текстовый файл, в который записывается много данных через file_put_contents с флагом LOCK_EX. Когда запись закончится нужно залить файл в БД. Проблема в том что сам скрипт заканчивает запись в файл уже через 2 минуты, но еще какое-то время файл недоступен, поэтому получается что скрипт закончив запись не может залить его в БД. Как это исправить? Как объяснить скрипту чтобы он ждал когда файл освободится?
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
AllesKlar
7.09.2015 - 07:27
в цикле is_readable()
_____________
[продано копирайтерам]
McLotos
7.09.2015 - 08:04
Не сработало =(
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos, скорее всего ты запускаешь задачи параллельно, т.к. file_put_cotents снимает лок после завершения записи. Так же трудно поверить в то, что непосредственно запись в файл длится 2 минуты, т.к. даже на средний hdd можно писать со скоростью ~100Мб/сек
McLotos
7.09.2015 - 08:31
Цитата (kaww @ 7.09.2015 - 10:23) |
трудно поверить в то, что непосредственно запись в файл длится 2 минуты |
больше 5 000 000 строк
Цитата (kaww @ 7.09.2015 - 10:23) |
скорее всего ты запускаешь задачи параллельно, т.к. file_put_cotents снимает лок после завершения записи. |
нет, я проверил. Все задачи срабатывают последовательно. Скрипт должен записать данные в файл, а потом импортировать его в БД через LOAD DATA INFILE.
А получается что скрипт создает файл, потом очищает таблицу в БД для загрузки данных из файла и не загружает данные, таблица остается пустой
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
sergeiss
7.09.2015 - 08:58
Цитата (McLotos @ 7.09.2015 - 08:31) |
А получается что скрипт создает файл, потом очищает таблицу в БД для загрузки данных из файла и не загружает данные, таблица остается пустой |
Ну, как бы, такое объяснение не говорит о том, что файл недоступен
Это говорит только о том, что данные не записались в БД. Если бы файл был недоступен, то ты получил бы ошибку в Мускуле. Там у тебя есть ошибка? Похоже, что нет.
Проверь, есть ли у тебя индексы в этой таблице? Если есть, то удали их совсем на время загрузки данных. Потом создай заново.
И самое гланое - для начала попробуй создать файл меньшего размера. Допустим, всего 1000 строк. Убедись, что алгоритм верный. Возможно, что там проблемы с количеством/названием колонок.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
McLotos
7.09.2015 - 09:01
и у него почему-то owner www--data хотя после добавление данных прописана команда chmod 777
и еще один интересный момент. После того как скрипт заканчивает работу я еще минут 5 не могу открыть этот файл просто в редакторе, у меня каталог висит при открытии, а sudo nano показывает пустоту.
Очень странно. размер файла почти гиг, а он пустой. Данные не сразу появляются.
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Цитата (McLotos @ 7.09.2015 - 05:01) |
и у него почему-то owner www--data хотя после добавление данных прописана команда chmod |
Внезапно:
chmod --help
Usage: chmod [OPTION]... MODE[,MODE]... FILE...
or: chmod [OPTION]... OCTAL-MODE FILE...
or: chmod [OPTION]... --reference=RFILE FILE...
Change the mode of each FILE to MODE.
чтобы сменить владельца - chown. и не chmod 777 а chmod 0777 - в восьмеричной сс.
McLotos
7.09.2015 - 09:11
Цитата (kaww @ 7.09.2015 - 11:08) |
чтобы сменить владельца - chown. и не chmod 777 а chmod 0777 - в восьмеричной сс. |
Да, я знаю. Я имел ввиду что прав нет ни у кого кроме www--data.
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
AllesKlar
7.09.2015 - 09:47
sergeiss дельный совет дал, начни с него.
Каталог у меня тоже повис, а вот cat file.txt выдал содержимое. (1 млн. строк по 100 байт)
Но каталог висит только тогда, если окно было уже открыто. Если его открыть заново, даже в процессе записи, все открывается нормально.
А так же
$res = fopen('file.txt', 'r');
$str = fgets($res, 512);
echo $str;
отработало сразу и выдало первую строку.
Я так понял, ты все из dbf в мускуль гонишь?
Это одноразово? Если да, ну так сделай в 2 этапа.
_____________
[продано копирайтерам]
McLotos
7.09.2015 - 11:13
Цитата (AllesKlar @ 7.09.2015 - 11:47) |
Это одноразово? |
нет. это нужно будет делать при каждом поступлении новой БД. Несколько раз в месяц
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
AllesKlar
7.09.2015 - 11:42
Цитата (AllesKlar @ 7.09.2015 - 07:47) |
нет. это нужно будет делать при каждом поступлении новой БД. Несколько раз в месяц |
И в чем проблема сделать 2 скрипта?
Первый делает дамп, второй заливает его.
Хочется "два в одном", напиши bash скрипт и пусть он оба php скрипта вызывает с задержкой между ними
_____________
[продано копирайтерам]
McLotos
7.09.2015 - 12:19
Да просто прикол в том что сейчас это все делается 4 скриптами и еще и руками между ними. Хочется упростить всю процедуру
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.