|
|
|
| Помогите решить задачку, я использую copy для скачки к себе на сервер файл с удаленного сервера, но вот в чем беда, в момент скачки файла сервер может стать не доступным и тогда например сохраняется пол фильма, как можно решить подобную проблему, что, если файл загрузился не весь, то не сохранять его. | |
|
|
|
|
|
|
|
для: Лена Смирнова
(17.08.2009 в 01:43)
| | Загружать через curl (это не страшно! :] ). Тогда там сможете получить ошибку, вероятнее всего CURLE_PARTIAL_FILE (18), означающую, что файл пришёл более маленький, чем ожидался, то есть загрузка произошла не до конца. | |
|
|
|
|
|
|
|
для: Fractured
(17.08.2009 в 02:41)
| | А конкретней примером можно?
Как сделать, что если есть ошибка, не сохранять файл или удалить не до конца загруженный файл | |
|
|
|
|
|
|
|
для: Лена Смирнова
(17.08.2009 в 01:43)
| | Можно так поступить, если не хотите переходить на курл, сокет.
Что-то в этом роде.
<?
$url = ''; // адрес файла
$headers = get_headers($url, 1);
if($headers['Content-Length'] > 0 && $headers['Content-Type'] != 'text/html') {
// копируем файл, $file -наш файл
if($headers['Content-Length'] != filesize($file)) {
// удаляем не докаченный файл
echo 'Нас обломали!';
}
}
else echo 'Файл не найден!';
?>
|
| |
|
|
|
|
|
|
|
для: а-я
(17.08.2009 в 05:21)
| | Делаю так:
<?
if(!file_exists($newname))
{
Copy($url, "".$newname);
$headers = get_headers($url, 1);
if($headers['Content-Length'] != filesize($newname))
{
echo "error";
unlink("$newname");
exit();
}
?>
|
Но скрипт просто завершается по таймауту и не доходит до строчек проверки размера.
Есть еще советы? | |
|
|
|
|
|
|
|
для: Лена Смирнова
(17.08.2009 в 16:23)
| | ну) фильм за 30 сек не скачать)
Вам обязательно это сделать через PHP? Эт же нагрузка большая! Целый процесс апача буит занят, пока фильм не докачается.
может эт дело отдавать серверу? есть такая возможность?
а на php сделать простое обновление и проверку докачки файла. | |
|
|
|
|
|
|
|
для: Лена Смирнова
(17.08.2009 в 16:23)
| | может как-то так делать? хммм...
<?
$GLOBALS['url'] = $url;
$GLOBALS['newname'] = (string) $newname;
if(!file_exists($GLOBALS['newname'])) {
register_shutdown_function('is_fullfile');
Copy($GLOBALS['url'], $GLOBALS['newname']);
}
function is_fullfile() {
$headers = get_headers($GLOBALS['url'], 1);
if($headers['Content-Length'] != filesize($GLOBALS['newname']))
unlink($GLOBALS['newname']);
}
?>
|
| |
|
|
|
|
|
|
|
для: а-я
(17.08.2009 в 18:53)
| | Опишите словами, что происходит в этом коде? | |
|
|
|
|
|
|
|
для: Лена Смирнова
(24.08.2009 в 16:44)
| | Перед тем как начинаете качать файл запоминайте где то что вы начали его качать. А при успешном завершении убирайте этот флаг. А дальше каким то скриптом проверяйте периодически у каких файлов уже продолжительное время стоит флаг закачки и удаляйте эти файлы. | |
|
|
|
|
|
|
|
для: Евгений Петров
(24.08.2009 в 16:57)
| | Вообще-то shutdown-функция не вызывается, если тип завершающей ошибки Fatal error.
Извините, правильней адресовать не Вам.
| |
|
|
|
|
|
|
|
для: Евгений Петров
(24.08.2009 в 16:57)
| | Спасибо, использую именно ваш метод! | |
|
|
|
|
|
|
|
|
для: а-я
(24.08.2009 в 17:34)
| | Вообще-то shutdown-функция не вызывается, если тип завершающей ошибки Fatal error. | |
|
|
|
|
|
|
|
для: Fractured
(24.08.2009 в 19:17)
| | завершение лимита - это Fatal error? | |
|
|
|
|
|
|
|
для: а-я
(24.08.2009 в 20:11)
| | Да | |
|
|
|
|
|
|
|
для: Fractured
(24.08.2009 в 20:26)
| | манул о другом говорит, при зависании скрипта, как раз на эту функцию все ссылки. | |
|
|
|
|
|
|
|
для: а-я
(24.08.2009 в 20:34)
| | 1. Покажите где Вы такое нашли (это надо делать сразу, чтобы не тратить время).
2. Сами бы проверили.
3. Разве было бы логичным позволять пользователю после завершения максимального времени выполнения скрипта выполнять ещё какой-то код? | |
|
|
|
|
|
|
|
для: Fractured
(24.08.2009 в 21:21)
| | 1)
читаем "внимание", красным выделено -
как я понял, если уснул скрипт.
2)
2009/8/21 Dmitry Koterov <dmitry.kote...@gmail.com>
> register_shutdown_function'ом - нельзя (он не вызывается при fatal error).
Вообще говоря вызывается:
[weirdan@home ~]$ php -r '
function a() {var_dump(microtime(true), "sss");}
register_shutdown_function("a"); var_dump(microtime(true)); qwe();
'
float(1250890575.7799)
Fatal error: Call to undefined function qwe() in Command line code on line 1
float(1250890575.7802)
string(3) "sss"
[weirdan@home ~]$ php -v
PHP 5.2.8 (cli) (built: Dec 23 2008 17:27:24)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
[weirdan@home ~]$
|
пробуем сами
<?
function fun() {
echo 'time: '.time();
}
register_shutdown_function('fun');
neizvestno();
echo 'работает?';
?>
|
результат:
Fatal error: Call to undefined function neizvestno() in Z:\...\www\index.php on line 7
time: 1251145813
|
вроде фатальная ошибка и оборвалась работа после неизвестной функции neizvestno() ,
а функция fun() сработала. | |
|
|
|
|
|
|
|
для: а-я
(25.08.2009 в 00:32)
| | > 1)
> читаем "внимание", красным выделено -
> как я понял, если уснул скрипт.
Я не уловил Вашу мысль. Мы говорим об обратной ситуации, когда скрипт завершается преждевременно.
2) Да, интересно.
Но тем не менее, мы говорим о завершении скрипта по истечении максимального времени выполнения скрипта. Именно это попробуйте протестировать. А то это ближе к "в огороде бузина..." | |
|
|
|
|
|
|
|
для: Лена Смирнова
(24.08.2009 в 16:44)
| | - | |
|
|
|