Exemplo n.º 1
0
 /**
  * Download release via HTTP
  *
  *
  * @param string Name of the package
  * @param string Version string
  * @param string Filename
  * @param boolean Uncompress file before downloading?
  * @return mixed
  * @static
  */
 function HTTPdownload($package, $version = null, $file = null, $uncompress = false)
 {
     global $dbh;
     require_once "HTTP.php";
     $package_id = package::info($package, 'packageid', true);
     if (!$package_id) {
         $package_id = $dbh->getOne('SELECT package_id FROM package_aliases WHERE alias_name=' . $dbh->quoteSmart($package));
         if (!$package_id) {
             return PEAR::raiseError("release download:: package '" . htmlspecialchars($package) . "' does not exist");
         }
     }
     if (PEAR::isError($package_id)) {
         return $package_id;
     }
     if ($file !== null) {
         $basename = substr($file, 0, -4);
         if (substr($file, -4) == '.tar') {
             $file = $basename . '.tgz';
             $uncompress = true;
         }
         $row = $dbh->getRow("SELECT `fullpath`, `release`, `id` FROM files " . "WHERE UPPER(basename) = ?", array(strtoupper($file)), DB_FETCHMODE_ASSOC);
         if (PEAR::isError($row)) {
             return $row;
         } elseif ($row === null) {
             return PEAR::raiseError("File '{$file}' not found");
         }
         $path = $row['fullpath'];
         $log_release = $row['release'];
         $log_file = $row['id'];
     } elseif ($version == null) {
         // Get the most recent version
         $row = $dbh->getRow("SELECT id FROM releases " . "WHERE package = {$package_id} " . "ORDER BY releasedate DESC", DB_FETCHMODE_ASSOC);
         if (PEAR::isError($row)) {
             return $row;
         }
         $release_id = $row['id'];
     } elseif (release::isValidState($version)) {
         $version = strtolower($version);
         // Get the most recent version with a given state
         $row = $dbh->getRow("SELECT id FROM releases " . "WHERE package = {$package_id} " . "AND state = '{$version}' " . "ORDER BY releasedate DESC", DB_FETCHMODE_ASSOC);
         if (PEAR::isError($row)) {
             return $row;
         }
         $release_id = $row['id'];
         if (!isset($release_id)) {
             return PEAR::raiseError("{$package} does not have any releases with state \"{$version}\"");
         }
     } else {
         // Get a specific release
         $row = $dbh->getRow("SELECT id FROM releases " . " WHERE package = " . $dbh->quoteSmart($package_id) . " AND version = " . $dbh->quoteSmart($version), DB_FETCHMODE_ASSOC);
         if (PEAR::isError($row)) {
             return $row;
         }
         $release_id = $row['id'];
     }
     if (!isset($path) && isset($release_id)) {
         $sql = "SELECT fullpath, basename, `id` FROM files WHERE `release` = " . $release_id;
         $row = $dbh->getRow($sql, DB_FETCHMODE_ORDERED);
         if (PEAR::isError($row)) {
             return $row;
         }
         list($path, $basename, $log_file) = $row;
         if (empty($path) || !@is_file(PEAR_TARBALL_DIR . '/' . $basename) && !@is_file($path)) {
             return PEAR::raiseError("release download:: no version information found");
         }
         $basename = substr($basename, 0, -4);
     }
     if ($uncompress) {
         $basename .= '.tar';
     } else {
         $basename .= '.tgz';
     }
     $path = PEAR_TARBALL_DIR . '/' . $basename;
     if (isset($path)) {
         if (!isset($log_release)) {
             $log_release = $release_id;
         }
         release::logDownload($package_id, $log_release, $log_file);
         header('Content-Disposition: attachment;filename=' . $basename);
         header('Content-type: application/octet-stream');
         header('X-Sendfile: ' . '/local/www/sites/pecl.php.net/public_html/packages/' . $basename);
         return true;
     }
     header('HTTP/1.0 404 Not Found');
     print 'File not found';
 }
Exemplo n.º 2
0
 /**
  * Download release via HTTP
  *
  * @param string Name of the package
  * @param string Version string
  * @param string Filename
  * @param boolean Uncompress file before downloading?
  * @return mixed
  * @static
  */
 static function HTTPdownload($package, $version = null, $file = null, $uncompress = false)
 {
     global $dbh;
     include_once 'pear-database-package.php';
     $package_id = package::info($package, 'packageid', true);
     if (!$package_id) {
         return PEAR::raiseError("release download:: package '" . htmlspecialchars($package) . "' does not exist");
     } elseif (PEAR::isError($package_id)) {
         return $package_id;
     }
     if ($file !== null) {
         if (substr($file, -4) == '.tar') {
             $file = substr($file, 0, -4) . '.tgz';
             $uncompress = true;
         }
         $row = $dbh->getRow("SELECT fullpath, `release`, id FROM files " . "WHERE basename LIKE ?", array($file), DB_FETCHMODE_ASSOC);
         if (PEAR::isError($row)) {
             return $row;
         } elseif ($row === null) {
             return PEAR::raiseError("File '{$file}' not found");
         }
         $path = $row['fullpath'];
         $log_release = $row['release'];
         $log_file = $row['id'];
         $basename = $file;
     } elseif ($version === null) {
         // Get the most recent version
         $row = $dbh->getRow("SELECT id FROM releases " . "WHERE package = {$package_id} " . "ORDER BY releasedate DESC", DB_FETCHMODE_ASSOC);
         if (PEAR::isError($row)) {
             return $row;
         }
         $release_id = $row['id'];
     } elseif (release::isValidState($version)) {
         $version = strtolower($version);
         // Get the most recent version with a given state
         $row = $dbh->getRow("SELECT id FROM releases " . "WHERE package = {$package_id} " . "AND state = '{$version}' " . "ORDER BY releasedate DESC", DB_FETCHMODE_ASSOC);
         if (PEAR::isError($row)) {
             return $row;
         }
         $release_id = $row['id'];
         if (!isset($release_id)) {
             return PEAR::raiseError("{$package} does not have any releases with state \"{$version}\"");
         }
     } else {
         // Get a specific release
         $row = $dbh->getRow("SELECT id FROM releases " . "WHERE package = {$package_id} " . "AND version = '{$version}'", DB_FETCHMODE_ASSOC);
         if (PEAR::isError($row)) {
             return $row;
         }
         $release_id = $row['id'];
     }
     if (!isset($path) && isset($release_id)) {
         $sql = "SELECT fullpath, basename, id FROM files WHERE `release` = " . $release_id;
         $row = $dbh->getRow($sql, DB_FETCHMODE_ORDERED);
         if (PEAR::isError($row)) {
             return $row;
         }
         list($path, $basename, $log_file) = $row;
         if (empty($path) || !@is_file($path)) {
             return PEAR::raiseError("release download:: no version information found");
         }
     }
     if (isset($path)) {
         if (!isset($log_release)) {
             $log_release = $release_id;
         }
         release::logDownload($package_id, $log_release, $log_file);
         header('Last-modified: ' . gmdate('D, d M Y H:i:s \\G\\M\\T', filemtime($path)));
         header('Content-type: application/octet-stream');
         if ($uncompress) {
             $tarname = preg_replace('/\\.tgz\\z/', '.tar', $basename);
             header('Content-disposition: attachment; filename="' . $tarname . '"');
             readgzfile($path);
         } else {
             header('Content-disposition: attachment; filename="' . $basename . '"');
             header('Content-length: ' . filesize($path));
             readfile($path);
         }
         return true;
     }
     header('HTTP/1.0 404 Not Found');
     echo 'File not found';
 }