[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Когда освободится файл
McLotos
Всем привет. Такой момент, скриптом создаю текстовый файл, в который записывается много данных через file_put_contents с флагом LOCK_EX. Когда запись закончится нужно залить файл в БД. Проблема в том что сам скрипт заканчивает запись в файл уже через 2 минуты, но еще какое-то время файл недоступен, поэтому получается что скрипт закончив запись не может залить его в БД. Как это исправить? Как объяснить скрипту чтобы он ждал когда файл освободится?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
AllesKlar
в цикле is_readable()

_____________
[продано копирайтерам]
McLotos
Не сработало =(

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
kaww
McLotos, скорее всего ты запускаешь задачи параллельно, т.к. file_put_cotents снимает лок после завершения записи. Так же трудно поверить в то, что непосредственно запись в файл длится 2 минуты, т.к. даже на средний hdd можно писать со скоростью ~100Мб/сек
McLotos
Цитата (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
Цитата (McLotos @ 7.09.2015 - 08:31)
А получается что скрипт создает файл, потом очищает таблицу в БД для загрузки данных из файла и не загружает данные, таблица остается пустой

Ну, как бы, такое объяснение не говорит о том, что файл недоступен smile.gif Это говорит только о том, что данные не записались в БД. Если бы файл был недоступен, то ты получил бы ошибку в Мускуле. Там у тебя есть ошибка? Похоже, что нет.
Проверь, есть ли у тебя индексы в этой таблице? Если есть, то удали их совсем на время загрузки данных. Потом создай заново.

И самое гланое - для начала попробуй создать файл меньшего размера. Допустим, всего 1000 строк. Убедись, что алгоритм верный. Возможно, что там проблемы с количеством/названием колонок.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
McLotos
и у него почему-то owner www--data хотя после добавление данных прописана команда chmod 777
и еще один интересный момент. После того как скрипт заканчивает работу я еще минут 5 не могу открыть этот файл просто в редакторе, у меня каталог висит при открытии, а sudo nano показывает пустоту.

Очень странно. размер файла почти гиг, а он пустой. Данные не сразу появляются.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
kaww
Цитата (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
Цитата (kaww @ 7.09.2015 - 11:08)
чтобы сменить владельца - chown. и не chmod 777 а chmod 0777 - в восьмеричной сс.

Да, я знаю. Я имел ввиду что прав нет ни у кого кроме www--data.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
AllesKlar
sergeiss дельный совет дал, начни с него.

Каталог у меня тоже повис, а вот cat file.txt выдал содержимое. (1 млн. строк по 100 байт)
Но каталог висит только тогда, если окно было уже открыто. Если его открыть заново, даже в процессе записи, все открывается нормально.

А так же
$res = fopen('file.txt', 'r');
$str = fgets($res, 512);
echo $str;

отработало сразу и выдало первую строку.

Я так понял, ты все из dbf в мускуль гонишь?
Это одноразово? Если да, ну так сделай в 2 этапа.


_____________
[продано копирайтерам]
McLotos
Цитата (AllesKlar @ 7.09.2015 - 11:47)
Это одноразово?

нет. это нужно будет делать при каждом поступлении новой БД. Несколько раз в месяц

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
AllesKlar
Цитата (AllesKlar @ 7.09.2015 - 07:47)
нет. это нужно будет делать при каждом поступлении новой БД. Несколько раз в месяц

И в чем проблема сделать 2 скрипта?
Первый делает дамп, второй заливает его.
Хочется "два в одном", напиши bash скрипт и пусть он оба php скрипта вызывает с задержкой между ними

_____________
[продано копирайтерам]
McLotos
Да просто прикол в том что сейчас это все делается 4 скриптами и еще и руками между ними. Хочется упростить всю процедуру

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.