Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как узнать, что файл занят?
 
 автор: sim5   (16.11.2006 в 15:42)   письмо автору
 
 

Жду ответа на ранее заданный вопрос (http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=27767&page=1), но толи вопрос задан не удачно, толи таким сервисом среда РНР не обладает. Повторю кратко:
Пользователь загружает файл с сервера, а со стороны администратора требуется замена этого файла новой версией. Как узнать, что файл занят и дождавшись его освобождения, обновить?

   
 
 автор: Loki   (16.11.2006 в 15:45)   письмо автору
 
   для: sim5   (16.11.2006 в 15:42)
 

http://ru2.php.net/is_writable

   
 
 автор: Глинтвейн   (16.11.2006 в 15:47)
 
   для: sim5   (16.11.2006 в 15:42)
 

Что значит занят? Загружается в данный момент? Если так, то возможности отследить закончена загрузка или нет нельзя. как вариант, можно записывать время последнего обращения к фалу, и исходя из этого, решать докачали его или нет. Но тут опять же есть вариант использования менеджера закачки на диалапе.

   
 
 автор: sim5   (16.11.2006 в 16:02)   письмо автору
 
   для: Глинтвейн   (16.11.2006 в 15:47)
 

Функции подобные по ссылке http://ru2.php.net/is_writable дают только информацию о том, доступен файл для записи или нет. Если бы, к примеру, при обращении к файлу ему автоматом выставлялось ФАЙЛ НЕ ДОСТУПЕН ДЛЯ ЗАПИСИ, то и вопроса бы небыло.
К чему все это? Файл большой. Я не могу оборвать его закачку со стороны, только лишь потому что это мне нужно. Узнавать дату выход, но если (теоретически), его начнет одновременно закачивать другой пользователь... Что в РНР - e404 одно единственное универсальное средство, тогда это как в армии мазь Вишневского.

   
 
 автор: Loki   (16.11.2006 в 16:13)   письмо автору
 
   для: sim5   (16.11.2006 в 16:02)
 

Два раза перечитал оба сообщения. Нифига не понял.

   
 
 автор: sim5   (16.11.2006 в 16:20)   письмо автору
 
   для: Loki   (16.11.2006 в 16:13)
 

Мне нужно обновить файл его новой версией. Размер файла большой. Его загружают. Я ведь не могу начать его перезапись в то время когда он загружается. Как сделать это корректно не создавая кофликтов?

   
 
 автор: mishaMC   (16.11.2006 в 16:28)   письмо автору
 
   для: sim5   (16.11.2006 в 16:20)
 

Есть специальные режими блокировки, для таких случаем (рекомендательная и жесткая). Возможен вариант, что когда начинается считывание -- ставится блокировка на запись, как только она заканчивается, то начинается запись в файл, с блокировкой на чтение. Эти режимы позволяют выводить диагностические сообщения пользователю.


Посмотрите в мануале:

http://ru2.php.net/flock

Имейте в виду, функция имеет много тонкостей. Отладить скрипт с использованием блокировки трудно, и, к сожалению, частенько обнаруживаешь ошибки уже при работе пользователей со скриптом.

   
 
 автор: sim5   (16.11.2006 в 17:05)   письмо автору
 
   для: mishaMC   (16.11.2006 в 16:28)
 

Вот из мануала о flock:

· LOCK_SH (или 1) - разделяемая блокировка;
· LOCK_EX (или 2) - исключительная блокировка;
· LOCK_UN (или 3) - снять блокировку;
· LOCK_NB (или 4) - эту константу нужно прибавить к одной из предыдущих,
если вы не хотите, чтобы программа подвисала на
flock() в ожидании своей очереди, а сразу возвращала
управление.

Все хорошо, но ведь я устанавливаю блокировку? Я о чем и спрашиваю. Я если я сходу повешу flock на занятый файл, не произойдет ли его блокировка для пользователя, другими словами - не будет ли блокирован уже запущенный процесс. К примеру в среде Windows API, я могу предопределить реакцию на все (или почти на все случаи), понимаю что сервер это не мой комп с Windos, но ведь как то и в нем долны предусматриваться исключения конфликтов.
К сожалению не все мануалы хороши, покрайней мере, те что у меня раньше были. Из отрывка приведенного выше можно понять, что это можно "есть", но о последствиях ни слова.
Скачал по советам этого форума хорошие доки. Но все хорошее в PDF - и смотреть не удобно, и поиск оставляет желать лучшего, а еще хуже ДЕЖАВЮ. Начал переделывать все в CHM, для себя, но работа не одного дня, а ответ нужен сейчас. Я не могу проводить эксперементы на стороне сервера. Сейчас дома 5 компов оказалось к счастью, три зацепил в сеть, и останется только, изучать весь мануал с помощью эксперементов, если не получу на форуме ответа на вопрос.

   
 
 автор: Unkind   (16.11.2006 в 17:06)   письмо автору
 
   для: mishaMC   (16.11.2006 в 16:28)
 

Вообще-то, если в процессе выполнения скрипта будет необходимость открыть/записать файл, который будет заблокирован flock(), то интерпритатор PHP просто подождет, пока он освободится, а не выдаст ошибку.

   
 
 автор: Trianon   (16.11.2006 в 17:02)   письмо автору
 
   для: sim5   (16.11.2006 в 16:20)
 

Как загружают? PHP-скриптом через форму?
К моменту, когда скрипт начнет работу, файл уже будет полностью загружен.

   
 
 автор: sim5   (16.11.2006 в 17:57)   письмо автору
 
   для: Trianon   (16.11.2006 в 17:02)
 

Ни че не понимаю, причем здесь upload.

Ну последний раз. Судя по сленгу многих авторов этого форума - вы довольно молоды, если сравнивать с моим возрастом, память у вас лучше, вам и карты в руки. Я конечно еще не страдаю старческим маразмом, но новое запомнить сложнее, поэтому без комментариев "стороны мануала". К примеру, всю компьтерную грамотность, я приобретал сам, начиная с самого низкого уровня, как и многие на примере КР580ВМ80. Досих пор я помню шестнадцатеричный код многих его команд. Легко освоил поэтому контроллеры и много делал вещей на их базе. С раннего детства занимаюсь электроникой, а наш регион сплошь катается на подержанных японках - несут в ремонт кучу всякой бортовой автоэлектроники, и ни кахих проблем, и негорюю что схем нет. Давно занимаюсь программированием, но на локальной машине под ее OS. Сам по образованию художник - занимаюсь графикой и видео.

Ну это все опыт преобретенный за много лет, и с самых азов. А в "приятный омут РНР" окунулся недавно, и ксожалению плюхнулся в самую его середену. К частью выбираса не хоцется!

К сожалению иногда не можешь понять и решить некотурю казалось бы простую вещь, или может это просто излишние требования?

Да... Почти неоконченное "Война и мир", ну да ладно. Вот задача:

На странице отображается -

Вот такой фал <a href="там то">Загрузить</a>

Увидели, обрадовались, грузят. А тут злобный админ решил, что качают не то, жмет у себя кнопочку и закачивает себе на сервер ТО. Закачал и задумался (он хоть и злобный админ, но вежливый) - что сейчас делать, если кто-то еще не забрал себе это НЕ ТО, да еще кто-то занес палец на <a>Загрузить</a>? А дальше варианты как в 50/50:

1. плюнуть на всех, удалить НЕ ТО и поместить на его место ТО ЧТО НАДО,
2. не думая ни о чем, повесить замок - а на что его вешать? Старое надо же просто выбросить и положить новое.
3. как то узнать, что уже скачали, и без матов в окне IE, сообщить тому кто занес свой пальчик над <a>Загрузить</a> - пусть мол пока чайку отведает.

Вот такое можно сделать, или не взирая ни на что, грузить новое, сразу выкидывать старое и на его место ложить новое. Как длинно и не стройно, но я не Пушкин, хотя и фамилия моя его в его родословной имеется. Вот такая вот байка уважаемые.

   
 
 автор: Loki   (17.11.2006 в 09:46)   письмо автору
 
   для: sim5   (16.11.2006 в 17:57)
 

>Вот такой фал <a href="там то">Загрузить</a>
Встречный вопрос: а php тут каким боком?

   
 
 автор: sim5   (17.11.2006 в 16:23)   письмо автору
 
   для: Loki   (17.11.2006 в 09:46)
 

Потому что принимается решение на стороне сервера. Ну можно другим боком - как безопасно удалить файл на сервере (с целью замены), если он в это время загружается с сервера.

   
 
 автор: Loki   (17.11.2006 в 16:57)   письмо автору
 
   для: sim5   (17.11.2006 в 16:23)
 

Отдавайте файл через скрипт. И будет он тогда занят пока его качают...

   
 
 автор: sim5   (17.11.2006 в 17:15)   письмо автору
 
   для: Loki   (17.11.2006 в 16:57)
 

Это уже ближе, отдавая его через скрип я знаю что его заняли, а как узнать что он освободился, мне ведь надо его удалить?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования