النتائج 1 إلى 2 من 2

الموضوع: التحكم في عملية التحميل بواسطة php - سؤال

  1. #1
    عضو جديد
    تاريخ التسجيل
    Jun 2010
    المشاركات
    5

    التحكم في عملية التحميل بواسطة php - سؤال



    السلام عليكم

    بحثت عن دالة تدعم استكمال التحميل
    ولكن في كل مرة أجد أن الملفات المحمَّلة معطوبة وغير صالحة

    وهذه أحد الدوال

    كود PHP:
    function dl_file_resumable($file$is_resume=TRUE)
    {
        
    //First, see if the file exists
        
    if (!is_file($file))
        {
            die(
    "<b>404 File not found!</b>");
        }

        
    //Gather relevent info about file
        
    $size filesize($file);
        
    $fileinfo pathinfo($file);
        
        
    //workaround for IE filename bug with multiple periods / multiple dots in filename
        //that adds square brackets to filename - eg. setup.abc.exe becomes setup[1].abc.exe
        
    $filename = (strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE')) ?
                      
    preg_replace('/\./''%2e'$fileinfo['basename'], substr_count($fileinfo['basename'], '.') - 1) :
                      
    $fileinfo['basename'];
        
        
    $file_extension strtolower($path_info['extension']);

        
    //This will set the Content-Type to the appropriate setting for the file
        
    switch($file_extension)
        {
            case 
    'exe'$ctype='application/octet-stream'; break;
            case 
    'zip'$ctype='application/zip'; break;
            case 
    'mp3'$ctype='audio/mpeg'; break;
            case 
    'mpg'$ctype='video/mpeg'; break;
            case 
    'avi'$ctype='video/x-msvideo'; break;
            default:    
    $ctype='application/force-download';
        }

        
    //check if http_range is sent by browser (or download manager)
        
    if($is_resume && isset($_SERVER['HTTP_RANGE']))
        {
            list(
    $size_unit$range_orig) = explode('='$_SERVER['HTTP_RANGE'], 2);

            if (
    $size_unit == 'bytes')
            {
                
    //multiple ranges could be specified at the same time, but for simplicity only serve the first range
                //http://tools.ietf.org/id/draft-ietf-http-range-retrieval-00.txt
                
    list($range$extra_ranges) = explode(','$range_orig2);
            }
            else
            {
                
    $range '';
            }
        }
        else
        {
            
    $range '';
        }

        
    //figure out download piece from range (if set)
        
    list($seek_start$seek_end) = explode('-'$range2);

        
    //set start and end based on range (if set), else set defaults
        //also check for invalid ranges.
        
    $seek_end = (empty($seek_end)) ? ($size 1) : min(abs(intval($seek_end)),($size 1));
        
    $seek_start = (empty($seek_start) || $seek_end abs(intval($seek_start))) ? max(abs(intval($seek_start)),0);

        
    //add headers if resumable
        
    if ($is_resume)
        {
            
    //Only send partial content header if downloading a piece of the file (IE workaround)
            
    if ($seek_start || $seek_end < ($size 1))
            {
                
    header('HTTP/1.1 206 Partial Content');
            }

            
    header('Accept-Ranges: bytes');
            
    header('Content-Range: bytes '.$seek_start.'-'.$seek_end.'/'.$size);
        }

        
    //headers for IE Bugs (is this necessary?)
        //header("Cache-Control: cache, must-revalidate");   
        //header("Pragma: public");

        
    header('(anti-spam-(anti-spam-(anti-spam-(anti-spam-content-type:)))) ' $ctype);
        
    header('Content-Disposition: attachment; filename="' $filename '"');
        
    header('Content-Length: '.($seek_end $seek_start 1));

        
    //open the file
        
    $fp fopen($file'rb');
        
    //seek to start of missing part
        
    fseek($fp$seek_start);

        
    //start buffered download
        
    while(!feof($fp))
        {
            
    //reset time limit for big files
            
    set_time_limit(0);
            print(
    fread($fp1024*8));
            
    flush();
            
    ob_flush();
        }

        
    fclose($fp);
        exit;









  2. #2
    عضو نشيط
    تاريخ التسجيل
    May 2010
    المشاركات
    76


    السلام عليكم ورحمة الله وبركاته

    انا لم اقرا الكود ولكنى لاحظت انك مستخدم

    كود PHP:
     set_time_limit(0); 
    وهذه الداله لا تعمل فى حالة

    safe mode

    ويستحسن وضع

    كود PHP:
    error_reporting(0); 
    فى اول الكود

    لان فى حاله الاخطاء او الملاحظات او اى اوت من بى اتش بى

    يعتبر من الملف ولذلك سيكون سبب فى عدم عمله بشكل صحيح





    التعديل الأخير تم بواسطة developspot ; 09-11-2010 الساعة 04:31 AM
    __________________
    Mahmoud Abd El-Hamed
    Web Developer
    Mobile: +2 0192565454
    E-mail: admin(at)developspot.com
    Site: ( رابط ) http://developspot.com





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض