Автоматичная закачка файла - альтернатива FTP ?

Discussion in 'PHP' started by ^_WhitE_DeMoN_^, 30 Apr 2010.

  1. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    Сдесь:
    PHP:
    echo tpl_l(print_r(HTTP_request($serv$port$timeout$host$addr$post$cookie)), C_RESULT);

    Вот из за какогото [censored] и его [censored] настройки сервака, должен извращатся а не радоватся file_get_contents()
    Ну никак не пашет !
     
  2. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    Да сделай по изврату ) Обычно, когда делать совсем нех. пользуешься извратом )
    Короче )
    На сайте, где хочешь сохранить файл (куда закачивать) делаешь форму, ну обычную, типа закачать файл.
    PHP:
    <?php
    if($_FILES["filename"]["name"] == null) {
        echo 
    "NO FILE";
        exit;


    if(
    copy($_FILES["filename"]["tmp_name"],
    $_SERVER['DOCUMENT_ROOT']."/".$_FILES["filename"]["name"]))
       {
         echo 
    "OK";
       } else {
          echo 
    "ERROR";
       }
    ?>
    А на сервере, откуда заливать файл (базу) делаешь токой скрипт:
    PHP:
    <?php
    $file 
    "baza.sql"// Должен лежать в каталоге со скриптом
    $post_data '-----------------------------01010
    Content-Disposition: form-data; name="filename"; filename="'
    .$file.'"

    -----------------------------01010
    Content-Type: application/octet-stream

    '
    .file_get_contents('baza.sql').'
    -----------------------------01010--'
    ;
    $ch=curl_init();
    curl_setopt($chCURLOPT_URL'http://server.ru/upload.php');
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($ch,CURLOPT_HTTPHEADER,array (
            
    "Content-Type: multipart/form-data; boundary=---------------------------01010",
        ));
    curl_setopt($chCURLOPT_HEADER0);
    curl_setopt($chCURLOPT_REFERER'http://server.ru/test.html');  
    curl_setopt($chCURLOPT_POST1);  
    curl_setopt($chCURLOPT_POSTFIELDS,$post_data); 
    $result curl_exec($ch);
    echo 
    $result;
    ?>
    И если все замечательно, то скрипт покажет OK и сохранит файл в server.ru/files/

    Ну это конечно извращенно, вообщем хз, что еще посоветовать )
     
  3. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    эм.. что за echo tpl_l();

    HTTP_request() вернёт МАССИВ, где первый элемент с ключем 0 будет true или false, второй элемент с индексом 1 — текст ошибки (в случае, если первый false) или ответ сервера (если первый элемент - true, т.е. коннект удался)

    присвой значение переменной и бери условие...
    PHP:
    $Result=HTTP_request();
    if(
    $Result[0]){
       echo 
    "запрос отправил, вот ответ:\r\n".$Result[1];
    }else{
       echo 
    "Не удалось соедениться с сервером, вот текст ошибки:\r\n".$Result[1];
    }
     
    #23 roxblnfk, 21 May 2010
    Last edited: 21 May 2010
  4. gisTy

    gisTy Elder - Старейшина

    Joined:
    24 May 2008
    Messages:
    432
    Likes Received:
    160
    Reputations:
    27
    ты думаешь, что админы дурачки и отключив сокеты и урл_фопен оставили работать курл? ну-ну
     
  5. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    считай, готовое решение

    ^_WhitE_DeMoN_^,
    написал передачу файла по посту по кускам (ограничение размера файла - 2 гига ровно минус 1 байт)
    Да и пост у меня по кускам :) собирай..

    PHP:
    function pro_HTTP_($SOCKET$HEAD, &$CONTENT){
        
    $SOCKETs=array(
            
    'Socket-Address'=>'localhost',
            
    'Socket-Port'=>80,
            
    'Socket-Timeout'=>10,
            
    'Socket-DownLimit'=>null    // null-без лимита
        
    );
        
    $HEADs=array(
            
    // САМЫЕ ОСНОВНЫЕ :)
            
    'Method'=>null,                // если не указано, устанавливается автоматически GET или POST [GET POST PUT OPTIONS HEAD DELETE PATCH TRACE LINK UNLINK]
            
    'URI'=>'/',
            
    'HTTP'=>'HTTP/1.1',
            
    // ОСНОВНЫЕ            // Знак ? означает, что заголовок не фильтруется и всё, что вы через него передадите, выведется в чистом виде
                                // Формат даты (пример): Sun, 06 Nov 1994 08:49:37 GMT
            
    'Cache-Control'=>null,            //?    Основные директивы для управления кэшированием.
            
    'Connection'=>false,             //    Сведения о проведении соединения // false=Close;true=Keep-Alive;если число, то добавляется Keep-Alive: с этим числом
            
    'Date'=>null,                     //?    Дата генерации отклика.
            
    'MIME-Version'=>null,             //?    Версия протокола MIME по которому было сформировано сообщение.
            
    'Pragma'=>null,                   //?    Особенные опции выполнения операции.
            
    'Trailer'=>null,                  //?    Список полей, имеющих отношение к кодированию сообщения при передаче.
            
    'Transfer-Encoding'=>null,        //?    Список способов кодирования, которые были применены к сообщению для передачи.
            
    'Upgrade'=>null,                  //?    Список предлагаемых клиентом протоколов. Сервер указывает один протокол.
            
    'Via'=>null,                      //?    Список версий протокола, названий и версий прокси-серверов через которых прошло сообщение.
            
    'Warning'=>null,                //?    Код, агент, сообщение и дата если возникла критическая ситуация.
            //    ЗАПРОС
            
    'Accept'=>null,                    //    Список допустимых форматов ресурса.
            
    'Accept-Charset'=>null,            //?    Перечень поддерживаемых кодировок для предоставления пользователю
            
    'Accept-Encoding'=>null,        //?    Перечень поддерживаемых способов кодирования содержимого сущности при передаче.[gzip,deflate],compress,x-gzip,x-compress
            
    'Accept-Language'=>null,        //    Список поддерживаемых естественных языков.
    /*    */    
    'Authorization'=>null,            //!    Данные для авторизации.
            
    'Expect'=>null,                    //?    HTTP/1.1v2     Указывает серверу что клиент ожидает от него дополнительного действия.
            
    'From'=>null,                    //    Адрес электронной почты ответственного лица со стороны клиента.
            
    'Host'=>true,                    //    Доменное имя и порт хоста запрашиваемого ресурса. Необходимо для поддержки виртуального хостинга на серверах.// Если true, то заполняется из сокета
            
    'If-Match'=>null,                //?    Список тегов версий сущности. Выполнять метод если они существуют.
            
    'If-Modified-Since'=>null,        //?    Дата. Выполнять метод если сущность изменилась с указанного момента. Используется только для метода обработки GET
            
    'If-None-Match'=>null,            //?    Список тегов версий сущности. Выполнять метод если ни одного из них не существует.
            
    'If-Range'=>null,                //?    Список тегов версий сущности или дата для определённого фрагмента сущности.
            
    'If-Unmodified-Since'=>null,    //?    Дата. Выполнять метод если сущность не изменилась с указанной даты.
            
    'Max-Forwards'=>null,            //?    Максимально допустимое количество переходов через прокси.
    /*    */    
    'Proxy-Authorization'=>null,    //!    Информация для авторизации на прокси-сервере.
            
    'Range'=>null,                    //    Байтовые диапазоны для запроса фрагментов ресурса. Подробности: Частичные GET.    [bytes=64397516-80496894]
            
    'Referer'=>null,                  //    URI ресурса, после которого клиент сделал текущий запрос.// если true, то берётся из адреса
            
    'TE'=>null,                       //?    HTTP/1.1v2     Список расширенных способов кодирования при передаче.
            
    'User-Agent'=>null,                //?    Список названий и версий клиента и его компонентов с комментариями.
            // СОДЕРЖИМОЕ (СУЩНОСТИ) CONTENT
            
    'Content-Disposition'=>null,      //?    Способ распределения сущностей в сообщении при передачи нескольких фрагментов.
            
    'Content-Encoding'=>null,         //?    Способ кодирования содержимого сущности при передаче.
            
    'Content-Language'=>null,         //    Один или несколько естественных языков содержимого сущности
            
    'Content-Length'=>null,           //    Размер содержимого сущности в байтах.    // если передаётся в $CONTENT, то будет заполнено автоматически, лучше не трогать
            
    'Content-Location'=>null,         //?    Альтернативное расположение содержимого сущности.
            
    'Content-MD5'=>null,              //?!MD5-хэш сущности для проверки целостности.    // для автоматического заполнения перевести в ture
            
    'Content-Range'=>null,            //?    Байтовые диапазоны передаваемой сущности если возвращается фрагмент. Подробности: Частичные GET.
            
    'Content-Type'=>null,            //    Формат и способ представления сущности.
            
    'Content-Version'=>null,          //?    Информация о текущей версии сущности.
            
    'Derived-From'=>null,             //?    Информация о текущей версии сущности.
            
    'Last-Modified'=>null,            //?    Дата последней модификации сущности.
            
    'Link'=>null,                     //?    Указывает на логически связный с сущностью ресурс аналогично тегу <LINK>  в HTML.
            
    'Title'=>null                    //?    Заголовок сущности.
        
    );
        foreach(
    $SOCKETs as $k=>$v){ if(isset($SOCKET[$k])) $SOCKETs[$k]=$SOCKET[$k]; }
        
    $keys=array_keys($HEADs);
        
    $lim=count($keys);
        for(
    $i=0;$i<$lim;$i++){
            
    $Head=$keys[$i];
            
    $Value=$HEADs[$Head];
            if(isset(
    $HEAD[$Head])){ if($HEAD[$Head]!==''$HEADs[$Head]=$HEAD[$Head]; }
            elseif(
    is_null($Value)) unset($HEADs[$Head]);
        }
        if((string)
    $HEADs['URI']=='')    $HEADs['URI'] ='/';            else $HEADs['URI'] =(string)$HEADs['URI'];
        if((string)
    $HEADs['HTTP']=='')    $HEADs['HTTP']='HTTP/1.1';    else $HEADs['HTTP']=(string)$HEADs['HTTP'];
        if(
    $HEADs['Connection']){
            if(
    is_numeric($HEADs['Connection'])) $HEADs['Keep-Alive']=intval($HEADs['Connection']);
            
    $HEADs['Connection']='Keep-Alive';
        }else 
    $HEADs['Connection']='Close';
        if(isset(
    $HEADs['Host'])){ if($HEADs['Host']===true || strlen($HEADs['Host'])==0)$HEADs['Host']=$SOCKETs['Socket-Address']; }
        if(isset(
    $HEADs['Referer'])) if($HEADs['Referer']===true$HEADs['Referer']=$HEADs['URI'];
        
    $Content='';
        if(isset(
    $CONTENT)) if(is_array($CONTENT)){
            if(isset(
    $CONTENT)) if(isset($CONTENT['POST'])) if(is_array($CONTENT['POST'])) if(count($CONTENT['POST'])>0){
                
    $HEADs['Method']='POST';$MIME=false;
                
    $keys=array_keys($CONTENT['POST']);$lim=count($keys);
                for(
    $i=0;$i<$lim;$i++){ if(is_array($CONTENT['POST'][$keys[$i]])){    $MIME=true; break; } }
                
    $Length=0;
                if(
    $MIME){
                    
    $boundarysubstr(sha1(md5(mktime())), 4, -4);
                    
    $boundary$boundary.strtoupper(md5($boundary)); $boundary{10}='+'$boundary{12}='_'//получение более-менее уникальной границы
                    
    $HEADs['Content-Type']='multipart/form-data; boundary="'.$boundary.'"';
                    foreach(
    $CONTENT['POST'] as $Keyko=>$Postec){
                        if(
    is_array($Postec)){
                            
    $Content.="--$boundary\r\nContent-Disposition: form-data";
                            if(isset(
    $Postec['name'])) $Content.='; name="'.$Postec['name'].'"'; else $Content.='; name="'.$Keyko.'"';
                            if(isset(
    $Postec['filename']))$Content.='; filename="'.$Postec['name'].'"';
                            
    $Content.="\r\n";
                            foreach(
    $Postec as $K=>$V){ if($K!='' && $K!='name' && $K!='Content-Disposition'$Content.="$K$V\r\n"; }
                            
    $Content.="\r\n".@$Postec['']."\r\n";
                        }else 
    $Content.="--$boundary\r\nContent-Disposition: form-data; name=\"$Keyko\"\r\n\r\n$Postec\r\n";
                    }
                    
    $Content.="--$boundary--";
                    
    $Length=strlen($Content);
                }else{
                    foreach(
    $CONTENT['POST'] as $k=>$v){
                        
    $Content.=trim($k).'='.urlencode($v).'&'
                        
    $Length+=2+strlen(trim($k))+strlen($v);
                    }
                    
    $Length-=1;
                    
    $Content=substr($Content,0,-1);
                    
    $HEADs['Content-Type']='application/x-www-form-urlencoded';
                }
                if(isset(
    $HEADs['Content-Length'])) if($HEADs['Content-Length']===true$HEADs['Content-Length']=$Length;
                if(isset(
    $HEADs['Content-MD5'])) if($HEADs['Content-MD5']===true$HEADs['Content-MD5']=md5($Content);
            }
            
    // cookie
            
    if(isset($CONTENT)) if(isset($CONTENT['Cookie'])) if(is_array($CONTENT['Cookie'])) if(count($CONTENT['Cookie'])>0){
                
    $HEADs['Cookie']='';
                foreach(
    $CONTENT['Cookie'] as $k=>$v){ $HEADs['Cookie'].=(string)$k.'='.urlencode($v).'; '; }
                
    $HEADs['Cookie']=substr($HEADs['Cookie'],0,-2);
            }
            if(isset(
    $CONTENT)) if(isset($CONTENT['Authorization'])) if(is_array($CONTENT['Authorization'])){
                if(isset(
    $CONTENT['Authorization']['userid']) && isset($CONTENT['Authorization']['password']))
                    
    $HEADs['Authorization'] = 'Basic '.base64_encode(str_replace(':'''$CONTENT['Authorization']['userid']).':'.$CONTENT['Authorization']['password']);
            }
        }
        if(isset(
    $HEADs['Content-MD5'])) if($HEADs['Content-MD5']===true) unset($HEADs['Content-MD5']);
        if(!
    in_array(@$HEADs['Method'],array('GET''POST''PUT''OPTIONS''HEAD''DELETE''PATCH''TRACE''LINK''UNLINK')))$HEADs['Method']='GET';
        
    $Send=$HEADs['Method'].' '.$HEADs['URI'].' '.$HEADs['HTTP'];unset($HEADs['Method'], $HEADs['URI'], $HEADs['HTTP']);
        
    $keys=array_keys($HEADs);$lim=count($keys);
        for(
    $i=0;$i<$lim;$i++){
            
    $Head=$keys[$i];
            
    $Value=$HEADs[$Head];
            
    $Send.="\r\n$Head$Value";
        }
        
    $Send.="\r\n\r\n".$Content;
        if(
    false!=($f=@fsockopen($SOCKETs['Socket-Address'], $SOCKETs['Socket-Port'], $errno$errstr$SOCKETs['Socket-Timeout']))){
            if(!isset(
    $SOCKETs['Socket-DownLimit'])) $ByteLimit=-1;
            elseif (
    intval($SOCKETs['Socket-DownLimit'])>=0$ByteLimit=intval($SOCKETs['Socket-DownLimit']);
            else 
    $ByteLimit=-1;
            
    fputs ($f$Send);
            
    $Str='';
            if(
    $ByteLimit>0){
                
    $Downed=0;
                
    set_time_limit(5);
                while(!
    feof($f) && $Downed<$ByteLimit){
                    
    $Str.=fread($f$ByteLimit-$Downed);
                    
    $Downed=strlen($Str);
                }
            }elseif(
    $ByteLimit<0){ while(!feof($f)){ $Str.=fgets($f512); } }
            
    fclose($f);
        }else return array(
    false$errstr$Send);
        return array(
    true$Str$Send);
    }
    Вот функция, её добавить в ниже указанный код
     
    1 person likes this.
  6. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    Код скрипта, отправляющего файл: (форум может поставить пробелы где не надо, но я старался делить длинные строки)
    <?
    PHP:
    /* Ф У Н К Ц И Ю    В С Т А В И Т Ь    С Ю Д А
    ОПИСАНИЕ:::::::ФУНКЦИИ
    Возвращает array ($Connected{true,false}, $Str{string}, $Send{string}(отправленный запрос))
        Если $Connected==true, то $Str - ответ сервера, иначе $Str - текст ошибки сокета
    В функцию передаются 3 массива
    $SOCKET доолжен содержать значения:
        'Socket-Address'=>    адрес сервера (ip или домен)
        'Socket-Port'=>        удалённый порт (обычно 80)
        'Socket-Timeout'=>    максимальное время ожидания соединения
        'Socket-DownLimit'=>ограничение на длину ответа (Байт). null - без ограничения, функция закачает и выдаст полный ответ сервера
    $HEAD
        Смотрите описание заголовков в функции
        Все неуказанные заголовки либо берутся автоматически (важные), либо игнорируются (второстепенные)
    $CONTENT
        Указывайте тут POST данные, куки, логины и пароли для доступа
            'Cookie'=>array('name'=>'ROX','session'=>'asagjreht89pqypgr7w5e4p',...)                // передавайте в ассоциативном массиве Имя=>Значение
            'POST'=>array(),
                // Пост запрос можно организовать двумя способами:
                1. Если нужно послать текстовые переменные, заполняйте массив как в случает с COOKIE (значения подвергаются urlencode)
                2. Если нужно передать файлы и тексты, воспользуйтесь передачей множественного содержимого (см. MIME)
                    В этом случае массив примет вид:
                    $CONTENT['POST']=array(
                        array(
                            'name'=>'Это имя переменной (формы)',     // если не указано, то берётся ключ этого суб-массива (0) 
                                                                    // 'name' соответствует атрибуту name в HTML-тегах <INPUT>  и <TEXTAREA>
                            'filename'=>'image.jpg',    //    Если передаете файл, укажите имя файла
                            'Content-Type'=>'image/jpeg',    // при передаче файла укажите формат файла
                            'Content-Transfer-Encoding'=>'binari',    // бинарный файл, содержимое не закодировано
                            ''=>'Собственно, само содержимое. Практически тут может быть всё что угодно',    // не подвергается кодированию // ключ элемента - пустая строка
                        ),
                        array(
                            ''=>'текст' // здесь name=>1
                        ),
                        'ololo'=>array(
                            ''=>'тело объекта' // здесь name=>'ololo'
                        )
                    );
                    Заголовок каждого содержимого постоянен =>>> Content-Disposition: form-data
            'Authorization'=>array(Login, Password),        // Авторизация на сайте
            1 Базовая схема установления подлинности (Basic Authentication Scheme)
                'Authorization'=>array(
                    'userid'=>'User'        //    идентификатор клиента
                    'password'=>'123'        //    пароль
                )
        [x]    2 Обзорная схема установления подлинности (Digest Authentication Scheme); Обзорное установление подлинности для HTTP определяется в RFC 2069 [32] 2617 oO. // НЕ РЕАЛИЗОВАНО
        [x]    'Proxy-Authorization'=>array(Login, Password),    // Авторизация на HTTP прокси // НЕ РЕАЛИЗОВАНО
    */

    $File='./de_baghdad2.rar';
    $SizeLimit=512*1024;//500KB
    $ReSend=5;

    $SOCKET=array('Socket-Address'=>'127.0.0.1''Socket-Port'=>80'Socket-Timeout'=>10'Socket-DownLimit'=>null);
    $CONTENT=array( 'Authorization' => array('userid'=>'User''password'=>'123'));
    $HEAD=array(
            
    'URI'=>'/get_file.php',
            
    'Connection'=>false,
            
    'Host'=>true,
            
    'Content-Length'=>true,           //    Размер содержимого сущности в байтах.    // если передаётся в $CONTENT, то будет заполнено автоматически, лучше не трогать
            
    'Content-MD5'=>true,              //    MD5-хэш сущности для проверки целостности.    // для автоматического заполнения перевести в ture
        
    );
    if(
    is_file($File))if(is_readable($File)){
        
    $Size=filesize($File);
        
    $For=ceil($Size/$SizeLimit);
        if(
    $For>0) if(false!==($FP=fopen($File,'r'))){
            
    flock($FP,LOCK_SH);
            
    $Sendet=0;
            
    $MD5File=md5_file($File);
            for(
    $i=0$i<$For$i++){
                
    fseek($FP, ($i*$SizeLimit) ,SEEK_SET);
                
    $Segment=fread($FP$SizeLimit);
                
    $CONTENT['POST']=array(
                    array(
                        
    'name'=>'md5file',
                        
    ''=>$MD5File
                    
    ),
                    array(
                        
    'name'=>'fullsize',
                        
    ''=>$Size
                    
    ),
                    array(
                        
    'name'=>'start',
                        
    ''=>($i*$SizeLimit)
                    ),
                    array(
                        
    'name'=>'end',
                        
    ''=>min(($i*$SizeLimit+$SizeLimit),$Size)
                    ),
                    array(
                        
    'name'=>'md5segment',
                        
    ''=>md5($Segment)
                    ),
                    array(
                        
    'name'=>'filename',
                        
    ''=>substr(strrchr(str_replace("\\",'/',$File),'/'),1)
                    ),
                    array(
                        
    'name'=>'segmentname',
                        
    ''=>'segment'
                    
    ),
                    array(
                        
    'name'=>'segment',
                        
    'filename'=>'segment',
                        
    'Content-Transfer-Encoding'=>'binari',
                        
    ''=>$Segment
                    
    )
                );
                
    $Sendet=false;
                
    $j=0;
                while(!
    $Sendet && $j<$ReSend){
                    
    $j++;
                    
    $Result=pro_HTTP_($SOCKET$HEAD$CONTENT);
                    
    $Sendet=$Result[0];
                    
    $Text=$Result[1];
                }
                if(!
    $Sendet){echo 'Файл не удалось отправить. Возникла ошибка на '.$i.' сегменте: '.$Text; break;}
                echo 
    strval($i+1)."-й пошёл!\r\n";
                echo 
    $Result[1]."\r\n\r\n<br>\r\n\r\n";
                
    //echo strlen($Segment);
                //print_r($CONTENT);
            
    }
            
    flock($FP,LOCK_UN);
            
    fclose($FP);
        }else echo 
    'Не удалось открыть файл';
        else echo 
    'Файл нулевого размера.';
    }
    ?>
     
    #26 roxblnfk, 22 May 2010
    Last edited: 22 May 2010
  7. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    зы: функция 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$StartSEEK_SET);
                                
    fputs($fpfile_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 
    'ПОСТ ПЕРЕДАН НЕ ВЕСЬ!';
            }
    }
    ?>

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

    жаль за работу денег на платят :(
     
  8. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    ТС уже забил на тему? :(
     
  9. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    Да не, просто времени нету тестить - работы пох...
    Скоро активизируюсь.

    echo tpl_l() - выводит результат в теплейте (оформлен)
     
  10. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    Очевидно дурачки :D
    Еще не тестил, но из форума хоста понел что курл наш :)
     
  11. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    Такой вот фрагмент - не выводит ничего ! :confused:
    PHP:
    $timeout=30;    // таймаут соединения 
                
    $post=array('b' => $this->filename);    // массив с переменными в формате ($var1 => $value1, $var2 => $value2...) {в $var# желательно использовать только латину} 
                
    $cookie=array();// cookies заполняется аналогично $post 
                
    $rezult HTTP_request($serv$port$timeout$host$addr$post$cookie);
                echo 
    tpl_l($rezult[0].' --- '.$rezult[1], C_RESULT);
                if(
    $rezult[0]){ 
       echo 
    tpl_l("запрос отправил, вот ответ:\r\n".$rezult[1], C_RESULT);
    }else{ 
       echo 
    tpl_l("Не удалось соедениться с сервером, вот текст ошибки:\r\n".$rezult[1], C_RESULT);
     
  12. roxblnfk

    roxblnfk Elder - Старейшина

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    если убрать твой tpl_l то всё нормально выводит :) (либо текст ошибки, либо контент страницы)
    а вобще, в трёх своих предыдущих постах текущей темы я всю твою задачу решил... (там уже другая функция)
     
  13. ^_WhitE_DeMoN_^

    Joined:
    1 Mar 2009
    Messages:
    101
    Likes Received:
    10
    Reputations:
    0
    Логики нет. Посмотрим...

    Но я никуда не спешу (уже...), все протестирую (что как заработает) и репу колотить буду, спасиб ;)