Loading ...
Sorry, an error occurred while loading the content.

php script to download the files

Expand Messages
  • kumar_manoj77
    I am trying to write a script to download zip file(20 MB). but after downloading content of 5 or 6 MB, the script stops and failed to download the entire file.
    Message 1 of 4 , Jul 28, 2009
    • 0 Attachment
      I am trying to write a script to download zip file(20 MB). but after downloading content of 5 or 6 MB, the script stops and failed to download the entire file.
      I am using the following function
      <?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_orig, 2);
      }
      else
      {
      $range = '';
      }
      }
      else
      {
      $range = '';
      }

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

      //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))) ? 0 : 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 > 0 || $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('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($fp, 1024*8));
      flush();
      ob_flush();
      }

      fclose($fp);
      exit;
      }

      ?>

      pls help me to correct the code and download the zip file properly.
      thanks in advance.
    • Abdul Rehman
      Just expand your memory_limit, post_file_size and max_file_upload in php.ini file and then try. if problem exist then call me. ________________________________
      Message 2 of 4 , Jul 29, 2009
      • 0 Attachment
        Just expand your memory_limit, post_file_size and max_file_upload in php.ini file and then try. if problem exist then call me.




        ________________________________
        From: kumar_manoj77 <kumar_manoj77@...>
        To: bang-phpug@yahoogroups.com
        Sent: Wednesday, July 29, 2009 11:39:50 AM
        Subject: [bang-phpug] php script to download the files


        I am trying to write a script to download zip file(20 MB). but after downloading content of 5 or 6 MB, the script stops and failed to download the entire file.
        I am using the following function
        <?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_orig, 2);
        }
        else
        {
        $range = '';
        }
        }
        else
        {
        $range = '';
        }

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

        //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) )) ? 0 : 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 > 0 || $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('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( $fp, 1024*8));
        flush();
        ob_flush();
        }

        fclose($fp);
        exit;
        }

        ?>

        pls help me to correct the code and download the zip file properly.
        thanks in advance.







        [Non-text portions of this message have been removed]
      • kumar_manoj77
        I have not access to the php.ini file as it is shared server. I had increase the memory_limit by ini_set function to 64 MB. but still no success. I have doubt,
        Message 3 of 4 , Jul 31, 2009
        • 0 Attachment
          I have not access to the php.ini file as it is shared server.
          I had increase the memory_limit by ini_set function to 64 MB. but still no success.

          I have doubt, why should i increase the max_file_upload as I am not trying to upload the file.
          I am trying to download the zip file using php script


          --- In bang-phpug@yahoogroups.com, Abdul Rehman <abdulrehman97@...> wrote:
          >
          > Just expand your memory_limit, post_file_size and max_file_upload in php.ini file and then try. if problem exist then call me.
          >
          >
          >
          >
          > ________________________________
          > From: kumar_manoj77 <kumar_manoj77@...>
          > To: bang-phpug@yahoogroups.com
          > Sent: Wednesday, July 29, 2009 11:39:50 AM
          > Subject: [bang-phpug] php script to download the files
          >
          >
          > I am trying to write a script to download zip file(20 MB). but after downloading content of 5 or 6 MB, the script stops and failed to download the entire file.
          > I am using the following function
          > <?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_orig, 2);
          > }
          > else
          > {
          > $range = '';
          > }
          > }
          > else
          > {
          > $range = '';
          > }
          >
          > //figure out download piece from range (if set)
          > list($seek_start, $seek_end) = explode('-', $range, 2);
          >
          > //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) )) ? 0 : 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 > 0 || $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('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( $fp, 1024*8));
          > flush();
          > ob_flush();
          > }
          >
          > fclose($fp);
          > exit;
          > }
          >
          > ?>
          >
          > pls help me to correct the code and download the zip file properly.
          > thanks in advance.
          >
          >
          >
          >
          >
          >
          >
          > [Non-text portions of this message have been removed]
          >
        • jegan
          set maximum execution time in the script. it may be the reason ... ... [Non-text portions of this message have been removed]
          Message 4 of 4 , Jul 31, 2009
          • 0 Attachment
            set maximum execution time in the script. it may be the reason ...

            On Fri, Jul 31, 2009 at 2:50 PM, kumar_manoj77 <kumar_manoj77@...>wrote:

            >
            >
            > I have not access to the php.ini file as it is shared server.
            > I had increase the memory_limit by ini_set function to 64 MB. but still no
            > success.
            >
            > I have doubt, why should i increase the max_file_upload as I am not trying
            > to upload the file.
            > I am trying to download the zip file using php script
            >
            >
            > --- In bang-phpug@yahoogroups.com <bang-phpug%40yahoogroups.com>, Abdul
            > Rehman <abdulrehman97@...> wrote:
            > >
            > > Just expand your memory_limit, post_file_size and max_file_upload in
            > php.ini file and then try. if problem exist then call me.
            > >
            > >
            > >
            > >
            > > ________________________________
            > > From: kumar_manoj77 <kumar_manoj77@...>
            >
            > > To: bang-phpug@yahoogroups.com <bang-phpug%40yahoogroups.com>
            > > Sent: Wednesday, July 29, 2009 11:39:50 AM
            > > Subject: [bang-phpug] php script to download the files
            > >
            > >
            > > I am trying to write a script to download zip file(20 MB). but after
            > downloading content of 5 or 6 MB, the script stops and failed to download
            > the entire file.
            > > I am using the following function
            > > <?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_orig, 2);
            > > }
            > > else
            > > {
            > > $range = '';
            > > }
            > > }
            > > else
            > > {
            > > $range = '';
            > > }
            > >
            > > //figure out download piece from range (if set)
            > > list($seek_start, $seek_end) = explode('-', $range, 2);
            > >
            > > //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) )) ? 0 : 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 > 0 || $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('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( $fp, 1024*8));
            > > flush();
            > > ob_flush();
            > > }
            > >
            > > fclose($fp);
            > > exit;
            > > }
            > >
            > > ?>
            > >
            > > pls help me to correct the code and download the zip file properly.
            > > thanks in advance.
            > >
            > >
            > >
            > >
            > >
            > >
            > >
            > > [Non-text portions of this message have been removed]
            > >
            >
            >
            >


            [Non-text portions of this message have been removed]
          Your message has been successfully submitted and would be delivered to recipients shortly.