Здравствуйте уважаемые php-кодеры!
Сегодня наткнулся та такую интересную ситуацию, что хочу поведать её вам и спросить естественно, как быть в таком случае.
В скрипте выполняющем копирование с какого-то сайта на мой FTP есть такие строки:
PHP |
//копируем файл if (copy($fil,$to_fil)) {$copy=true; //нужный мне флажок fwrite($fh_logi,date('m.d.y H:i:s')." ".$kolt."_".$ko_raz.". Файл ".basename($fil)." скопирован...\n");//записали в лог //запишем имя скопированного в файл, для последующего учета $datfiledow = fopen($file_download,"a"); //открыли файл для дозаписи fwrite($datfiledow,trim(basename($fil))."\n");//записали fclose($datfiledow);//закрыли файл } else {$copy=false; fwrite($fh_logi,date('m.d.y H:i:s')." Не могу скопировать ".basename($fil)." ждем ".$time_copy." секунд\n");//записали в лог sleep($time_copy);//ждем, потом срабатывает while и пробуем снова } |
так вот, мне интересно, что вернет функция copy в случае неожиданного отключения сайта-источника?
Я по этому и спрашиваю, что в моем случае файл не докачался, а условие if с большим упорством ответило: "Надо писать, что файл удачно скопирован."
Что посоветуете, большие умы?
Пока думаю, можно перед строкой:
PHP |
//запишем имя скопированного в файл, для последующего учета |
сделать дополнительную проверку на наличие связи. Может есть другое решение?
Спустя 1 час, 4 минуты, 23 секунды (10.02.2009 - 20:13) REANIMATOR написал(а):
можно например проверить есть ли скопированый файл в директории. Или\и проверить одного ли размера источник и новый файл. А соеденение проверять нет смысла, я думаю. Т.к. оно может востановиться межуду сбоем копирования и когда ты его проверишь.
Хотя впринципе эта функция возвращает фалс при сбое ... (странно)
Спустя 1 час, 52 минуты, 35 секунд (10.02.2009 - 22:05) ZHN написал(а):
Цитата (REANIMATOR @ 10.02.2009 - 17:13) |
можно например проверить есть ли скопированый файл в директории. Или\и проверить одного ли размера источник и новый файл. А соеденение проверять нет смысла, я думаю. Т.к. оно может востановиться межуду сбоем копирования и когда ты его проверишь. Хотя впринципе эта функция возвращает фалс при сбое ... (странно) |
так скопированный файл имеется, но не докачанный до конца
Спустя 2 часа, 6 минут, 39 секунд (11.02.2009 - 00:12) REANIMATOR написал(а):
тогда второй вариант думаю поможет
Цитата (ZHN @ 10.02.2009 - 19:05) |
проверить одного ли размера источник и новый файл. |
это для проверки отдалённого файла. А с фтп надеюсь справишься
PHP |
function urlfilesize($url,$thereturn) { if (substr($url,0,4)=='http') { $x = array_change_key_case(get_headers($url, 1),CASE_LOWER); $x = $x['content-length']; } else { $x = @filesize($url); } if (!$thereturn) { return $x ; } elseif($thereturn == 'mb') { return round($x / (1024*1024),2) ; } elseif($thereturn == 'kb') { return round($x / (1024),2) ; } } |
_____________