Implementing download progress

From: Date: Mon, 06 Apr 2015 04:36:58 +0000
Subject: Implementing download progress
Groups: php.general 
Request: Send a blank email to php-general+get-324769@lists.php.net to get a copy of this message
Hi again: I have successfully implemented a class that uses the code examples and suggestions from the good folks on this list. I have a few lingering issues: 1: When the code runs successfully, I do not get a detectable return value.
    the code sets $_out['success'] = true;
   this should be passed out via the call to run() but the code that watches the
   return value does not seem to see anything (evidenced by no report, where as
   a return value of $_out[error] is detected and displayed in the display page.
Q Why would this be? 2: To make this a bit more independent I have tried to use the following test if( strpos( self::$_input['targ'], getcwd()) < 0)
     {
     /*
      0 can be a valid strpos integer. So doing !strpos() will also fail because
      it should be detected as starting at 0. I know the negative return value may or may not
      be FALSE according the my copy of the manual.
    */
      $_file = getcwd().self::$_input['targ'];
    }
meaning if the full path is not already present in the input value , the code should add it.
If the file will not resolve with the full path added, it won't be a valid path/file; to add some
sanity checking. But it is not seeing the situation as I have coded it: the input file has path info relative to the cwd. So the full path value should not be detected and the cwd part should be added 3: Now to expand to being able to download directories with files and sub directories. ( as for example downloading the php manual as chunked html ) Here is the full class def: class _DOWNLOADER
     {
      private static $_class = '';
      private static $_input = array();
      public function __construct($_input) // $_input arg is $_POST;
             {
              self::$_class = get_class($this);
              self::$_input = $_input;
             }
      public function run()
             {
              return self::downLoad();
             }
      private function downLoad()
             {
              $_out = array();
              $_file = '';
              $_cd = getcwd();
              $_file = $_cd.self::$_input['targ'];
              if(!is_file($_file))
                {
                 $_out['error'] = self::$_class."->".__FUNCTION__." error: ".$_file." not found"; //self::$_input['targ']
                 return $_out;
                }
              $_file = basename($_file);
              $_fSize = filesize($_file);
              header('Content-Description: File Transfer');
              header('Content-Type: application/octet-stream');
              header('Content-Disposition: attachment; filename='.'"'.$_file.'"');
              header('Content-Transfer-Encoding: binary');
              header('Connection: Keep-Alive');
              header('Expires: 0');
              header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
              header('Pragma: public');
              header('Content-Length: ' . $_fSize);
              ob_clean();
              flush();
              readFile($_file);
              $_out['success'] = true;
              return $_out;
             }
     }


« previous php.general (#324769) next »