Показать сообщение отдельно

  #28  
Старый 22.05.2010, 00:18
roxblnfk
Познающий
Регистрация: 07.02.2010
Сообщений: 70
С нами: 8557551

Репутация: 56
Arrow

зы: функция pro_HTTP_() ещё не доделана, но в заданном условии работает как надо. Надо ещё сделать прокси и Digest (который всё-равно не сделаю, намудрили в спецификации, да и апач не поддерживает полностью)

Скрипт, принимающий файл: (там попутно указаны некоторые опции типа логина и пароля, имени файла... лучше изучить)

<?
PHP код:
$MessageA = 'Authorise, please';
$MessageB = 'Bad password or login';
function 
q_auth($Inp){
    
header('WWW-Authenticate: Basic realm="'.$Inp.'"');
    
header('HTTP/1.0 401 Unauthorized');
}
if (!isset(
$_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])){
    
q_auth($MessageA);
}else{
    
$User=(string)$_SERVER['PHP_AUTH_USER'];
    
$Password=(string)$_SERVER['PHP_AUTH_PW'];
        
// контроль передачи данных для отладки
        // ob_start();
        // print_r($_FILES);
        // print_r($_POST);
        // $To=ob_get_contents();
        // ob_end_flush ();
        // $fp = fopen ('./sending file oO.txt','a');
        // flock ($fp,LOCK_EX);
        // fputs($fp,$To);
        // flock ($fp,LOCK_UN);
        // fclose($fp);
        
if($User!=='User' || $Password!=='123'){
            
q_auth($MessageB);
        }else{
            
// Сохраняем по кускам файл
            
echo "ПОГНАЛИ!\r\n";
            if(isset(
$_POST['md5file']) && isset($_POST['start']) && isset($_POST['end']) && isset($_POST['fullsize']) 
                        && isset(
$_POST['md5segment']) && isset($_POST['filename']) && isset($_POST['segmentname'])){
                
$SegmentName=$_POST['segmentname'];
                
$Start=intval($_POST['start']);
                
$End=intval($_POST['end']);
                
$Size=$End-$Start;
                
$FullSize=$_POST['fullsize'];
                
$md5file=$_POST['md5file'];
                
$md5segment=$_POST['md5segment'];
                echo 
"ПОСТ ПРИШЁЛ! Size=$Size\r\n";
                if(
$Size>0){
                    echo 
"РАЗМЕРЧИК НЕ ДЕРЬМО!\r\n";
                    if(isset(
$_FILES[$SegmentName])){
                        echo 
"СЕГМЕНТ ДЕТЕКТЕД!\r\n";
                        if(
$_FILES[$SegmentName]['size']==$Size && md5_file ($_FILES[$SegmentName]['tmp_name']) === strtolower($md5segment)){
                            
//$CustomFileName=$_POST['filename'];// ненадёжно, нужны фильтры и проверки
                            
$CustomFileName='./NotFileName.rar';
                            
$fp = fopen ($CustomFileName,'a+');
                            
flock($fp,LOCK_EX);
                            
fseek($fp, $Start, SEEK_SET);
                            
fputs($fp, file_get_contents ($_FILES[$SegmentName]['tmp_name']));
                            
flock($fp,LOCK_UN);
                            
fclose($fp);
                            if(
$End==$FullSize) if(md5_file($CustomFileName) === strtolower($md5file)) echo 'ФАЙЛ ЗАПИСАН КАК НАДО И ПОЛНОСТЬЮ! УРА! xD';
                            else echo 
'ПИПЕЦ!';
                            else echo 
'СЕГМЕНТ ЗАПИСАН!';
                        }else echo 
"НАЕ*А! size=".($_FILES[$SegmentName]['size'])."? если да, то md5 не тот\r\n";
                    }else echo 
'А ФАЙЛ ТО ЗАБЫЛ ПЕРЕДАТЬ?';
                }else echo 
'ПОПУТАЛ РАЗМЕРЧИК! ';
            }else echo 
'ПОСТ ПЕРЕДАН НЕ ВЕСЬ!';
        }
} 
?>

В ходе теста файл отлично передался, вот мой результат

Цитата:
1-й пошёл!
HTTP/1.1 200 OK
Date: Fri, 21 May 2010 19:59:48 GMT
Server: Apache/2.2.14 (Win32) PHP/5.3.1
X-Powered-By: PHP/5.3.1
Content-Length: 77
Connection: close
Content-Type: text/html

ПОГНАЛИ!
ПОСТ ПРИШЁЛ! Size=524288
РАЗМЕРЧИК НЕ ДЕРЬМО!
СЕГМЕНТ ДЕТЕКТЕД!


<br>

2-й пошёл!
HTTP/1.1 200 OK
Date: Fri, 21 May 2010 19:59:48 GMT
Server: Apache/2.2.14 (Win32) PHP/5.3.1
X-Powered-By: PHP/5.3.1
Content-Length: 77
Connection: close
Content-Type: text/html

ПОГНАЛИ!
ПОСТ ПРИШЁЛ! Size=524288
РАЗМЕРЧИК НЕ ДЕРЬМО!
СЕГМЕНТ ДЕТЕКТЕД!


<br>

3-й пошёл!
HTTP/1.1 200 OK
Date: Fri, 21 May 2010 19:59:48 GMT
Server: Apache/2.2.14 (Win32) PHP/5.3.1
X-Powered-By: PHP/5.3.1
Content-Length: 119
Connection: close
Content-Type: text/html

ПОГНАЛИ!
ПОСТ ПРИШЁЛ! Size=459218
РАЗМЕРЧИК НЕ ДЕРЬМО!
СЕГМЕНТ ДЕТЕКТЕД!
ФАЙЛ ЗАПИСАН КАК НАДО И ПОЛНОСТЬЮ! УРА! xD

<br>
жаль за работу денег на платят
 
Ответить с цитированием