Ignore:
Timestamp:
05/11/11 17:03:17 (13 years ago)
Author:
adriano
Message:

Ticket #1876 - Problemas na exportacao de mensagem - corrige problemas na exportacao de mensagens do Expresso Mail

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sandbox/2.2.0.2/expressoMail1_2/inc/gotodownload.php

    r3369 r4348  
    88} 
    99require_once '../../header.inc.php'; 
    10  
     10        //TODO: alterar a string /tmp logo abaixo, pelo caminho temporario configurado no expresso        
     11        $GLOBALS['phpgw_info']['server']['download_temp_dir'] = "/tmp";  
    1112 
    1213        $msg_number = $_GET['msg_number']; 
    1314        $idx_file = $_GET['idx_file']; 
    14         $newfilename = html_entity_decode(rawurldecode($_GET['newfilename'])); 
     15        $newfilename = html_entity_decode(rawurldecode($_GET['newfilename'])); 
    1516        $msg_part = $_GET['msg_part']; 
    1617        $msg_folder = $_GET['msg_folder']; 
     
    162163                header("Expires: 0"); // set expiration time 
    163164                header ("Content-Disposition: attachment; filename=\"". addslashes($newFileName)."\""); 
     165                 
    164166                if($fileContent) { 
    165167                        if($encoding == 'base64') 
     
    171173                } 
    172174                else 
    173  
    174                         if (strstr($strFileName,$GLOBALS['phpgw']->session->sessionid)&&file_exists($strFileName)) 
     175                { 
     176                        $tempDir = $GLOBALS['phpgw_info']['server']['download_temp_dir']; 
     177                        if (preg_match("#^".$tempDir."/(".$GLOBALS['phpgw']->session->sessionid."/)*[A-z0-9_]+_".$GLOBALS['phpgw']->session->sessionid."[A-z0-9]*(\.[A-z]{3,4})?$#",$strFileName)) 
    175178                        { 
    176                             header("Content-Type: $ContentType"); 
    177                             header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    178                             header("Pragma: public"); 
    179                             header("Expires: 0"); // set expiration time 
    180                             header ("Content-Disposition: attachment; filename=\"". addslashes($newFileName)."\""); 
    181                             readfile($strFileName); 
    182                         }else{ 
    183                             header("HTTP/1.1 404 Not Found"); 
     179                                //avoid stuck request 
     180                                session_write_close(); 
     181 
     182                                //reset time limit for big files 
     183                                set_time_limit(0); 
     184                                ob_end_flush(); 
     185 
     186                                if ($fp = fopen ($strFileName, 'rb')) 
     187                                { 
     188                                        $bufferSize=1024; 
     189                                        for ($i=$bufferSize; $i<=(filesize($strFileName)+$bufferSize); $i+=$bufferSize) { 
     190                                                echo fread($fp, $i); 
     191                                                flush(); 
     192                                        } 
     193                                        fclose ($fp); 
     194                                } 
     195 
     196                                //removendo pelo php, garante a suportabilidade cross-platform 
     197                                cleanup( dirname( $strFileName ) ); 
    184198                        } 
    185  
    186  
    187                         if (preg_match("#^".ini_get('session.save_path')."/(".$GLOBALS['phpgw']->session->sessionid."/)*[A-z]+_".$GLOBALS['phpgw']->session->sessionid."[A-z0-9]*(\.[A-z]{3,4})?$#",$strFileName)) 
     199                        else  
    188200                        { 
    189                                 if ( ! preg_match("#^".dirname( __FILE__ ) . '/../tmpLclAtt'."/source_#",$strFileName)) { 
    190                                         //reset time limit for big files 
    191                                         set_time_limit(0); 
    192                                         ob_end_flush(); 
    193  
    194                                         if ($fp = fopen ($strFileName, 'rb')) 
    195                                         { 
    196                                                 $bufferSize=1024; 
    197                                                 for ($i=$bufferSize; $i<=(filesize($strFileName)+$bufferSize); $i+=$bufferSize) 
    198                                                 { 
    199                                                         echo fread($fp, $i); 
    200                                                         flush(); 
    201                                                 } 
    202                                                 fclose ($fp); 
    203                                         } 
    204                                         //readfile($strFileName); 
    205  
    206                                         exec("rm -f ".escapeshellcmd(escapeshellarg($strFileName))); 
     201                                if (preg_match("#^".dirname( __FILE__ ) . '/../tmpLclAtt'."/source_#",$strFileName)) { 
     202                                        readfile($strFileName); 
    207203                                } 
    208                                 else 
    209                                         readfile($strFileName); 
    210204                        } 
     205                } 
    211206        } 
    212207?> 
Note: See TracChangeset for help on using the changeset viewer.