home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 August / PCWorld_2001-08_cd.bin / Komunikace / phptriad / phptriadsetup2-11.exe / php / pear / HTTP.php < prev    next >
PHP Script  |  2001-01-31  |  4KB  |  113 lines

  1. <?php
  2. //
  3. // +----------------------------------------------------------------------+
  4. // | PHP version 4.0                                                      |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2001 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.02 of the PHP license,      |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Authors: Stig Bakken <ssb@fast.no>                                   |
  17. // |                                                                      |
  18. // +----------------------------------------------------------------------+
  19. //
  20. // $Id: HTTP.php,v 1.6 2001/01/31 18:34:39 chagenbu Exp $
  21. //
  22. // HTTP utility functions.
  23. //
  24.  
  25. if (!empty($GLOBALS['USED_PACKAGES']['HTTP'])) return;
  26. $GLOBALS['USED_PACKAGES']['HTTP'] = true;
  27.  
  28. class HTTP {
  29.     /**
  30.      * Format a date according to RFC-XXXX (can't remember the HTTP
  31.      * RFC number off-hand anymore, shame on me).  This function
  32.      * honors the "y2k_compliance" php.ini directive.
  33.      *
  34.      * @param $time int UNIX timestamp
  35.      *
  36.      * @return HTTP date string, or false for an invalid timestamp.
  37.      *
  38.      * @author Stig Bakken <ssb@fast.no>
  39.      */
  40.     function Date($time) {
  41.     $y = ini_get("y2k_compliance") ? "Y" : "y";
  42.     return gmdate("D, d M $y H:i:s", $time);
  43.     }
  44.  
  45.     /**
  46.      * Negotiate language with the user's browser through the
  47.      * Accept-Language HTTP header or the user's host address.
  48.      * Language codes are generally in the form "ll" for a language
  49.      * spoken in only one country, or "ll_CC" for a language spoken in
  50.      * a particular country.  For example, U.S. English is "en_US",
  51.      * while British English is "en_UK".  Portugese as spoken in
  52.      * Portugal is "pt_PT", while Brazilian Portugese is "pt_BR".
  53.      * Two-letter country codes can be found in the ISO 3166 standard.
  54.      *
  55.      * Quantities in the Accept-Language: header are supported, for
  56.      * example:
  57.      *
  58.      *  Accept-Language: en_UK;q=0.7, en_US;q=0.6, no;q=1.0, dk;q=0.8
  59.      *
  60.      * @param $supported an associative array indexed by language
  61.      * codes (country codes) supported by the application.  Values
  62.      * must evaluate to true.
  63.      *
  64.      * @param $default the default language to use if none is found
  65.      * during negotiation, defaults to "en_US" for U.S. English
  66.      *
  67.      * @author Stig Bakken <ssb@fast.no>
  68.      */
  69.     function negotiateLanguage(&$supported, $default = 'en_US') {
  70.     global $HTTP_SERVER_VARS;
  71.  
  72.     /* If the client has sent an Accept-Language: header, see if
  73.      * it contains a language we support.
  74.      */
  75.     if (isset($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'])) {
  76.         $accepted = split(',[[:space:]]*', $HTTP_ACCEPT_LANGUAGE);
  77.         for ($i = 0; $i < count($accepted); $i++) {
  78.         if (eregi('^([a-z]+);[[:space:]]*q=([0-9\.]+)', $accepted[$i], &$arr)) {
  79.             $q = (double)$arr[2];
  80.             $l = $arr[1];
  81.         } else {
  82.             $q = 42;
  83.             $l = $accepted[$i];
  84.         }
  85.         if (!empty($supported[$l]) && ($q > 0.0)) {
  86.             if ($q == 42) {
  87.             return $l;
  88.             }
  89.             $candidates[$l] = $q;
  90.         }
  91.         }
  92.         if (isset($candidates)) {
  93.         arsort($candidates);
  94.         reset($candidates);
  95.         return key($candidates);
  96.         }
  97.     }
  98.  
  99.     /* Check for a valid language code in the top-level domain of
  100.      * the client's host address.
  101.      */
  102.     if (ereg("\.[^\.]+$", $HTTP_SERVER_VARS['REMOTE_HOST'], &$arr)) {
  103.         $lang = strtolower($arr[1]);
  104.         if (!empty($supported[$lang])) {
  105.         return $lang;
  106.         }
  107.     }
  108.  
  109.     return $default;
  110.     }
  111. }
  112. ?>
  113.