Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Что происходит с php-скриптом, если рвется соединение при загрузке файла? / 14 сообщений из 14, страница 1 из 1
26.12.2012, 10:06
    #38092937
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
Пользователь начинает загружать файл. Сразу же создается запись в БД (вариант создать запись после загрузки не катит).
В процессе пользователь перезагружает браузер и обрывает загрузку.
Нужно удалить созданную запись.

Делаю так:
Код: php
1.
2.
3.
4.
5.
6.
7.
$id = addToDB()

try {
   saveFile();
} catch(Exception $e) {
   deleteFromDB($id);
}


Не работает... Как будто скрипт останавливается при потере соединения
...
Рейтинг: 0 / 0
26.12.2012, 10:51
    #38093016
anvano
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
В мануале написано всё.

http://php.net/manual/en/features.connection-handling.php

попробуйте зарегистрировать свою функцию с помощью register_shutdown_function() и в ней делайте уборку мусора в случае потери соединения.
...
Рейтинг: 0 / 0
26.12.2012, 10:53
    #38093019
phpz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
Shitbox2Пользователь начинает загружать файл. Сразу же создается запись в БД (вариант создать запись после загрузки не катит).
В процессе пользователь перезагружает браузер и обрывает загрузку.
Нужно удалить созданную запись.

Делаю так:
Код: php
1.
2.
3.
4.
5.
6.
7.
$id = addToDB()

try {
   saveFile();
} catch(Exception $e) {
   deleteFromDB($id);
}


Не работает... Как будто скрипт останавливается при потере соединения

Как вариант создавать запись после успешной загрузки файла.
...
Рейтинг: 0 / 0
26.12.2012, 10:58
    #38093030
phpz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
Сори, еще не проснулся :)
...
Рейтинг: 0 / 0
26.12.2012, 11:02
    #38093038
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
Shitbox2,

добавить поле в БД. статус. когда запись просто создается статус =0
когда файл успешно обработан статус меняется на 1.
и тупо удалять все записи у которых статус==0 и время прошло напрмиер час.
...
Рейтинг: 0 / 0
26.12.2012, 14:14
    #38093412
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
Хм... Вот думаю как лучше... ignore_user_abort определяет настройки только того скрипта где вызвана или, вообще, всех скриптов? Так же прочитал, что нельзя установить было ли разорвано соединение, не отравив что-либо пользователю. А отправка левой инфы в планы совсем не входит...

Если завершать скрипт, и запустить функцию обработки разрыва соединения, можно как-нибудь передать ей массив $_REQUEST завершенного скрипта?

О сборке мусора тоже думал, но не пойдет, т.к. пользователь после перезагрузки сразу же увидит пустые элементы. Удалять их надо как можно быстрее, пока страница не успела перезагрузиться и JS не запросил список элементов
...
Рейтинг: 0 / 0
26.12.2012, 15:00
    #38093540
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
Shitbox2Хм... Вот думаю как лучше... ignore_user_abort определяет настройки только того скрипта где вызвана или, вообще, всех скриптов? Так же прочитал, что нельзя установить было ли разорвано соединение, не отравив что-либо пользователю. А отправка левой инфы в планы совсем не входит...

Интересно читал))) я вот почему-то с того же источника вычитал: "в последующем, когда Ваш скрипт попробует вывести что-либо, PHP определит что соединение было разорвано и функция завершения будет вызвана".
А что-либо вывести, как я понимаю, это означает обратиться (или как правильнее сказать...) к потоку для отправки инфы клиенту (если поток разрушен, значит клиент отрубился). А такая отправка происходит в двух случаях: если буферизация не включена, то при вызове любой echo, print и т.д., иначе по окончанию выполнения скрипта.

Думаю по окончанию выполнения скрипт всёровно что-либо в поток да и отправит (или хотя бы проверит существует ли он). Так что функция завершения по окончанию выполнения будет вызвана полюбому.

Думаю как-то так. Если не прав, поправьте пожалуйста, просто возможность интересная, раньше о такой не знал :)
...
Рейтинг: 0 / 0
26.12.2012, 16:04
    #38093693
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
авторПользователь начинает загружать файл. Сразу же создается запись в БД (вариант создать запись после загрузки не катит).
В процессе пользователь перезагружает браузер и обрывает загрузку.

PHP начнет работать только ПОСЛЕ полной загрузки файла.
...
Рейтинг: 0 / 0
27.12.2012, 01:32
    #38094312
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
авторв последующем, когда Ваш скрипт попробует вывести что-либо, это значит, что он уже получил все данные, а как правильно замечено ниже, скрипт начинает работать только после полной загрузки файла. И запустится ли он при обрыве соединения? Может быть просто будет считать, что файл передан частично? Ведь как-то же реализуют докачку
...
Рейтинг: 0 / 0
27.12.2012, 06:23
    #38094351
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
Shitbox2это значит, что он уже получил все данные, а как правильно замечено ниже, скрипт начинает работать только после полной загрузки файла. И запустится ли он при обрыве соединения? Может быть просто будет считать, что файл передан частично? Ведь как-то же реализуют докачку
блин вы меня удивляете. ну зачем гадать на кофейной гуще? зачем строить фантастические предположения, зачем не до конца читать доки???? там же все есть.

1) скрипт начинает работу после полной загрузки файла. если в процессе загрузки были ошибки - то они будут доступный в поле error в $_FILES
2) скрипт запускается только тогда! - когда его запросил(обратился) пользователь. он не имеет интеллекта и не может начать работать сам когда пожелает. все просто как три рубля:
- пользователь посылает запрос на сервер
- на сервере запускается скрипт обрабатывающий этот запрос
- скрипт возвращает результат своей работы в браузер
- пользователь получает этот результат в браузер
3) если вы внимательно прочитаете этидва пункта, то становится ясно как работает докачка. а именно:
- пользователь посылает запрос на доступ к файлу, НО указывает не только его имя но и позицию(в байтах) начиная с которой он ему интересен. т.е. сама программа докачивающая файл получает его порциями и запрашивает его у сервера порциями. магии нет никакой. сказали что дайте файл номер один с 10-го по 150-й байт от начала - его и получили в ответ. общий смысл такой.
...
Рейтинг: 0 / 0
29.12.2012, 16:40
    #38097357
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
Видимо у нас разные доки( В моих (php.net) скромненько все... В общем, при обрыве связи скрипт точно не запустится, даже если прошел заголовок запроса. Понимаю, что так.
С докачкой интересно, с какой стати клиент отдает ПХП-скрипту последующие куски файла по его запросу (ответу т.е.). Получается, что ПХП-скрипт может взять и любой файл закачать на сервер с пользовательского компьютера под видом продолжения.
...
Рейтинг: 0 / 0
29.12.2012, 17:58
    #38097420
phpz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
Shitbox2Видимо у нас разные доки( В моих (php.net) скромненько все... В общем, при обрыве связи скрипт точно не запустится, даже если прошел заголовок запроса. Понимаю, что так.
С докачкой интересно, с какой стати клиент отдает ПХП-скрипту последующие куски файла по его запросу (ответу т.е.). Получается, что ПХП-скрипт может взять и любой файл закачать на сервер с пользовательского компьютера под видом продолжения.
Бред какой-то. Что вы понимаете под докачкой файла? При загрузке файла от клиента к серверу через браузер он всегда отправляется полностью, если сам аплоад не реализован на уровне Blob API .
...
Рейтинг: 0 / 0
29.12.2012, 18:13
    #38097431
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
Тред не читал @ сразу отвечал.
Обычно, для этого есть транзакции...
...
Рейтинг: 0 / 0
30.12.2012, 15:32
    #38097706
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что происходит с php-скриптом, если рвется соединение при загрузке файла?
Докачка это когда заливаешь на сервер фильм, соединение вдруг оборвалось, а потом восстановилось, а файл продолжает закачиваться... Либо пользователь заливает его по второму разу и он закачивается не с нуля, а с того места на котором обрыв произошел
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Что происходит с php-скриптом, если рвется соединение при загрузке файла? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]