From a9e410172163701e949bf696fe47d3c404ff2cfc Mon Sep 17 00:00:00 2001 From: SVN Migration Date: Mon, 5 Feb 2001 19:03:23 +0000 Subject: [PATCH 01/49] This commit was manufactured by cvs2svn to create branch 'NEW_LOOK_2001'. --- COPYRIGHT.txt | 42 ------------------------------- php-style.css | 70 --------------------------------------------------- 2 files changed, 112 deletions(-) delete mode 100644 COPYRIGHT.txt delete mode 100644 php-style.css diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt deleted file mode 100644 index c361f5a31d..0000000000 --- a/COPYRIGHT.txt +++ /dev/null @@ -1,42 +0,0 @@ - The code and graphics on this website (and it's mirror - sites, if any) are Copyright (c) 1998 The PHP Development - Team. All rights reserved. - - Except as otherwise indicated elsewhere on this site, you - may view, copy, print, and distribute documents available - on this Web site subject to the following conditions: - - 1. The document may be used solely for personal, informa- - tional, non-commercial purposes. - - 2. Any copy of the document or portion thereof must include - the following permission notice: - - ************************************************************ - * * - * PERMISSION NOTICE: * - * * - * Javascript/PHP code used with permission of the PHP * - * Development Team. * - * Copyright 1998. All rights reserved. * - * * - * For more information on the PHP Development Team and * - * the PHP project, please see . * - * * - ************************************************************ - - 3. The PHP Development Team reserves the right to revoke such - authorization at any time, and any such use shall be dis- - continued immediately upon notice from the PHP Development - Team. - - Documents specified above DO NOT include the graphical - elements, design, or layout of this Web site. Elements of - this Web site are protected by trade dress and other laws and - MAY NOT BE COPIED OR IMITATED IN WHOLE OR IN PART. - - You can contact the webmaster at . - - For more information on the PHP Development Team and the PHP - project, please see . - diff --git a/php-style.css b/php-style.css deleted file mode 100644 index 60508fbbfa..0000000000 --- a/php-style.css +++ /dev/null @@ -1,70 +0,0 @@ -/* $Id$ */ - -A { - font-weight: bold; - text-decoration: none; - color: #5B69A6; -} - -TD,TH { - font-family: tahoma, verdana, arial, helvetica, sans-serif; -} - -.sidebartoc { - font-family: tahoma, verdana, arial, helvetica, sans-serif; - color: #FFFFFF; - text-decoration: none; - font-weight: normal; -} - -.example { - font-family: tahoma, verdana, arial, helvetica, sans-serif; - color: #000000; - background: #F0F0F0; - padding: 5px; - margin: 5px; -} - -.programlisting { - margin-left: 15px; - font-family: "monotype.com", "courier new", courier, monospace; -} - -.warning { - background: #FFCCCC; -} - -.author { - font-size: 13px; - font-weight: normal; -} - -.editor { - font-size: 13px; - font-weight: normal; -} - -.blacklink { - text-decoration: none; - color: #000000; -} - -.whitelink { - font-weight: bold; - text-decoration: none; - color: #FFFFFF; - font-size: 80%; - margin-left: 15px; -} - -PRE { - font-size : 13px; -} - -LI { - margin-bottom: 5px; -} - -UL,OL { - margin-top: 5px; -} From a9c16c1c6079b1a1f7a2fc2eeb851a77be6a5067 Mon Sep 17 00:00:00 2001 From: jim winstead Date: Tue, 6 Feb 2001 00:59:42 +0000 Subject: [PATCH 02/49] add new style.css for new look, testing branch --- style.css | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 style.css diff --git a/style.css b/style.css new file mode 100644 index 0000000000..7d75e893b1 --- /dev/null +++ b/style.css @@ -0,0 +1,101 @@ +body, td, th { + font-family: arial,helvetica,sans-serif; + font-size: 12px; +} + +p { + margin-top: 0px; + margin-bottom: 5px; +} + +em { + font-weight: bold; + font-style: italic; +} + +form { + margin: 0px; +} + +ul, ol { + margin-top: 5px; +} + +ul.compact, ol.compact { + margin-top: 0px; + margin-bottom: 0px; +} + +pre { + font-family: "andale mono", "monotype.com", "courier new", monospace; + font-size: 9px; +} + +h1 { + font-family: tahoma,arial,helvetica,sans-serif; + font-size: 18px; + font-weight: bold; + color: #000066; + margin-bottom: 5px; +} + +h2 { + font-family: tahoma,arial,helvetica,sans-serif; + font-size: 16px; + font-weight: bold; + color: #000066; + margin-bottom: 5px; +} + +h3 { + font-family: tahoma,arial,helvetica,sans-serif; + font-size: 14px; + font-weight: bold; + color: #000066; +} + +small { + font-family: arial,helvetica,sans-serif; + font-size: 11px; +} + +a.small { + font-family: arial,helvetica,sans-serif; + font-size: 11px; + text-decoration: none; +} + +.tableTitle { + font-family: arial,helvetica,sans-serif; + font-size: 12px; + font-weight: bold; +} + +.tableExtras { + font-family: arial,helvetica,sans-serif; + font-size: 11px; + color: #FFFFFF; +} + + +input { + font-family: arial,helvetica,sans-serif; + font-size: 11px; +} + +textarea { + font-family: "andale mono", "monotype.com", "courier new", monospace; + font-size: 11px; +} + +input.small, select.small { + font-family: arial,helvetica,sans-serif; + font-size: 11px; +} + +textarea.small { + font-family: "andale mono", "monotype.com", "courier new", monospace; + font-size: 11px; +} + +// manual stuff From 6273f5bca555f3d066ae2d7af8d1a924bf984466 Mon Sep 17 00:00:00 2001 From: jim winstead Date: Tue, 6 Feb 2001 01:05:32 +0000 Subject: [PATCH 03/49] new look, on a branch for right now --- bugs.php | 5 +- error/index.php | 4 +- gifs/php_logo.gif | Bin 0 -> 3872 bytes gifs/small_submit.gif | Bin 0 -> 61 bytes include/shared-manual.inc | 392 +++++++--------- include/shared.inc | 963 ++++++++------------------------------ include/site.inc | 1 + mirrors.php | 3 + search.php | 4 +- source.php | 17 +- 10 files changed, 390 insertions(+), 999 deletions(-) create mode 100644 gifs/php_logo.gif create mode 100644 gifs/small_submit.gif diff --git a/bugs.php b/bugs.php index 0aac3dbe22..7a475b95f9 100644 --- a/bugs.php +++ b/bugs.php @@ -21,6 +21,10 @@ $dbhost="localhost"; $dbuser="nobody"; $dbpwd=""; +} else if (strstr($MYSITE,"news.php.net")) { + $dbhost="localhost"; + $dbuser="nobody"; + $dbpwd=""; } else { Header("Location: http://bugs.php.net/" . ($QUERY_STRING ? "?$QUERY_STRING" : "")); exit; @@ -30,7 +34,6 @@ $edit = $MAGIC_COOKIE ? 1 : 2; */ -$DISABLE_KICKOUTS=1; commonHeader("Bug Reporting"); echo "\n"; echo "\n"; diff --git a/error/index.php b/error/index.php index 04b26f1572..01d1374fdd 100644 --- a/error/index.php +++ b/error/index.php @@ -97,7 +97,7 @@ function makeBar($no,$page,$pages,$baseurl,$firstdisplayed,$lastdisplayed) { $form=$PHP_SELF; if (!isset($base)) { - if (ereg("^(.+//[^/]+)/",$HTTP_REFERER,&$reg)) { + if (ereg("^(.+//[^/]+)/",$HTTP_REFERER,$reg)) { $base=$reg[1]; } if ($base==$MYSITE) { @@ -134,7 +134,7 @@ function makeBar($no,$page,$pages,$baseurl,$firstdisplayed,$lastdisplayed) { } if (isset($page)) {$off="&page=$page";} else {$off="";} $query="words=$words&config=$config&exclude=$exclude&restrict=$restrict$off"; - exec("$htsearch_prog \"$query\"",&$result); + exec("$htsearch_prog \"$query\"",$result); $rc=count($result); if ($rc<2) { echo "There was an error executing this query.

Please try later

"; diff --git a/gifs/php_logo.gif b/gifs/php_logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..7beda43fd41748a8b52319b2cd27baeec85d61e8 GIT binary patch literal 3872 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 literal 0 HcmV?d00001 diff --git a/gifs/small_submit.gif b/gifs/small_submit.gif new file mode 100644 index 0000000000000000000000000000000000000000..93d554f36574a9f6284491cf2ed99d69660ed51c GIT binary patch literal 61 zcmZ?wbhEHb 'English', + 'pt_BR' => 'Brazilian Portuguese', + 'nl' => 'Dutch', + 'fr' => 'French', + 'de' => 'German', + 'hu' => 'Hungarian', + 'it' => 'Italian', + 'ja' => 'Japanese', + 'kr' => 'Korean', + 'ru' => 'Russian', + 'es' => 'Spanish', +); $NEXT = $PREV = $UP = $HOME = array(false, false); $TOC = array(); @@ -19,255 +29,172 @@ function setupNavigation($data) { $tstamp = gmdate("D, d M Y",getlastmod()); } -function makeBullet($url,$number,$offtype,$offnum) { - echo ""; - echo "\"*\""; - echo ""; -} - function makeBorderTOC($this) { - global $NEXT, $PREV, $UP, $HOME, $TOC, $FONTFACEATTR, $PHP_SELF, $DOCUMENT_ROOT; - global $HAVE_STYLE, $HAVE_TD_BG; + global $NEXT, $PREV, $UP, $HOME, $TOC, $PHP_SELF, $DOCUMENT_ROOT; - $tocfontsize = "-1"; // replace with CSS? - - $FONTCOL = " COLOR=\"#FFFFFF\""; + echo "Top: $HOME[1]
\n"; + echo '
'; +?> + quickref:
- echo "\n"; - $this = eregi_replace("^Manual: *", "", $this); + + + + +\n"; - echo "\n"; - - echo "\n"; - echo "\n"; - echo "\n"; for ($i = 0; $i < count($TOC); $i++) { - list($url, $title) = $TOC[$i]; - if (!$url || !$title) { - continue; - } - if ($title == $this) { - $type = "w"; - $out = 2; - } else { - $type = "p"; - $out = 0; - } - if ($UP[0] == 'funcref.php') { - $title = eregi_replace(" functions\$", "", $title); + list($url, $title) = $TOC[$i]; + if (!$url || !$title) { + continue; + } + if ($title == $this) { + $type = "w"; + $out = 2; + } else { + $type = "p"; + $out = 0; + } + if ($UP[0] == 'funcref.php') { + $title = eregi_replace(" functions\$", "", $title); + } + echo "
  • $title
  • "; } - echo "\n\n\n"; - } - echo "
    "; - if(substr($file,-5)=='.php3') $file = substr($file,0,-1); - - // manual languages array [directory, flag code, language] - $manual_languages = Array ( - Array("en", "uk", "English"), - Array("de", "de", "German"), - Array("ja", "jp", "Japanese"), - - Array("it", "it", "Italian"), - Array("fr", "fr", "French"), - Array("hu", "hu", "Hungarian"), - - Array("es", "es", "Spanish"), - Array("nl", "nl", "Dutch"), - Array("pt_BR", "br", "Brazilian Portuguese"), - - Array("kr", "kr", "Korean"), - Array("cs", "cz", "Czech") - ); - - while (list($lang_num, $lang_data) = each ($manual_languages)) { - if (@is_file("$DOCUMENT_ROOT/manual/$lang_data[0]/$file")) echo "\"$lang_data[2]"; - else echo "\"$lang_data[2]"; - if ($lang_num % 3 == 2) { echo '
    '; } + if ($HOME[1] != $UP[1] && $UP[1]) { + echo "Up: $UP[1]\n"; } - - echo "
    "; - spc(10, 10); - echo ""; - echo ""; - echo "$UP[1]
    "; - spc(10,10); - echo ""; - echo "\"*\"\n"; - echo ""; - echo ""; - echo ""; - echo "$title
    \n"; }; -function navigationBar($title) { - global $NEXT, $PREV, $UP, $HOME, $TOC, $FONTFACE, $tstamp; - global $navBarNo; - $no = $navBarNo; - if ($title!="Show Source") { - echo("\n"); - echo "\n"; - echo "\n"; - echo "\n"; - if ($PREV[0] && $PREV[1]) { - echo "\n"; +function navigationBar($title,$id,$loc) { + global $NEXT, $PREV, $tstamp, $SERVER_NAME,$SERVER_PORT,$PHP_SELF; + echo '

    Previous page
    '; + if ($loc == "bottom") { + echo ""; + } + echo "\n"; - echo "\n"; - echo "\n"; - if ($NEXT[0] && $NEXT[1]) { - echo "\n"; + echo " \n"; + echo "\n"; + echo "\n"; - echo "
    "; + $back_url = "http://$SERVER_NAME".(($SERVER_PORT==80)?"":":".$SERVER_PORT).$PHP_SELF; + echo "add note | "; + echo "about notes"; + echo "
    "; + if ($PREV[1]) { + echo "Previous: $PREV[1]"; } - echo " $PREV[1]
     Updated
    $tstamp
    $NEXT[1] 
    Next page
    Updated
    $tstamp
     "; + if ($NEXT[1]) { + echo "Next: $NEXT[1]"; } - echo "
    \n"; - echo "
    \n"; - $navBarNo = (string)((int)$navBarNo + 2); + echo "\n"; + if ($loc == "top") { + echo ""; + echo ""; + $file = substr($id,0,-4); + echo "View this page in: "; + global $LANGUAGES; + while (list($code,$name) = each($LANGUAGES)) { + if (file_exists("../$code/$id")) { + echo "$name | "; + } + } + if (file_exists("html/$file.html")) { + echo "Plain HTML "; + } } + echo "\n"; } -function makeTitle($title) { - global $FONTFACE; -?> - -
    -\n"; - echo "$title
    \n"; -?> -
    - - - -
    - - - - + - - - - - - - - + +
    +
    + + - + -
    \n"; - $name = htmlspecialchars($name); + $name = htmlspecialchars($name); if (ereg("(.+)@(.+)\.(.+)",$name)) { - echo "".$name."
    \n"; + echo "".$name."
    \n"; } else { - echo "".$name."
    \n"; + echo "".$name."
    \n"; } - echo date("d-M-Y h:i",$date)."
    \n"; + echo date("d-M-Y h:i",$date); ?> -
    +


    -delete | -reject | -edit -
    +delete | +reject | +edit -
    - -


     About Notes
    -

    + + 0) { - while ($row = mysql_fetch_array($result_id)) { - $notes[] = $row; - } - } - } else { - $notes_file = "usernotes/" . urlencode( $title ) . ".txt"; - if ( @file_exists( $notes_file ) ) - { - $fp = @fopen($notes_file,"r"); - if ($fp) { - $body = fread($fp,filesize($notes_file)); - if (strlen($body)) { - $notes = @unserialize($body); - } - fclose($fp); - } - } - } - return $notes; + // if we're www.php.net, get it from the local DB + // otherwise look in "/manual/usernotes/$title.txt" (if present) + global $MYSITE; + $notes = array(); + if(strstr($MYSITE,"www.php.net")) { +# if(strstr($MYSITE,"www.php.net") || strstr($MYSITE,"localhost")) { + $host = 'localhost'; +# $host = '127.0.0.1'; + $user = 'nobody'; + $pass = ''; + $db_id = mysql_connect($host, $user, $pass); + $query = "SELECT *,UNIX_TIMESTAMP(ts) AS xwhen FROM note WHERE sect = '$title' OR sect = '$id' ORDER BY id"; + $result_id = mysql_db_query("php3", $query, $db_id); + if ($result_id && mysql_num_rows($result_id) > 0) { + while ($row = mysql_fetch_array($result_id)) { + $notes[] = $row; + } + } + } else { + $notes_file = "../usernotes/" . urlencode( $title ) . ".txt"; + if ( @file_exists( $notes_file ) ) + { + $fp = @fopen($notes_file,"r"); + if ($fp) { + $body = fread($fp,filesize($notes_file)); + if (strlen($body)) { + $notes = @unserialize($body); + } + fclose($fp); + } + } + } + return $notes; } function manualUserNotes($title, $id) { - global $PHP_SELF, $SERVER_NAME, $SERVER_PORT; - $cur = substr(dirname($PHP_SELF),-2); - if($cur=='al') $cur='en'; - echo '
    '; - $back_url = "http://$SERVER_NAME".(($SERVER_PORT==80)?"":":".$SERVER_PORT).$PHP_SELF; - echo ''; - echo ''; + global $PHP_SELF, $SERVER_NAME, $SERVER_PORT; + $cur = substr(dirname($PHP_SELF),-2); + if($cur=='al') $cur='en'; - echo "\n"; + echo "
    \n"; - $notes = manualGetUserNotes($title, $id); - $num_notes = count($notes); - if ( $num_notes > 0 ) { - makeTitle("User Contributed Notes: ".$title); - for ($i=0; $i<$num_notes; $i++) { - $note = $notes[$i]; // should use foreach? - makeEntry($note['xwhen'],$note['user'],$note['note'],$note['id']); - } - } - makeAddNote(); - echo "
    \n"; + $notes = manualGetUserNotes($title, $id); + $num_notes = count($notes); + if ( $num_notes > 0 ) { + echo "User Contributed Notes: $title"; + for ($i=0; $i<$num_notes; $i++) { + $note = $notes[$i]; // should use foreach? + makeEntry($note['xwhen'],$note['user'],$note['note'],$note['id']); + } + } + echo "\n"; } function manualLastModified($title, $id) { @@ -292,25 +219,38 @@ function manualLastModified($title, $id) { } function sendManualHeaders($charset,$lang) { - Header("Content-type: text/html;charset=$charset"); - Header("Content-language: $lang"); + global $LANG; + $LANG = $lang; + Header("Content-type: text/html;charset=$charset"); + Header("Content-language: $lang"); } function manualHeader($title,$id="") { - global $FRAMEMODE, $HTDIG; - manualLastModified($title,$id); - commonHeader("Manual: $title"); - if (!$HTDIG): - navigationBar($title); - endif; + global $HTDIG, $LANGUAGES, $LANG; + manualLastModified($title,$id); + commonHeader("Manual: $title", 1); + # create links to plain html and other languages + if (!$HTDIG): + navigationBar($title, $id, "top"); + endif; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
    '; } function manualFooter($title,$id="") { - global $HTDIG; - if (!$HTDIG): - manualUserNotes($title,$id); - navigationBar($title); - endif; - commonFooter($title); + if (!$HTDIG): + manualUserNotes($title,$id); + endif; + echo ''; + makeBorderTOC($title); + echo '
    '; + global $HTDIG; + if (!$HTDIG): + navigationBar($title, $id, "bottom"); + endif; + commonFooter($title); } ?> diff --git a/include/shared.inc b/include/shared.inc index 44123ccab5..090e3d0626 100644 --- a/include/shared.inc +++ b/include/shared.inc @@ -3,12 +3,13 @@ require("site.inc"); /* Check that browser! */ -$IE4 = false; $IE3 = false; -$NS4 = false; $NS3 = false; -$X11 = false; $HAVE_STYLE = false; $HTDIG = false; -$DISABLE_KICKOUTS = false; +# figure out the directory root +if (!$BASE_DIR) { + $BASE_DIR = ereg_replace("/[^/]+/[^/]+$", "", $INCLUDE_DIR); +} + if($SCRIPT_NAME=="/bugs.php" || $SCRIPT_NAME=="/bugstats.php") { # $my_logo="/jpgs/logo-bug.jpg"; $my_logo="/gifs/logo-bug.gif"; @@ -18,251 +19,8 @@ if($SCRIPT_NAME=="/bugs.php" || $SCRIPT_NAME=="/bugstats.php") { $my_size="WIDTH=130 HEIGHT=67"; } -# prevent errors if the user is being paranoid -# they should get the plain version of the site - -if (!isset($HTTP_USER_AGENT)) { - $HTTP_USER_AGENT = "none"; -} - - -if (ereg("MSIE ([0-9]+)",$HTTP_USER_AGENT,$version)): - $ver=(int)$version[1]; - if ($ver>=4): - $IE4=true; - $HAVE_STYLE = true; - elseif($ver==3): - $IE3=true; - endif; -elseif (ereg("Mozilla/([0-9]+)",$HTTP_USER_AGENT,$version)): - $ver=(int)$version[1]; - if ($ver>=4): - $NS4=true; - $HAVE_STYLE=true; - elseif($ver==3): - $NS3=true; - endif; -endif; - -if (strstr($HTTP_USER_AGENT,"Opera")): -# $DISABLE_KICKOUTS = true; - $HAVE_STYLE=true; - $NS4=true; -endif; - -if (strstr($HTTP_USER_AGENT,"X11")): - $X11 = true; -endif; -if (strstr($HTTP_USER_AGENT,"htdig")): - $HTDIG = true; -endif; - -/* Base variables */ - -$FONTFACE = "tahoma, verdana, arial, helvetica, sans-serif"; -$FRAMEMODE = "standard"; -$FONTFACEATTR = " FACE=\"$FONTFACE\""; - -/* Base functions */ - -function preloadImages() { - global $FRAMEMODE; -?> - b_close0 = new Image(); - b_close0.src = "/gifs/b-close-p.gif"; - b_close1 = new Image(); - b_close1.src = "/gifs/b-close-c.gif"; - - b_cred0 = new Image(); - b_cred0.src = "/gifs/b-credits-p.gif"; - b_cred1 = new Image(); - b_cred1.src = "/gifs/b-credits-c.gif"; - - b_top0 = new Image(); - b_top0.src = "/gifs/b-top-p.gif"; - b_top1 = new Image(); - b_top1.src = "/gifs/b-top-c.gif"; - - b_sear0 = new Image(); - b_sear0.src = "/gifs/b-search-p.gif"; - b_sear1 = new Image(); - b_sear1.src = "/gifs/b-search-c.gif"; - - b_sour0 = new Image(); - b_sour0.src = "/gifs/b-source-p.gif"; - b_sour1 = new Image(); - b_sour1.src = "/gifs/b-source-c.gif"; - - b_proj0 = new Image(); - b_proj0.src = "/gifs/b-projects-p.gif"; - b_proj1 = new Image(); - b_proj1.src = "/gifs/b-projects-c.gif"; - - b_mirr0 = new Image(); - b_mirr0.src = "/gifs/b-mirror-p.gif"; - b_mirr1 = new Image(); - b_mirr1.src = "/gifs/b-mirror-c.gif"; - - b_next0 = new Image(); - b_next0.src = "/gifs/b-next-p.gif"; - b_next1 = new Image(); - b_next1.src = "/gifs/b-next-c.gif"; - - b_prev0 = new Image(); - b_prev0.src = "/gifs/b-prev-p.gif"; - b_prev1 = new Image(); - b_prev1.src = "/gifs/b-prev-c.gif"; - - b_next20 = new Image(); - b_next20.src = "/gifs/b-next-p.gif"; - b_next21 = new Image(); - b_next21.src = "/gifs/b-next-c.gif"; - - b_prev20 = new Image(); - b_prev20.src = "/gifs/b-prev-p.gif"; - b_prev21 = new Image(); - b_prev21.src = "/gifs/b-prev-c.gif"; - - b_qref0 = new Image(); - b_qref0.src = "/gifs/b-quickref-p.gif"; - b_qref1 = new Image(); - b_qref1.src = "/gifs/b-quickref-c.gif"; - - b_stat0 = new Image(); - b_stat0.src = "/gifs/b-stats-p.gif"; - b_stat1 = new Image(); - b_stat1.src = "/gifs/b-stats-c.gif"; - - - b_cont0 = new Image(); - b_cont0.src = "/gifs/b-contents-p.gif"; - b_cont1 = new Image(); - b_cont1.src = "/gifs/b-contents-c.gif"; - - b_up0 = new Image(); - b_up0.src = "/gifs/b-up-p.gif"; - b_up1 = new Image(); - b_up1.src = "/gifs/b-up-c.gif"; - - b_addnote0 = new Image(); - b_addnote0.src = "/gifs/b-addnote-p.gif"; - b_addnote1 = new Image(); - b_addnote1.src = "/gifs/b-addnote-c.gif"; - - b_abnote0 = new Image(); - b_abnote0.src = "/gifs/b-about-p.gif"; - b_abnote1 = new Image(); - b_abnote1.src = "/gifs/b-about-c.gif"; - - b_bullet0 = new Image(); - b_bullet0.src = "/gifs/b-bullet-p.gif"; - b_bullet1 = new Image(); - b_bullet1.src = "/gifs/b-bullet-c.gif"; - b_bullet2 = new Image(); - b_bullet2.src = "/gifs/b-bullet-w.gif"; - - b_down0 = new Image(); - b_down0.src = "/gifs/b-downloads-p.gif"; - b_down1 = new Image(); - b_down1.src = "/gifs/b-downloads-c.gif"; - - b_docs0 = new Image(); - b_docs0.src = "/gifs/b-docs-p.gif"; - b_docs1 = new Image(); - b_docs1.src = "/gifs/b-docs-c.gif"; - - b_mail0 = new Image(); - b_mail0.src = "/gifs/b-mailing-p.gif"; - b_mail1 = new Image(); - b_mail1.src = "/gifs/b-mailing-c.gif"; - - b_dev0 = new Image(); - b_dev0.src = "/gifs/b-development-p.gif"; - b_dev1 = new Image(); - b_dev1.src = "/gifs/b-development-c.gif"; - - b_news0 = new Image(); - b_news0.src = "/gifs/b-news-p.gif"; - b_news1 = new Image(); - b_news1.src = "/gifs/b-news-c.gif"; - - b_link0 = new Image(); - b_link0.src = "/gifs/b-links-p.gif"; - b_link1 = new Image(); - b_link1.src = "/gifs/b-links-c.gif"; -"; -} - -function kickHeader($offset,$side,$width) { - global $FONTFACEATTR; - $off=abs($offset); - $innerwidth=$width-40; - $innerwidth2=$innerwidth+21; - $tablewidth=$width; - if ($side=="left"): - $tablewidth=$tablewidth+50; - endif; - if ($side=="none"): - $tablewidth=$tablewidth+1; - endif; - echo "\n"; - if ($side=="left" || $side=="none"): - echo "\n"; - if ($offset>=0): - if ($side=="left"): - echo "\n"; - else: - echo "\n"; - endif; - else: - echo "\n"; - endif; - else: - if ($offset>=0): - echo "\n\n"; - else: - echo "\n\n"; - endif; - echo "\n"; - endif; - echo "\n"; - echo "\n\n"; - echo "\n"; - echo "\n\n\n\n\n\n"; - echo "\n"; - echo "\n\n"; - echo "\n
    "; - spc(1,$off); - echo "

    "; - spc(1,1); - echo "

    "; - spc(1,$off); - echo "
    "; - spc($off,1); - echo "
    "; - spc($off,1); - echo "

    "; - spc(1,10); - echo "

    "; - spc(9,1); - echo "
    \n"; -} - -function kickFooter($kickname,$buttname,$width) { - $innerwidth=$width-40; - $innerwidth2=$innerwidth+21; - echo ""; - echo "\"Close
    "; - echo "
    "; - spc(10,1); - echo "

    "; - spc(1,10); - echo "

    \n"; + echo "\"\""; } function download_link($file, $title) { @@ -283,338 +41,160 @@ function download_link($file, $title) { } } -function gifurl($img) { - global $root_url; - return $root_url . "/gifs/" . $img; -} - -function jpgurl($img) { - global $root_url; - return $root_url . "/jpgs/" . $img; -} - -function makeSideButton($url,$button,$kick,$gif,$width,$height,$vspace,$hspace,$alt,$br) { - if ($url): - echo ""; - else: - echo "\" \n onMouseout=\"hide();\">"; - endif; - endif; - echo "\"$alt\""; - if ($url): - echo ""; - endif; - echo $br; +# make_image() +# - return a tag for a given file (relative to the images dir) +function make_image($file, $alt=false, $align=false, $extras=false, $dir=false, $border=0) { + if ($size = @getimagesize("$GLOBALS[BASE_DIR]/gifs/$file")) { + $image = sprintf('', + "/gifs/", + $file, + $border, + $size[3], + ($alt ? ' alt="'.$alt.'"' : ''), + ($align ? ' align="'.$align.'"' : ''), + ($extras ? ' '.$extras : '') + ); + } else { + $image = sprintf('', + "/gifs/", + $file, + $border, + ($alt ? ' ALT="'.$alt.'"' : ''), + ($align ? ' ALIGN="'.$align.'"' : ''), + ($extras ? ' '.$extras : '') + ); + } + return $image; } -function commonHeader($title) { - global $NS4, $NS3, $IE3, $IE4, $X11, $FRAMEMODE, $FONTFACEATTR, $HTDIG; - global $PHP_SELF, $HTTP_REFERER, $FONTFACE, $COUNTRIES, $MIRRORS, $MYSITE; - global $HAVE_STYLE,$HAVE_SEARCH; - global $NEXT, $PREV, $UP, $HOME, $TOC; - global $DISABLE_KICKOUTS, $DOCUMENT_ROOT; - $HAVE_SEARCH=$MIRRORS[$MYSITE][5]; - - Header("Vary: User-Agent"); - $lang = strtolower(substr(dirname($PHP_SELF),-2)); - switch($lang) { - case 'kr': - case 'ja': - Header("Content-Type: text/html; charset=utf-8"); - Header("Content-language: $lang"); - break; - case 'hu': - Header("Content-Type: text/html; charset=iso-8859-2"); - Header("Content-language: hu"); - break; - default: - Header("Content-Type: text/html; charset=iso-8859-1"); - Header("Content-language: $lang"); - break; - } - -?> - - -PHP: <? echo $title;?> - - - - - - - - - - - - - - -> - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - " ALT="PHP Home Page" BORDER=0>
    -
    -
    - \n"); - if ($UP[0] && $UP[1]): - makeSideButton($UP[0],"up","","up",129,30,0,10,"Up to $UP[1]","
    \n"); - endif; - makeSideButton("/quickref.php","qref","qrefKick","quickref",129,30,0,10,"Quick Reference","
    \n"); - if (!$HTDIG): - makeBorderTOC($title); - endif; - else: - $lastnews=filemtime($DOCUMENT_ROOT."/news.php"); - if ($lastnews): - $lastnews="PHP News last updated: ".date("M d, Y",$lastnews); - else: - $lastnews="PHP in the News"; - endif; - makeSideButton("/downloads.php","down","","downloads",129,30,0,10,"Downloads","
    \n"); - makeSideButton("/docs.php","docs","","docs",129,30,0,10,"Documentation","
    \n"); - makeSideButton("/quickref.php","qref","qrefKick","quickref",129,30,0,10,"Quick Reference","
    \n"); - makeSideButton("/support.php","dev","","development",129,30,0,10,"Getting Help","
    \n"); - makeSideButton("/news.php","news","","news",129,30,0,10,$lastnews,"
    \n"); - makeSideButton("/projects.php","proj","","projects",129,30,0,10,"Projects using PHP","
    \n"); - makeSideButton("/links.php","link","","links",129,30,0,10,"PHP Links","
    \n"); - makeSideButton("/mirrors.php","mirr","mirrorsKick","mirror",129,30,0,10,"Mirror sites","
    \n"); - endif; ?> -

      Thanks to:
     Chek.com
     easyDNS
     VA Linux Systems

      Related sites:
    Apache
    MySQL
    PostgreSQL
    Zend Tech.

      Community:
    LinuxFund.org
    OSDN
    -
    - - - - - -
    - $title
    \n"; - ?> -
    -
    - - - - + + + + + + + +
    -
    -
    - - > - -
    - - +
    + + Mirror last updated: + +  
    +
    +
    +
    + '; + echo make_submit('small_submit.gif', 'search', 'bottom'); + ?> 
    +
    +

    + + - -
    + - -
    -
    -\n"; - if (file_exists($DOCUMENT_ROOT."/stats/index.php")): - makeSideButton("/stats/index.php","stat","","stats",129,30,0,10,"Site Statistics","
    \n"); - endif; -?>
    -
    -
    - - - - -
    - \n"; - makeSideButton("/credits.php","cred","","credits",129,30,0,10,"Who's responsible for this?","
    \n"); - makeSideButton("#tOpOfpAgE","top","","top",129,30,0,10,"Top of this page","
    \n"); - ?> -
    -
    -
    - - - - - -
    - - - - - - -
    - SIZE=1> - Site
    Hosting:

    - -
    -
    -
    -
    -
    -
    - - - - - - - -
    -\n"; - echo "Located in
    ".$COUNTRIES[$country]; - endif; ?> -
    - -
    -
    -
    - -Elements of this website are subject to copyright.
    -Questions about installing or using PHP should be directed to one of the mailing lists.
    -Only questions about the website should be directed to webmaster@php.net.
    -
    -
    - - - - - - - - - - - - - - - - - + + - - - +
    + + +
    + + + \n"; + echo "
    + + +
    + + + + + + + +
    + Copyright © 1998,1999,2000,2001 someone. + All rights reserved. + + This mirror generously provided by: + +
    +
    + +
    + + + + diff --git a/include/site.inc b/include/site.inc index 482c151417..93072ea756 100644 --- a/include/site.inc +++ b/include/site.inc @@ -57,6 +57,7 @@ $MIRRORS = array( "http://bugs.php.net/" => array("us", "chek.com", "chek", "http://www.chek.com/", 2, 1, "en"), "http://php.he.net/" => array("us", "Hurricane Electric", "hurricane", "http://he.net/", 1, 0, "en"), "http://za.php.net/" => array("za", "CSIR Mikomtek", "mikomtek", "http://www.mikom.csir.co.za/", 1, 0, "en"), + "http://news.php.net/" => array("us", "VA Linux", "va", "http://www.valinux.com/", 2, 1, "en"), "" => array("xx", "Unknown", "none", "/", 1, 0, "en") ); diff --git a/mirrors.php b/mirrors.php index 6a647dad6a..06ce995244 100644 --- a/mirrors.php +++ b/mirrors.php @@ -1,4 +1,7 @@ diff --git a/search.php b/search.php index cb8e66bbdd..9b9e3157fe 100644 --- a/search.php +++ b/search.php @@ -124,7 +124,7 @@ function makeBar($no,$page,$pages,$baseurl,$firstdisplayed,$lastdisplayed) { $form="http://uk.php.net/search.php"; } if (!isset($base)) { - if (ereg("^(.+//[^/]+)/",$HTTP_REFERER,&$reg)) { + if (ereg("^(.+//[^/]+)/",$HTTP_REFERER,$reg)) { $base=$reg[1]; } if ($base==$MYSITE) { @@ -162,7 +162,7 @@ function makeBar($no,$page,$pages,$baseurl,$firstdisplayed,$lastdisplayed) { } if (isset($page)) {$off="&page=$page";} else {$off="";} $query="words=$words&config=$config&exclude=$exclude&restrict=$restrict$off"; - exec("$htsearch_prog \"$query\"",&$result); + exec("$htsearch_prog \"$query\"",$result); $rc=count($result); if ($rc<2) { echo "There was an error executing this query.

    Please try later

    "; diff --git a/source.php b/source.php index 638f42b292..302b4828d9 100644 --- a/source.php +++ b/source.php @@ -2,16 +2,13 @@ require("shared.inc"); commonHeader("Show Source"); -if (!isset($page_url)) { +if (!isset($url)) { echo "No page URL specified."; commonFooter(); exit; } ?> -Source of:
    - -IMPORTANT: There are some restrictions on your use of the code and graphics on this site.
    -You should read the
    copyright.
    +Source of:

    1, "/stats" => 1); -$dir = dirname($page_url); +$dir = dirname($url); if ($dir && $legal_dirs[$dir]) { - $page_name = $DOCUMENT_ROOT . $page_url; + $page_name = $DOCUMENT_ROOT . $url; } else { - $page_name = basename($page_url); + $page_name = basename($url); } echo("\n"); @@ -41,9 +38,9 @@

    The syntax highlighted source is automatically generated by PHP from the plaintext script.
    If you're interested in what's behind the commonHeader() and commonFooter functions, -you can always take a look at the +you can always take a look at the source of the shared.inc file. And, of course, if you want to see the source of this page, have -a look here. +a look here.

    Date: Tue, 6 Feb 2001 17:26:17 +0000 Subject: [PATCH 04/49] Rename --- include/{index.php3 => index.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename include/{index.php3 => index.php} (100%) diff --git a/include/index.php3 b/include/index.php similarity index 100% rename from include/index.php3 rename to include/index.php From 0fdf8c5e327140f6bba7a93d3e708688fea56137 Mon Sep 17 00:00:00 2001 From: Colin Viebrock Date: Tue, 6 Feb 2001 17:28:02 +0000 Subject: [PATCH 05/49] changes to php4 --- include/shared.inc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/shared.inc b/include/shared.inc index 090e3d0626..1a4974acd8 100644 --- a/include/shared.inc +++ b/include/shared.inc @@ -1,5 +1,7 @@ Date: Tue, 6 Feb 2001 18:36:20 +0000 Subject: [PATCH 06/49] move all layout functions out of shared --- include/layout.inc | 319 +++++++++++++++++++++++++++++++++++++++++++++ include/shared.inc | 276 +-------------------------------------- 2 files changed, 324 insertions(+), 271 deletions(-) create mode 100644 include/layout.inc diff --git a/include/layout.inc b/include/layout.inc new file mode 100644 index 0000000000..37327d51d6 --- /dev/null +++ b/include/layout.inc @@ -0,0 +1,319 @@ +', + $width, + $height, + ($align ? $align : '') + ); +} + + + +# make_image() +# return an IMG tag for a given file (relative to the images dir) +# + +function make_image($file, $alt=false, $align=false, $extras=false, $dir='/gifs', $border=0) { + if ($size = @getimagesize($GLOBALS[BASE_DIR].$dir.'/'.$file)) { + $image = sprintf('%s', + $dir, + $file, + $border, + $size[3], + ($alt ? $alt : ''), + ($align ? ' align="'.$align.'"' : ''), + ($extras ? ' '.$extras : '') + ); + } else { + $image = sprintf('%s', + $dir, + $file, + $border, + ($alt ? $alt : ''), + ($align ? ' ALIGN="'.$align.'"' : ''), + ($extras ? ' '.$extras : '') + ); + } + return $image; +} + + + +# print_image() +# print an IMG tag for a given file +# + +function print_image($file, $alt=false, $align=false, $extras=false, $dir='/gifs', $border=0) { + print make_image($file, $alt, $align, $extras, $dir); +} + + + +# make_submit() +# - make a submit button image +# +function make_submit($file, $alt=false, $align=false, $extras=false, $dir='/gifs', $border=0) { + $return = make_image($file, $alt, $align, $extras, $dir, $border); + if ($return != "") { + $return = ' | 
    ', $color ); +} + + + +# make_link() +# return a hyperlink to something, within the site +# + +function make_link ($url, $linktext=false, $target=false, $extras=false) { + return sprintf("%s", + $url, + ($target ? ' target="'.$target.'"' : ''), + ($extras ? ' '.$extras : ''), + ($linktext ? $linktext : $url) + ); +} + + + +# print_link() +# echo a hyperlink to something, within the site +# + +function print_link($url, $linktext=false, $target=false, $extras=false) { + echo make_link($url, $linktext, $target, $extras); +} + + +# download_link() +# print a link for a downloadable file (including filesize) +# + +function download_link($file, $title) { + global $filesizes; + if ($tmp = strrchr($file, "/")) { + $local_file = substr($tmp, 1, strlen($tmp)); + } else { + $file = "distributions/$file"; + $local_file = $file; + } + print_link($file, $title); + $size = @filesize($local_file)/1024; + echo("\n"); + if ($size) { + printf(" (%dKB)", $size); + } else if (isset($filesizes[$local_file])) { + echo " (".$filesizes[$local_file].")"; + } +} + + + + + +$enclosed = 0; + + + +# commonheader() +# +# + +function commonHeader($title="",$dont_enclose=0) { + global $MYSITE, $MIRRORS, $COUNTRIES, $enclosed;?> + + + PHP<?php if ($title) echo ": $title";?> + + + + + + + + + + + + + + + +
    +'; + print_image('php_logo.gif', 'PHP'); + if ($GLOBALS["REQUEST_URI"] != "/") echo ''; +?> + + + +  
    +
    +
    +
    + '; + echo make_submit('small_submit.gif', 'search', 'bottom'); + ?> 
    +
    +

    + +
    + +
    + + + + + + + +

    +
    + + + \n"; + echo "
    +

    + + + + + + +
    + Copyright © 1998,1999,2000,2001 The PHP Association, Inc.
    + All rights reserved.
    +
    +
    + This mirror generously provided by: +
    + Last updated:
    +
    +
    + +
    + + + +','

    ','

    '); + reset($fixes); + while (list(,$f)=each($fixes)) { + $text=str_replace(htmlspecialchars($f), $f, $text); + $text=str_replace(htmlspecialchars(strtoupper($f)), $f, $text); + } + $text = "".nl2br($text).""; + return $text; +} + + diff --git a/include/shared.inc b/include/shared.inc index 1a4974acd8..ceaa460802 100644 --- a/include/shared.inc +++ b/include/shared.inc @@ -2,16 +2,19 @@ /* $Id$ */ require_once 'site.inc'; +require_once 'layout.inc'; -/* Check that browser! */ -$HTDIG = false; +header("Last-Modified: ".gmdate("D, d M Y H:i:s",getlastmod())." GMT"); + # figure out the directory root + if (!$BASE_DIR) { $BASE_DIR = ereg_replace("/[^/]+/[^/]+$", "", $INCLUDE_DIR); } + if($SCRIPT_NAME=="/bugs.php" || $SCRIPT_NAME=="/bugstats.php") { # $my_logo="/jpgs/logo-bug.jpg"; $my_logo="/gifs/logo-bug.gif"; @@ -21,275 +24,6 @@ if($SCRIPT_NAME=="/bugs.php" || $SCRIPT_NAME=="/bugstats.php") { $my_size="WIDTH=130 HEIGHT=67"; } -function spc($width, $height) { - echo "\"\""; -} - -function download_link($file, $title) { - global $filesizes; - if ($tmp = strrchr($file, "/")) { - $local_file = substr($tmp, 1, strlen($tmp)); - } else { - $file = "distributions/$file"; - $local_file = $file; - } - echo("$title"); - $size = @filesize($local_file)/1024; - echo("\n"); - if ($size) { - printf(" (%dKB)", $size); - } elseif (isset($filesizes[$local_file])) { - echo " (".$filesizes[$local_file].")"; - } -} - -# make_image() -# - return a tag for a given file (relative to the images dir) -function make_image($file, $alt=false, $align=false, $extras=false, $dir=false, $border=0) { - if ($size = @getimagesize("$GLOBALS[BASE_DIR]/gifs/$file")) { - $image = sprintf('', - "/gifs/", - $file, - $border, - $size[3], - ($alt ? ' alt="'.$alt.'"' : ''), - ($align ? ' align="'.$align.'"' : ''), - ($extras ? ' '.$extras : '') - ); - } else { - $image = sprintf('', - "/gifs/", - $file, - $border, - ($alt ? ' ALT="'.$alt.'"' : ''), - ($align ? ' ALIGN="'.$align.'"' : ''), - ($extras ? ' '.$extras : '') - ); - } - return $image; -} - -# print_image() -# - print an tag for a given file in the images dir -function print_image($file, $alt=false, $align=false, $extras=false, $dir="gifs") { - print make_image($file, $alt, $align, $extras, $dir); -} - -# make_submit() -# - make a submit button image -function make_submit($file,$alt=false,$align=false,$extras=false) { - $return = make_image($file,$alt,$align,$extras); - if ($return != "") { - $return = '', - "/gifs/", - $image, - $width, - $height, - ($align ? ' align="'.$align.'"' : '') - ); -} - -function delim($color=false) { - if (!$color) { - return ' | '; - } - return sprintf(' | ', - $color); -} -# make_link() -# - return a hyperlink to something, within the site - -function make_link ($url, $linktext=false, $target=false, $extras=false) { - $return = sprintf("%s", - $url, - ($target ? ' target="'.$target.'"' : ''), - ($extras ? ' '.$extras : ''), - ($linktext ? $linktext : $url) - ); - return $return; -} -# print_link() -# - echo a hyperlink to something, within the site - -function print_link($url, $linktext=false, $target=false, $extras=false) { - print make_link($url, $linktext, $target, $extras); -} - -$enclosed = 0; - -function commonHeader($title="",$dont_enclose=0) { - global $MYSITE, $MIRRORS, $COUNTRIES, $enclosed;?> - - - PHP<?php if ($title) echo ": $title";?> - - - - - - - - - - - - - - - -
    -'; - print_image('php_logo.gif', 'PHP'); - if ($GLOBALS["REQUEST_URI"] != "/") echo ''; -?> - - - Mirror last updated: - -  
    -
    -
    -
    - '; - echo make_submit('small_submit.gif', 'search', 'bottom'); - ?> 
    -
    -

    - -
    -','

    ','

    '); - reset($fixes); - while (list(,$f)=each($fixes)) { - $text=str_replace(htmlspecialchars($f), $f, $text); - $text=str_replace(htmlspecialchars(strtoupper($f)), $f, $text); - } - $text = "".nl2br($text).""; - return $text; -} - -function commonFooter() { - global $SCRIPT_NAME,$PHP_SELF,$MIRRORS,$MYSITE,$COUNTRIES,$enclosed; - if ($enclosed):?> -
    - - - - - - - -

    -
    - - - \n"; - echo "
    -

    - - - - - - -
    - Copyright © 1998,1999,2000,2001 someone. - All rights reserved. - - This mirror generously provided by: - -
    -
    - -
    - - - - From 9e181c7784a803c1ee05fc76095f4d4b24498927 Mon Sep 17 00:00:00 2001 From: Colin Viebrock Date: Tue, 6 Feb 2001 19:03:14 +0000 Subject: [PATCH 07/49] Remove reference to shared.inc from individual files ... this is now done with auto_prepend --- .htaccess | 9 +- ChangeLog-4.php | 3 +- FAQ.html | 1466 -------------------------------- FAQ.php | 1477 ++++++++++++++++++++++++++++++++- anoncvs.php | 1 - books.php | 1 - bug-pwd-finder.php | 1 - bugs-dos-and-donts.php | 1 - bugs-generating-backtrace.php | 1 - bugs-php3.php | 1 - bugs.php | 1 - bugstats.php | 1 - cfp.php | 1 - credits.php | 1 - cvs-php.php | 1 - cvsup.php | 1 - docs.php | 5 +- download-logos.php | 3 +- download-php3.php | 1 - downloads.php | 1 - error/index.php | 3 +- get-user-notes.php | 4 +- include/layout.inc | 5 +- include/shared.inc | 3 - index.php | 25 +- license/index.php | 1 - links.php | 4 +- manual-lookup.php | 3 +- manual/about-notes.php | 1 - manual/add-note.php | 2 - manual/html/index.php | 1 - manual/index.php | 1 - mirrors.php | 1 - news.php | 1 - oldnews.php | 1 - projects.php | 1 - quickref.php | 1 - search.php | 1 - sites.php | 1 - source.php | 1 - style.css | 15 +- support.php | 1 - thanks.php | 1 - tips.php | 1 - tut.php | 8 +- usage.php | 1 - 46 files changed, 1498 insertions(+), 1567 deletions(-) delete mode 100644 FAQ.html diff --git a/.htaccess b/.htaccess index 633b7478ae..04d86e0f4c 100644 --- a/.htaccess +++ b/.htaccess @@ -1,10 +1,9 @@ - -php3_include_path .:./include:../include:../../include - -php_value include_path .:./include:../include:../../include +php_value include_path .:./include:../include:../../include +php_value auto_prepend_file shared.inc +php_flag short_open_tag on -DirectoryIndex index.php index.php3 +DirectoryIndex index.php AddType application/x-pilot .prc .pdb ErrorDocument 404 /error/ ErrorDocument 401 /error/ diff --git a/ChangeLog-4.php b/ChangeLog-4.php index 3d0febfc38..ed7f6f79dc 100644 --- a/ChangeLog-4.php +++ b/ChangeLog-4.php @@ -1,5 +1,4 @@ - diff --git a/FAQ.html b/FAQ.html deleted file mode 100644 index 2a2659cb6d..0000000000 --- a/FAQ.html +++ /dev/null @@ -1,1466 +0,0 @@ - - - PHP Frequently Asked Questions - - - - - -

    PHP Frequently Asked Questions

    - - - -

    - -This is a list of Frequently Asked Questions about PHP and -their answers. - -

    -


    - - - -
    - -

    1. General Information

    -
    - -
    -
    - 1.1. What is PHP? -
    -
    - From the manual: - -
    -

    PHP Version 3.0 is an HTML-embedded scripting language. Much of - its syntax is borrowed from C, Java and Perl with a couple of unique - PHP-specific features thrown in. The goal of the language is to - allow web developers to write dynamically generated pages quickly. -

    - A nice introduction to PHP by Stig Sæther Bakken can be found here on the Zend - website. -

    -

    - -
    - 1.2. What is the relation between the versions? -
    -
    - PHP/FI 2.0 is an early and no longer supported version of PHP. PHP 3 - is the successor to PHP/FI 2.0 and is a lot nicer. PHP 4 is the latest - generation of PHP, which uses the Zend - engine under the hood. -

    -

    -
    - 1.3. Can I run several versions of PHP at the same time? -
    -
    - Yes. See the INSTALL file that is included in the PHP 4 source distribution. -

    - -

    - 1.4. What are the differences between PHP 3 and PHP 4? -
    -
    - There are a couple of articles written on this by the authors of PHP4. Here's a list of some of the more important new features: -
      -
    • Extended API module -
    • Generalized build process under UNIX -
    • Generic web server interface that also supports multi-threaded web servers -
    • Improved syntax highlighter -
    • Native HTTP session support -
    • Output buffering support -
    • More powerful configuration system -
    • Reference counting -
    - Please see the What's new in PHP4 overview for a detailed explanation of these features and more. -

    -

    - -
    - 1.5. How did you do those pop-out windows for the Search and Mirror buttons on the PHP site (www.php.net)? -
    -
    - Our site designer, Colin Viebrock (cmv@privateworld.com), says: - -
    -

    Those fancy pop-out layers are done with Dynamic HTML (DHTML), Cascading Style Sheets (CSS) and Javascript (version 1.2).

    - There are plenty of references on the web about DHTML and CSS, including: -

    -

    But your best source of information is to view the source code to the pages on the PHP site. - To see the actual DHTML/Javascript code, use your browser's "View Source" function. To see how this code was - generated dynamically using PHP, click on the "Source" button in the upper-right corner of any PHP page. You - will probably also want to view the source of the "shared.inc" file - there is a link to it at the bottom of every - source page. -

    - -

    -
    - -
    - -

    2. PHP mailing lists

    -
    - -
    -
    - 2.1. Is there a PHP mailing list? -
    -
    - Of course! To subscribe, send mail to - php-general-subscribe@lists.php.net. You don't need to include - anything special in the subject or body of the message. - -

    To unsubscribe, send mail to php-general-unsubscribe@lists.php.net. -

    -

    - -
    - 2.2. Help! I can't seem to subscribe to the mailing list! - Help! I can't seem to unsubscribe from the mailing list! -
    -
    - If you have problems subscribing to or unsubscribing from the - PHP mailng list, it may be because the mailing list software - can't figure out the correct mailing address to use. If - your email address was joeblow@example.com, - you can send your subscription request to - php-general-subscribe-joeblow=example.com@lists.php.net, - or your unsubscription request to - php-general-unsubscribe-joeblow=example.com@lists.php.net. -

    -

    - -
    - 2.3. Is there an archive of the mailing list anywhere? -
    -
    - Yes, you will find a list of archive sites on the Support - page.

    -

    -
    - 2.4. What can I ask the mailing list? -
    -
    - Since PHP is growing more and more popular by the day the traffic has increased on the PHP mailing list and as of now the list gets about 150 to 200 posts a day. Because of this it - is in everyones interest that you use the list as a last resort when you have looked everywhere else. -

    - Before you post to the list please have a look in this FAQ and the manual to see if you can find the help there. If there is nothing to be found there try out the mailing list - archives (see above). If you're having problem with installing or configuring PHP please read through all included documentation and README's. If you still can't find any information - that helps you out you're more than welcome to use the mailing list. -

    -

    -

    - 2.5. What information should I include when posting to the mailing list? -
    -
    - Posts like "I can't get PHP up and running! Help me! What is - wrong?" are of absolutely no use to anyone. If you're having problems - getting PHP up and running you must include what operating system - you are running on, what version of PHP you're trying to set up, - how you got it (pre-compiled, CVS, RPMs and so on), what you have - done so far, where you got stuck and the exact error message. -

    - This goes for any other problem as well. You have to include - information on what you have done, where you got stuck, what - you're trying to do and, if applicable, exact error messages. If - you're having problems with your source code you need to include - the part of the code that isn't working. Do not include more code - than necessary though! It makes the post hard to read and a lot of - people might just skip it all together because of this. If you're - unsure about how much information to include in the mail it's better - that you include to much than to little. -

    - Another important thing to remember is to summarize your problem - on the subject line. A subject like "HELP MEEEE!!!" or "What is the - problem here?" will be ignored by the majority of the readers. -

    -
    - -
    - -

    3. Obtaining PHP

    -
    - -
    -
    - 3.1. Where can I obtain PHP? -
    -
    - You can download PHP from any of the members of the - PHP network of sites. These can be found at http://www.php.net/. - You can also use anonymous CVS to get the absolute latest - version of the source. For more information, go to http://cvs.php.net. -

    -

    - -
    - 3.2. Are pre-compiled binary versions available? -
    -
    - Yes, although they are not always up to date. The Windows binary is - generally current, but the Unix binaries lag behind and are only available - for certain platforms. All download are available in the - Downloads section. -

    -

    - -
    - 3.3. Where can I get libraries needed to compile some of the optional - PHP extensions? -
    -
    - Note: Those marked with * are not thread-safe libraries, and - should not be used with PHP as a server module in the multi-threaded - Windows web servers (IIS, Netscape). This does not matter in Unix - environments, yet. - - -

    -

    - -
    - 3.4. How do I get these libraries to work? -
    -
    - You will need to follow instructions provided with the library. Some of - these libraries are detected automatically when you run the 'configure' - script of PHP (such as the GD library), and others you will have to - enable using '--with-EXTENSION' options to 'configure'. Run 'configure - --help' for a listing of these. -

    -

    - -
    - 3.5. I got the latest version of the PHP source code from the CVS - repository on my Windows 95/NT machine, what do I need to compile it? -
    -
    - First, you will need Microsoft Visual C++ v6 (v5 may do - it also, but we do it with v6), and you will need to download the - support files. You will need to unzip this file (which - has subdirectories, so make sure your unzip program keeps them) - into the win32 subdirectory of the source distribution. -

    -

    - -
    - 3.6. Where do I find the Browser Capabilities File? -
    -
    - You can find a browscap.ini file at http://www.cyscape.com/asp/browscap/. -

    -

    -
    - -
    - -

    4. Connecting to databases

    -
    - -
    -
    - 4.1. I heard it's possible to access Microsoft SQL Server from PHP. How? -
    -
    - On Windows 95/NT machines, you can simply use the included ODBC support - and the correct ODBC driver. - -

    A copy of step-by-step ODBC setup can be found here. - -

    On Unix machines, you can use the Sybase-CT driver - to access Microsoft SQL Servers because they are (at - least mostly) protocol-compatible. Sybase has made a free version of the necessary - libraries for Linux systems. For other Unix operating systems, - you need to contact Sybase for the correct libraries. Also see - the answer to the next question - 4.2. -

    -

    - -
    - 4.2. Can I access Microsoft Access databases? -
    -
    - Yes. You already have all the tools you need if you are running - entirely under Windows 95/98 or NT, where you can use ODBC and Microsoft's - ODBC drivers for Microsoft Access databases.

    - If you are running PHP on a Unix box and want to talk to MS-Access on - a Windows box you will need Unix ODBC drivers. - OpenLink Software has Unix-based - ODBC drivers that can do this. There is a free pilot program where you - can download an evaluation copy that doesn't expire and prices start at - $675 for the commercial supported version. - -

    Another alternative is to use an SQL server that has - Windows ODBC drivers and use that to store the data, which you can - then access from Microsoft Access (using ODBC) and PHP (using the - built-in drivers), or to use an intermediary file format that Access - and PHP both understand, such as flat-files or dBase databases. - On this point Tim Hayes from OpenLink software writes: -

    -Using another database as an intermediary is not a good idea, when you can -use ODBC from PHP straight to your database - i.e. with OpenLink's drivers. If -you do need to use an intermediary file format, OpenLink have now released -Virtuoso (a virtual database engine) for NT, Linux and other unix platforms. -Please visit our -website for a free download. -
    - -

    One option that has proven successful is to use MySQL and its - MyODBC drivers on Windows and synchronizing the databases. Steve Lawrence - writes: -

    -
      -
    1. Install MySQL on your platform according to instructions with MySQL. -Latest available from www.mysql.org (get it from your mirror!). No special -configuration required except when you set up a database, and configure the -user account, you should put % in the host field, or the host name of the -Windows computer you wish to access MySQL with. Make a note of your server -name, username, and password.

      - -

    2. Download the MyODBC for Windows driver from the MySQL site. Latest -release is myodbc-2_50_19-win95.zip (NT available too, as well as source -code). Install it on your Windows machine. You can test the operation with -the utilities included with this program.

      - -

    3. Create a user or system dsn in your ODBC administrator, located in the -control panel. Make up a dsn name, enter your hostname, user name, password, -port, etc for you MySQL database configured in step 1.

      - -

    4. Install Access with a full install, this makes sure you get the proper -add-ins.. at the least you will need ODBC support and the linked table -manager.

      - -

    5. Now the fun part! Create a new access database. In the table window right -click and select Link Tables, or under the file menu option, select Get -External Data and then Link Tables. When the file browser box comes up, -select files of type: ODBC. Select System dsn and the name of your dsn -created in step 3. Select the table to link, press ok, and presto! you can -now open the table and add/delete/edit data on your MySQL server! You can -also build queries, import/export tables to MySQL, build forms and reports, -etc.

      -

    -Tips and Tricks: -- You can construct your tables in access and export them to MySQL, then -link them back in. That makes table creation quick.
    -- When creating tables in access, you must have a primary key defined in -order to have write access to the table in access. Make sure you create a -primary key in MySQL before linking in access.
    -- If you change a table in MySQL, you have to re-link it in access. Go to -tools>add-ins>linked table manager, cruise to your ODBC DSN, and select the -table to re-link from there. you can also move your dsn source around there, -just hit the always prompt for new location checkbox before pressing ok. -
    -

    -

    - -
    - 4.3. I saw PHP offers persistent database connections. What does that mean? -
    -
    - Persistent connections are SQL links that do not close when the - execution of your script ends. When a persistent connection is - requested, PHP checks if there's already an identical persistent - connection (that remained open from earlier) - and if it exists, it - uses it. If it does not exist, it creates the link. An 'identical' - connection is a connection that was opened to the same host, with - the same username and the same password (where applicable). - -

    People who aren't thoroughly familiar with the way web servers - work and distribute the load may mistake persistent connects for what - they're not. In particular, they do not give you an ability - to open 'user sessions' on the same SQL link, they do not - give you an ability to build up a transaction efficently, and they - don't do a whole lot of other things. In fact, to be extremely - clear about the subject, persistent connections don't give you any - functionality that wasn't possible with their non-persistent brothers. - -

    Why? - -

    This has to do with the way web servers work. There are three ways - in which your web server can utilize PHP to generate web pages. - -

    The first method is to use PHP as a CGI "wrapper". When run this - way, an instance of the PHP interpreter is created and destroyed for - every page request (for a PHP page) to your web server. Because it - is destroyed after every request, any resources that it acquires (such - as a link to an SQL database server) are closed when it is destroyed. - In this case, you do not gain anything from trying to use persistent - connections -- they simply don't persist. - -

    The second, and most popular, method is to run PHP as a module - in a multiprocess web server, which currently only includes - Apache. A multiprocess server typically has one process (the parent) - which coordinates a set of processes (its children) who actually do - the work of serving up web pages. When each request comes in from a a - client, it is handed off to one of the children that is not already - serving another client. This means that when the same client makes - a second request to the server, it may be serviced by a different - child process than the first time. What a persistent connection does - for you in this case it make it so each child process only needs - to connect to your SQL server the first time that it serves a page - that makes us of such a connection. When another page then requires - a connection to the SQL server, it can reuse the connection that - child established earlier. - -

    The last method is to use PHP as a plug-in for a multithreaded - web server. Currently this is only theoretical -- PHP does not - yet work as a plug-in for any multithreaded web servers. Work is - progressing on support for ISAPI, WSAPI, and NSAPI (on Windows), - which will all allow PHP to be used as a plug-in on multithreaded - servers like Netscape FastTrack, Microsoft's Internet Information - Server (IIS), and O'Reilly's WebSite Pro. When this happens, the - behavior will be essentially the same as for the multiprocess model - described before. - -

    If persistent connections don't have any added functionality, - what are they good for? - -

    The answer here is extremely simple -- efficiency. Persistent - connections are good if the overhead to create a link to your SQL - server is high. Whether or not this overhead is really high depends - on many factors. Like, what kind of database it is, whether or - not it sits on the same computer on which your web server sits, - how loaded the machine the SQL server sits on is and so forth. - The bottom line is that if that connection overhead is high, - persistent connections help you considerably. They cause the child - process to simply connect only once for its entire lifespan, instead - of every time it processes a page that requires connecting to the - SQL server. This means that for every child that opened a persistent - connection will have its own open persistent connection to the server. - For example, if you had 20 different child processes that ran a script - that made a persistent connection to your SQL server, you'd have 20 - different connections to the SQL server, one from each child. - -

    An important summary. Persistent connections were designed to - have one-to-one mapping to regular connections. That means that you - should always be able to replace persistent connections with - non-persistent connections, and it won't change the way your script - behaves. It may (and probably will) change the efficiency - of the script, but not its behavior! -

    -

    - -
    - 4.4. I upgraded to php4, and now mysql keeps telling - me "Warning: MySQL: Unable to save result set in ...". What's up? -
    -
    -

    - Most likely what has happened is, PHP4 was compiled with the '--with-mysql' - option, without specifying the path to mysql. This means PHP is using its - built-in mysql client library. If your system is running applications, - such as php3 as a concurrent Apache module, or auth-mysql, that use other - versions of mysql clients, then there is a conflict between the two - differing versions of those clients. -

    -

    - Recompiling php4, and adding the path to mysql to the flag, - '--with-mysql=/your/path/to/mysql' usually solves the problem. -

    -

    -

    - -
    - 4.5. After installing shared mysql support, Apache dumps - core as soon as libphp4.so is loaded. Can this be fixed? -
    -
    -

    - If your MySQL libs are linked against pthreads this will happen. Check - using ldd. If they are, grab the MySQL tarball and compile from source, - or recompile from the source rpm and remove the switch in the spec file - that turns on the threaded client code. Either of these suggestions will - fix this. Then recompile PHP with the new mysql libs. -

    -

    -

    -
    -
    - -
    - -

    5. Installation

    -
    - -

    To install PHP, follow the instructions in the INSTALL -file located in the distribution. Windows -95 and NT users should also read the README.WIN32 -file. There are also some helpful hints for Windows users -here. -

    If you are trying to install PHP for use with Netscape's web server on -Unix see: http://www.webgenx.com/php/phpnes.php3 -

    -
    - 5.1. Where should my php3.ini file be located? -
    -
    - By default on UNIX it should be in /usr/local/lib. Most people will want - to change this at compile-time with the --with-config-file-path flag. You would, for - example, set it to something like: -
    -    --with-config-file-path=/etc
    -  
    - And then you would copy php3.ini-dist from the distribution to /etc/php3.ini and - edit it to make any local changes you want. -

    -

    - -
    - 5.2. I installed PHP from an RPM, but Apache isn't processing the PHP pages! What's going on here? -
    -
    -
      -
    • Assuming you installed both Apache and PHP from RPM packages, you need to uncomment or add some or all of the following lines in your http.conf file:
      -# Extra Modules
      -AddModule mod_php.c
      -AddModule mod_php3.c
      -AddModule mod_perl.c
      - -# Extra Modules
      -LoadModule php_module modules/mod_php.so
      -LoadModule php3_module modules/libphp3.so (for PHP 3)
      -LoadModule php4_module modules/libphp4.so (for PHP 4)
      -LoadModule perl_module modules/libperl.so
      - -
    • And add:
      -AddType application/x-httpd-php3 .php3 (for PHP 3)
      -AddType application/x-httpd-php .php (for PHP)
      -To the global properties, or to the properties of the VirtualDomain you want to have PHP support added to. -

    - -
    - 5.3. I installed PHP from an RPM, but it doesn't - compile with the database support I need! What's going on here? -
    -
    - Due to the way PHP is currently built, it is not easy to build a - complete flexible PHP RPM. This issue will be addressed in PHP 4. - For PHP, we currently suggest you use the mechanism described in the - INSTALL.REDHAT file in the PHP distribution. If you insist on using - an RPM version of PHP, read on... -

    Currently the RPM packagers are setting up the RPMS to install - without database support to simplify installations and - because RPMS use /usr/ instead of the standard /usr/local/ directory for - files. You need to tell the RPM spec file which databases to support - and the location of the top-level of your database server. -

    This example will explain the process of adding support for the - popular MySQL database server, using the mod installation for Apache. -

    Of course all of this information can be adjusted for any database - server that PHP supports. We will assume you installed MySQL and Apache - completely with RPMS for this example as well. - -

      -
    • First remove mod_php3
      - rpm -e mod_php3
      - -
    • Then get the source rpm and INSTALL it, NOT --rebuild
      - rpm -Uvh mod_php3-3.0.5-2.src.rpm
      -
    • Then edit the /usr/src/redhat/SPECS/mod_php3.spec file
      - In the %build section add the database support you want, and the path.
      - For MySQL you would add --with-mysql=/usr \
      - The %build section will look something like this:
      - -
      -	./configure --prefix=/usr \
      -	--with-apxs=/usr/sbin/apxs \
      -	--with-config-file-path=/usr/lib \
      -	--enable-debug=no \
      -	--enable-safe-mode \
      -	--with-exec-dir=/usr/bin \
      -	--with-mysql=/usr \
      -	--with-system-regex
      -    
      - -
    • Once this modification is made then build the binary rpm as follows:
      - rpm -bb /usr/src/redhat/SPECS/mod_php3.spec
      -
    • Then install the rpm
      - rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm
      -
    - - Make sure you restart Apache, and you now have PHP with MySQL support - using RPM's. Note that it is probably much easier to just build - from the distribution tarball of PHP and follow the instructions in - INSTALL.REDHAT found in that distribution. -

    -

    -
    - -
    - -

    6. Build Problems

    -
    - -
    -
    - 6.1. I got the latest version of PHP using the anonymous CVS service, - but there's no configure script! -
    -
    - You have to have the GNU autoconf package installed so you can - generate the configure script from configure.in. Just run - ./buildconf in the top-level directory after getting - the sources from the CVS server. (Also, unless you run configure - with the --enable-maintainer-mode option, the - configure script will not automatically get rebuilt when the - configure.in file is updated, so you should make sure to do that - manually when you notice configure.in has changed. One symptom - of this is finding things like @VARIABLE@ in your Makefile after - configure or config.status is run.) -

    -

    -
    - 6.2. I'm having problems configuring PHP to work with Apache. It says - it can't find httpd.h, but it's right where I said it is! -
    -
    - You need to tell the configure/setup script the location of the - top-level of your Apache source tree. This means that - you want to specify '--with-apache=/path/to/apache' - and not '--with-apache=/path/to/apache/src'. -

    -

    -
    - 6.3. When I run configure, it says that it can't find the include files or - library for GD, gdbm, or some other package! -
    -
    - You can make the configure script looks for header files and libraries - in non-standard locations by specifying additional flags to pass to - the C preprocessor and linker, such as: -
    -    CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
    -
    - If you're using a csh-variant for your login shell (why?), it would be: -
    -    env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
    -
    -

    -

    - -
    - 6.4. When it is compiling the file language-parser.tab.c, it gives me errors - that say 'yytname undeclared'. -
    -
    - You need to update your version of Bison. You can find the latest version - at ftp://ftp.gnu.org/pub/gnu/bison/. -

    -

    - -
    - 6.5. When I run 'make', it seems to run fine but then fails when it - tries to link the final application complaining that it can't find - some files. -
    -
    - Some old versions of make that don't correctly put the compiled - versions of the files in the functions directory into that same - directory. Try running "cp *.o functions" and then - re-running 'make' to see if that helps. If it does, you should really - upgrade to a recent version of GNU make. -

    -

    - -
    - 6.6. When linking PHP, it complains about a number of undefined references. -
    -
    - Take a look at the link line and make sure that all of the appropriate - libraries are being included at the end. Common ones that you might have - missed are '-ldl' and any libraries required for any database support - you included. -

    - If you're linking with Apache 1.2.x, did you remember to add the - appropriate information to the EXTRA_LIBS line of the Configuration - file and re-rerun Apache's Configure script? See the INSTALL file that - comes with the distribution for more information. -

    - Some people have also reported that they had to add '-ldl' immediately - following 'libphp3.a' when linking with Apache. -

    -

    - -
    - 6.7. I can't figure out how to build PHP with Apache 1.3. -
    -
    -

    This is actually quite easy. Follow these steps carefully: -

      -
    • Grab the latest Apache 1.3 distribution from www.apache.org. -
    • Ungzip and untar it somewhere, for example /usr/local/src/apache-1.3. -
    • Compile PHP by first running ./configure --with-apache=/<path>/apache-1.3 (substitute <path> for the actual path to your apache-1.3 directory. -
    • Type 'make' followed by 'make install' to build PHP and copy the - necessary files to the Apache distribution tree. -
    • Change directories into to your /<path>/apache-1.3/src directory and edit the Configuration file. At the end of the file, add: AddModule modules/php3/libphp3.a. -
    • Type: './Configure' followed by 'make'. -
    • You should now have a PHP-enabled httpd binary! -
    - Note: You can also use the new Apache ./configure script. See the instructions in the README.configure file - which is part of your Apache distribution. Also have a look at the INSTALL file in the PHP distribution. -

    -

    -
    - 6.8. I have followed all the steps to install the Apache module version on UNIX, and my - PHP scripts show up in my browser or I am being asked to save the file. Help! -
    -
    -

    This means that the PHP module is not getting invoked for some reason. Three things to check before - asking for further help: -

      -
    • Make sure that the httpd binary you are running is the actual new httpd binary you just built. To do this, -try running: /path/to/binary/httpd -l
      -If you don't see mod_php3.c listed then you are not running the right binary. Find and install the correct binary. -
    • Make sure you have added the correct Mime Type to one of your Apache .conf files. -It should be: AddType application/x-httpd-php3 .php3 (for PHP 3)
      -or AddType application/x-httpd-php .php (for PHP 4)
      -Also make sure that this AddType line is not hidden away inside a <Virtualhost> or <Directory> block which would -prevent it from applying to the location of your test script. -
    • Finally, the default location of the Apache configuration files changed between Apache 1.2 and Apache 1.3. You -should check to make sure that the configuration file you are adding the AddType line to is actually being read. -You can put an obvious syntax error into your httpd.conf file or some other obvious change that will tell you if -the file is being read correctly. -
    -

    -

    - -
    - 6.9. It says to use: --activate-module=src/modules/php3/libphp3.a, but that file - doesn't exist, so I changed it to --activate-module=src/modules/php3/libmodphp3.a and it doesn't work!? - What's going on? -
    -
    - Well, you decided to try to outsmart the people who wrote those nice step-by-step instructions for you and you - have now discovered that these people cannot be outsmarted. The libphp3.a file is not supposed to - exist. The Apache build process will create it.

    -

    - -
    - 6.10. When I try to build Apache with PHP as a static module using - --activate-module=src/modules/php3/libphp3.a it tells me that my compiler is not ANSI - compliant. -
    -
    - This is a misleading error message from Apache that has been fixed - in more recent versions. -
    -
    - 6.11. When I try to build PHP using --with-apxs I get strange error messages -
    -
    - There are three things to check here. First, for some reason - when Apache builds the apxs Perl script, it sometimes ends up - getting built without the proper compiler and flags variables. - Edit your apxs (sometimes found in /usr/local/apache/bin/apxs - or /usr/sbin/apxs) and check for these lines: -
    my $CFG_CFLAGS_SHLIB  = ' ';      # substituted via Makefile.tmpl
    -my $CFG_LD_SHLIB      = ' ';          # substituted via Makefile.tmpl
    -my $CFG_LDFLAGS_SHLIB = ' ';      # substituted via Makefile.tmpl
    - If this is what you see, you have found your problem. Change these lines to say: -
    my $CFG_CFLAGS_SHLIB  = '-fpic -DSHARED_MODULE';      # substituted via Makefile.tmpl
    -my $CFG_LD_SHLIB      = 'gcc';          # substituted via Makefile.tmpl
    -my $CFG_LDFLAGS_SHLIB = q(-shared);# substituted via Makefile.tmpl 
    - The second possible problem should only be an issue on RedHat-6.1/6.2. - The apxs script RedHat ships is broken. Look for this line: -
    my $CFG_LIBEXECDIR    = 'modules';        # substituted via APACI install
    - If you see the above line, change it to this: -
    my $CFG_LIBEXECDIR    = '/usr/lib/apache';        # substituted via APACI install
    - Last, if you reconfigure/reinstall Apache, add a 'make clean' to the process after - './configure' and before 'make'. -

    -

    -
    - 6.12.During 'make', I get errors in microtime, and a lot of 'RUSAGE_' stuff. -
    -
    - During the 'make' portion of installation, if you encounter problems that look similar - to this: -

    -    microtime.c: In function `php_if_getrusage':
    -    microtime.c:94: storage size of `usg' isn't known
    -    microtime.c:97: `RUSAGE_SELF' undeclared (first use in this function)
    -    microtime.c:97: (Each undeclared identifier is reported only once
    -    microtime.c:97: for each function it appears in.)
    -    microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function)
    -    make[3]: *** [microtime.lo] Error 1
    -    make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard'
    -    make[2]: *** [all-recursive] Error 1
    -    make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard'
    -    make[1]: *** [all-recursive] Error 1
    -    make[1]: Leaving directory `/home/master/php-4.0.1/ext'
    -    make: *** [all-recursive] Error 1
    -    

    - Your system is broken. You need to fix your /usr/include files either by making sure - your /usr/include/linux symlink is pointing to the right place in your kernel sources or - by installing a glibc-devel package that matches your glibc. This has absolutely nothing - to do with PHP. To prove this to yourself, try this simple test: -

    -    $ cat >test.c <<X
    -    #include <sys/resource.h>
    -    X
    -
    -    $ gcc -E test.c >/dev/null
    -
    -    If that spews out errors, you know your include files are messed up. 
    -    

    -

    -

    -
    - -
    - -

    7. Using PHP

    -
    - -
    -
    - 7.1. I would like to write a generic PHP script - that can handle data coming from any form. How do I know which POST - method variables are available? -
    -
    - Make sure that the track_vars feature is - enabled in your php3.ini file. If you compiled PHP with - "--enable-track-vars" it will be on by default. - Alternatively you can enable it at run-time on a per-script - basis by putting <?php_track_vars?> at the top of your file. - When track_vars is on, it creates three associative arrays. - $HTTP_GET_VARS, $HTTP_POST_VARS and $HTTP_COOKIE_VARS. So, to - write a generic script to handle POST method variables you would - need something similar to the following:
    -    while (list($var, $value) = each($HTTP_POST_VARS)) {
    -        echo "$var = $value<br>\n";
    -    }
    -

    -

    - -
    - 7.2. I need to convert all single-quotes (') - to a backslash followed by a single-quote. How can I do this with - a regular expression? -
    -
    - First off, take a look at the addslashes() function. It will do - exactly what you want. You should also have a look at the magic_quotes_gpc directive in your php3.ini - file. -

    - The ereg_replace magic you're looking for, however, is simply:

    -    $escaped = ereg_replace("'", "\\'", $input);
    -

    -

    - -
    - 7.3. When I do the following, the output is printed in the wrong order:
    -      function myfunc($argument) {
    -        echo $argument + 10;
    -      }
    -      $variable = 10;
    -      echo "myfunc($variable) = " . myfunc($variable);
    -    
    -

    What's going on? -

    -
    - To be able to use the results of your function in an expression (such - as concatenating it with other strings in the example above), you need - to return the value, not echo it. -

    -

    - -
    - 7.4. Hey, what happened to my newlines in: -
    -<PRE>
    -  1 <?echo $result[1];?>
    -  2 <?echo $result[2];?>
    -
    -
    -
    - In PHP, the ending for a block of code is either "?>" or - "?>\n" (where \n means a newline). This means that you need to - insert an extra newline after each block of PHP code in the above - example. -

    - Why does PHP do this? Because when formatting normal HTML, this - usually makes your life easier because you don't want that newline, - but you'd have to create extremely long lines or otherwise make the - raw page source unreadable to achieve that effect. -

    -

    - -
    - 7.5. I need to access information in the request header directly. How can - I do this? -
    -
    - The getallheaders() function will do this if you are running PHP as a - module. So, the following bit of code will show you all the request - headers:
    -    $headers = getallheaders();
    -    for(reset($headers); $key = key($headers); next($headers)) {
    -        echo "headers[$key] = ".$headers[$key]."<br>\n";
    -    }
    -
    -

    -

    - -
    - 7.6. When I try to use authentication with IIS I get 'No Input file specified' -
    -
    - The security model of IIS is at fault here. This is a problem - common to all CGI programs running under IIS. A workaround is - to create a plain HTML file (not parsed by php) as the entry page - into an authenticated directory. Then use a META tag to redirect - to the PHP page, or have a link to the PHP page. PHP will - then recognize the authentication correctly. When the ISAPI - module is ready, this will no longer be a problem. This should - not effect other NT web servers. For more information, see: http://support.microsoft.com/support/kb/articles/q160/4/22.asp. -

    -

    - -
    - 7.7. I've followed all the instructions, but still can't get PHP and IIS - to work together! -
    -
    - Make sure any user who needs to run a PHP script has the rights - to run php.exe! IIS uses an anonymous user which is added at the - time IIS is installed. This user needs rights to php.exe. Also, - any authenticated user will also need rights to execute php.exe. And - for IIS4 you need to tell it that PHP is a script engine. -

    -

    - -
    - 7.8. My PHP script works on IE and Lynx, but on Netscape some of my output - is missing. When I do a "View Source" I see the content in IE but not in Netscape. - Even when I telnet to port 80 directly the correct content shows up. How can this be? PHP - is server-side and my browser can't possibly know that the content it is seeing is generated - by PHP, so what is going on? -
    -
    - Very good question! ;) This is a tricky little issue and it has come up twice in the - past month as of this writing. Both times I ended up spending a good 20 minutes trying to - figure out what the heck was going on. The answer is that both IE and Lynx ignore any NULs - (\0) in the HTML stream. Netscape does not. The best way to check for this is to compile - the command-line version of PHP (also known as the CGI version) and run your script from the - command line and pipe it through 'od -c' and look for any \0 characters. (If you are on - Windows you need to find an editor or some other program that lets you look at binary files) - When Netscape sees a NUL in a file it will typically not output anything else on that line - whereas both IE and Lynx will. If this issue has bitten you, congratulations! You are not - alone. -

    -

    - -
    - 7.9. How am I supposed to mix XML and PHP? It complains about my <?xml> tags! -
    -
    - You need to turn off the short tags by setting short_tags to 0 in your - php3.ini file, or by using the php3_short_tags Apache directive. (You - could even use a <File> section to do this selectively.) You can - also disable and re-enable the short tags in your script using the - short_tags() function. -

    -

    - -
    - 7.10. How can I use PHP with FrontPage or Dreamweaver or some other HTML editor that insists on moving my code around? -
    -
    - One of the easiest things to do is to enable using ASP tags in your - PHP code. This allows you to use the ASP-style <% and %> code - delimiters. Most of the popular HTML editors handle those more - intelligently (for now). To enable the ASP-style tags, you need - to set the asp_tags php3.ini variable, or use the php3_asp_tags - Apache directive. -

    -

    - -
    - 7.11. Where can I find a complete list of pre-set variables available - to me, and why are these not documented in the PHP documentation? -
    -
    - The best way is to stick a <?phpinfo()?> tag on a page and load it up. This will - show you all sorts of information about your PHP setup, including a list of both - environment variables and also special variables set by your web server. This list - can't really be documented in the PHP documentation because it will change from one - server to another. -

    -

    - -
    - 7.12.Why do I get an error that looks something like this: -Warning: 0 is not a MySQL result index in <file> on line <x> or -Warning: Supplied argument is not a valid MySQL result resource in <file> on line <x>? -What am I doing wrong? -
    -
    - You are trying to use a result identifier that is 0. The 0 indicates that your query failed - for some reason. You need to check for errors after submitting a query and before you - attempt to use the returned result identifier. The proper way to do this is with code similar - to the following:
    -        $result = mysql_query("select * from tables_priv");
    -        if(!$result) {
    -            echo mysql_error();
    -            exit;
    -        }
    - or:
    -        $result = mysql_query("select * from tables_priv")
    -                    or die("Bad query: ".mysql_error());
    -

    -

    - -
    - 7.13. I'm trying to use an <input - type="image"> tag, but the $foo.x and $foo.y - variables aren't available. Where are they? -
    -
    - When submitting a form, it is possible to use an image instead of - the standard submit button with a tag like: -
    <input type="image" SRC="image.gif" NAME="foo">
    - When the user clicks somewhere on the image, the accompanying form - will be transmitted to the server with two additional variables: - foo.x and foo.y. -

    - Because $foo.x and $foo.y are invalid variable names in PHP, they are - automagically converted to $foo_x and $foo_y. That is, the periods - are replaced with underscores. -

    -

    -
    - 7.14. How do I get all the results from a SELECT -MULTIPLE HTML tag? -
    -
    - The SELECT MULTIPLE tag in an HTML construct allows users to select multiple - items from a list. These items are then passed to the action handler for the - form. The problem is that they are all passed with the same widget name. ie. -
       <SELECT NAME="var" MULTIPLE>
    - Each selected option will arrive at the action handler as: - -
       var=option1
    -   var=option2
    -   var=option3
    - - Each option will overwrite the contents of the previous $var variable. The -solution is to use PHP's - non-indexed array feature. The following should be used: - -
       <SELECT NAME="var[]" MULTIPLE>
    - - This tells PHP to treat var as an array and each assignment of a - value to var[] adds an item to the array. The first item becomes $var[0], - the next $var[1], etc. The count() function can be used to determine how - many options were selected, and the sort() function can be used to sort - the option array if necessary.

    - - Note that if you are using JavaScript the [] on the element name - might cause you problems when you try to refer to the element by name. - Use it's numerical form element id instead, or enclose the - variable name in single quotes and use that as the index to the -elements array, for example: - -

       variable = documents.forms[0].elements['var[]'];
    -
    - -

    -

    -
    - -
    - -

    8. PHP and HTML

    -
    - -
    -
    - 8.1. How do I create an array in a HTML <form>? -
    -
    - To get your <form> result sent as an array to your PHP script - you name the <input>, <select> or <textarea> - elements like this: -
    -    <input name="MyArray[]">
    -    <input name="MyArray[]">
    -    <input name="MyArray[]">
    -    <input name="MyArray[]">
    -    
    - Notice the square brackets after the variable name, that's what - makes it an array. You can group the elements into different arrays - by assigning the same name to different elements: -
    -    <input name="MyArray[]">
    -    <input name="MyArray[]">
    -    <input name="MyOtherArray[]">
    -    <input name="MyOtherArray[]">
    -    
    - This produces two arrays, MyArray and MyOtherArray, that gets sent - to the PHP script. -

    - Note that you must not use indices with arrays in HTML! The - array gets filled in the order the elements appear in the form. For - functions you can use to process these arrays once you get them into - your scripts, please see the Arrays section in the manual. -

    -
    - -
    - - -

    9. PHP and other languages

    -
    - -
    -
    - 9.1. PHP vs. ASP? -
    -
    - ASP is not really a language in itself, it's an acronym for Active - Server Pages, the actual language used to program ASP with is a - script version of Visual Basic. The biggest drawback of ASP is that - it's a proprietary system that is natively used only on Microsofts - Internet Information Server (IIS). This limits it's availability to - Win32 based servers. There are a couple of projects in the works - that allows ASP to run in other environments and webservers; InstantASP - from Halcyon (commercial), - Chili!Soft - ASP from Chili!Soft - (commercial) and OpenASP - from ActiveScripting.org (free). ASP is said to be a slower - and more cumbersome language than PHP, less stable as well. Some of - the pros of ASP is that since it uses VBScript it's relatively easy - to pick up the language if you're already know how to program in - Visual Basic. ASP support is also enabled by default in the IIS - server making it easy to get up and running. -
    -

    -

    - 9.2. Is there an ASP to PHP converter? -
    -
    - Yes, asp2php is the one most often referred to. -
    -

    -

    - 9.3. PHP vs. Cold Fusion? -
    -
    - PHP is commonly said to be faster and more efficient for complex - programming tasks and trying out new ideas. PHP is generally referred - to as more stable and less resource intensive as well. Cold Fusion - has better error handling, database abstraction and date parsing - although database abstraction is being addressed in PHP 4. Another - thing that is listed as one of Cold Fusion's strengths is its excellent - search engine, but it has been mentioned that a search engine is not - something that should be included in a web scripting language. PHP - runs on almost every platform there is; Cold Fusion is only available - on Win32, Solaris, Linux and HP/UX. Cold Fusion has a better IDE - and is generally easier to get started with, whereas PHP initially - requires more programming knowledge. - -

    A great summary by Michael J Sheldon on this topic has - been posted to the PHP mailing list. A copy can be found here. -

    -

    -

    - 9.4. PHP vs. Perl? -
    -
    - The biggest advantage of PHP over Perl is that PHP was designed for - scripting for the web where Perl was designed to do a lot more and can - because of this get very complicated. The flexibility / complexity - of Perl makes it easier to write code that another author / coder - has a hard time reading. PHP has a less confusing and stricter format - without losing flexibility. PHP is easier to integrate into existing - HTML than Perl. PHP has pretty much all the 'good' functionality of - Perl; constructs, syntax and so on, without making it as complicated - as Perl can be. Perl is a very tried and true language, it's been - around since the late eighties, but PHP is maturing very quickly. -
    -
    - -
    - -

    10. Common Problems

    -
    - -
    -
    - 10.1. I installed PHP, but every time I load - a document, I get the message 'Document Contains No Data'! What's - going on here? -
    -
    - This probably means that PHP is having some sort of problem - and is core-dumping. Look in your server error log to see if - this is the case, and then try to reproduce the problem with - a small test case. If you know how to use 'gdb', it is very - helpful when you can provide a backtrace with your bug report - to help the developers pinpoint the problem. If you are using - PHP as an Apache module try something like: -
      -
    • Stop your httpd processes -
    • gdb httpd -
    • > run -X -f /path/to/httpd.conf -
    • Then fetch the URL causing the problem with your browser -
    • If you are getting a core dump, gdb should inform you of this now -
    • type: bt -
    • You should include your backtrace in your bug report. This should be submitted to http://bugs.php.net -
    -

    - If your script uses the regular expression functions (ereg() - and friends), you should make sure that you compiled PHP and - Apache with the same regular expression package. (This should - happen automatically with PHP and Apache 1.3.x) -

    -

    - -
    - 10.2. I'm trying to access one of the standard CGI - variables (such as $DOCUMENT_ROOT or $HTTP_REFERER) in a user-defined - function, and it can't seem to find it. What's wrong? -
    -
    - Environment variables are now normal global variables, so you must - either declare them as global variables in your function (by using - "global $DOCUMENT_ROOT;", for example) or by using - the global variable array (ie, "$GLOBALS["DOCUMENT_ROOT"]". -

    -

    - -
    - 10.3. I patched Apache with the FrontPage extensions patch, and suddenly PHP stopped - working. Is PHP incompatible with the Apache FrontPage extensions? -
    -
    - No, PHP works fine with the FrontPage extensions. - The problem is that the FrontPage patch modifies several Apache structures, - that PHP relies on. - Recompiling PHP (using 'make clean ; make') after the FP patch is applied - would solve the problem. -

    -

    - -
    - 10.4. I think I found a bug! Who should I tell? -
    -
    - You should go to the PHP Bug Database and make sure the bug - isn't a known bug. If you don't see it in the database, use - the reporting form to report the bug. It is important to use - the bug database instead of just sending an email to one of the - mailing lists because the bug will have a tracking number assigned - and it will then be possible for you to go back later and check - on the status of the bug. The bug database can be found at http://bugs.php.net/. -

    -

    -
    - -
    - -

    11. Migrating from PHP3 to PHP4

    -
    - -
    -
    - 11.1. General information -
    -
    - PHP 4 was designed to be as compatible with earlier versions of - PHP as possible and very little functionality was broken in the - process. If you're really unsure about compatibility you should - install PHP 4 in a test environment and run your scripts there. -
    -

    -

    - 11.2. Incompatible functions -
    -
    - Since PHP 4 is basically a rewrite of the entire PHP engine there - was very few functions that were altered and only then some of - the more exotic ones. -
    -
    - -
    - -

    12. Migrating from PHP2 to PHP3

    -
    -
    -
    - 12.1. General information -
    -
    - PHP/FI 2.0 is no longer supported. Please see the manual for - information about migration from PHP/FI 2.0. -
    -
    - -
    - -

    Credits

    - -

    This FAQ was originally written by Jim Winstead. It is currently -maintained by the PHP Documentation Team. - -

    - - - -$Id$ - - - - diff --git a/FAQ.php b/FAQ.php index 44a3de3133..ed720e6935 100644 --- a/FAQ.php +++ b/FAQ.php @@ -1,28 +1,1459 @@ - - $fd = fopen("FAQ.html", "r"); +

    PHP Frequently Asked Questions

    - /* turn off magic quotes for broken mirrors... */ - set_magic_quotes_runtime(0); + - /* drop everything until it tells us to stop chopping */ - while (!feof($fd)) { - if (ereg("stop chopping", fgets($fd, 1024))) { - break; - } - } - /* now print everything until it tells us to start chopping again */ - while (!feof($fd)) { - if (!ereg("start chopping", $line = fgets($fd, 1024))) { - echo $line; - } else { - break; +

    + +This is a list of Frequently Asked Questions about PHP and +their answers. + +

    +


    + + + +
    + +

    1. General Information

    +
    + +
    +
    + 1.1. What is PHP? +
    +
    + From the manual: + +
    +

    PHP is an HTML-embedded scripting language. Much of + its syntax is borrowed from C, Java and Perl with a couple of unique + PHP-specific features thrown in. The goal of the language is to + allow web developers to write dynamically generated pages quickly. +

    + A nice introduction to PHP by Stig Sæther Bakken can be found here on the Zend + website. +

    +

    + +
    + 1.2. What is the relation between the versions? +
    +
    + PHP/FI 2.0 is an early and no longer supported version of PHP. PHP 3 + is the successor to PHP/FI 2.0 and is a lot nicer. PHP 4 is the latest + generation of PHP, which uses the + under the hood. +

    +

    +
    + 1.3. Can I run several versions of PHP at the same time? +
    +
    + Yes. See the INSTALL file that is included in the PHP 4 source distribution. +

    + +

    + 1.4. What are the differences between PHP 3 and PHP 4? +
    +
    + There are a couple of articles written on this by the authors of PHP4. Here's a list of some of the more important new features: +
      +
    • Extended API module +
    • Generalized build process under UNIX +
    • Generic web server interface that also supports multi-threaded web servers +
    • Improved syntax highlighter +
    • Native HTTP session support +
    • Output buffering support +
    • More powerful configuration system +
    • Reference counting +
    + Please see the What's new in PHP4 overview for a detailed explanation of these features and more. +

    +

    + +
    + 1.5. How did you do those pop-out windows for the Search and Mirror buttons on the PHP site (www.php.net)? +
    +
    + Our site designer, Colin Viebrock (cmv@privateworld.com), says: + +
    +

    Those fancy pop-out layers are done with Dynamic HTML (DHTML), Cascading Style Sheets (CSS) and Javascript (version 1.2).

    + There are plenty of references on the web about DHTML and CSS, including: +

    +

    But your best source of information is to view the source code to the pages on the PHP site. + To see the actual DHTML/Javascript code, use your browser's "View Source" function. To see how this code was + generated dynamically using PHP, click on the "Source" button in the upper-right corner of any PHP page. You + will probably also want to view the source of the "shared.inc" file - there is a link to it at the bottom of every + source page. +

    + +

    +
    + +
    + +

    2. PHP mailing lists

    +
    + +
    +
    + 2.1. Is there a PHP mailing list? +
    +
    + Of course! To subscribe, send mail to + php-general-subscribe@lists.php.net. You don't need to include + anything special in the subject or body of the message. + +

    To unsubscribe, send mail to php-general-unsubscribe@lists.php.net. +

    +

    + +
    + 2.2. Help! I can't seem to subscribe to the mailing list! + Help! I can't seem to unsubscribe from the mailing list! +
    +
    + If you have problems subscribing to or unsubscribing from the + PHP mailng list, it may be because the mailing list software + can't figure out the correct mailing address to use. If + your email address was joeblow@example.com, + you can send your subscription request to + php-general-subscribe-joeblow=example.com@lists.php.net, + or your unsubscription request to + php-general-unsubscribe-joeblow=example.com@lists.php.net. +

    +

    + +
    + 2.3. Is there an archive of the mailing list anywhere? +
    +
    + Yes, you will find a list of archive sites on the Support + page.

    +

    +
    + 2.4. What can I ask the mailing list? +
    +
    + Since PHP is growing more and more popular by the day the traffic has increased on the PHP mailing list and as of now the list gets about 150 to 200 posts a day. Because of this it + is in everyones interest that you use the list as a last resort when you have looked everywhere else. +

    + Before you post to the list please have a look in this FAQ and the manual to see if you can find the help there. If there is nothing to be found there try out the mailing list + archives (see above). If you're having problem with installing or configuring PHP please read through all included documentation and README's. If you still can't find any information + that helps you out you're more than welcome to use the mailing list. +

    +

    +

    + 2.5. What information should I include when posting to the mailing list? +
    +
    + Posts like "I can't get PHP up and running! Help me! What is + wrong?" are of absolutely no use to anyone. If you're having problems + getting PHP up and running you must include what operating system + you are running on, what version of PHP you're trying to set up, + how you got it (pre-compiled, CVS, RPMs and so on), what you have + done so far, where you got stuck and the exact error message. +

    + This goes for any other problem as well. You have to include + information on what you have done, where you got stuck, what + you're trying to do and, if applicable, exact error messages. If + you're having problems with your source code you need to include + the part of the code that isn't working. Do not include more code + than necessary though! It makes the post hard to read and a lot of + people might just skip it all together because of this. If you're + unsure about how much information to include in the mail it's better + that you include to much than to little. +

    + Another important thing to remember is to summarize your problem + on the subject line. A subject like "HELP MEEEE!!!" or "What is the + problem here?" will be ignored by the majority of the readers. +

    +
    + +
    + +

    3. Obtaining PHP

    +
    + +
    +
    + 3.1. Where can I obtain PHP? +
    +
    + You can download PHP from any of the members of the + PHP network of sites. These can be found at http://www.php.net/. + You can also use anonymous CVS to get the absolute latest + version of the source. For more information, go to http://cvs.php.net. +

    +

    + +
    + 3.2. Are pre-compiled binary versions available? +
    +
    + Yes, although they are not always up to date. The Windows binary is + generally current, but the Unix binaries lag behind and are only available + for certain platforms. All download are available in the + Downloads section. +

    +

    + +
    + 3.3. Where can I get libraries needed to compile some of the optional + PHP extensions? +
    +
    + Note: Those marked with * are not thread-safe libraries, and + should not be used with PHP as a server module in the multi-threaded + Windows web servers (IIS, Netscape). This does not matter in Unix + environments, yet. + + +

    +

    + +
    + 3.4. How do I get these libraries to work? +
    +
    + You will need to follow instructions provided with the library. Some of + these libraries are detected automatically when you run the 'configure' + script of PHP (such as the GD library), and others you will have to + enable using '--with-EXTENSION' options to 'configure'. Run 'configure + --help' for a listing of these. +

    +

    + +
    + 3.5. I got the latest version of the PHP source code from the CVS + repository on my Windows 95/NT machine, what do I need to compile it? +
    +
    + First, you will need Microsoft Visual C++ v6 (v5 may do + it also, but we do it with v6), and you will need to download the + support files. You will need to unzip this file (which + has subdirectories, so make sure your unzip program keeps them) + into the win32 subdirectory of the source distribution. +

    +

    + +
    + 3.6. Where do I find the Browser Capabilities File? +
    +
    + You can find a browscap.ini file at http://www.cyscape.com/asp/browscap/. +

    +

    +
    + +
    + +

    4. Connecting to databases

    +
    + +
    +
    + 4.1. I heard it's possible to access Microsoft SQL Server from PHP. How? +
    +
    + On Windows 95/NT machines, you can simply use the included ODBC support + and the correct ODBC driver. + +

    A copy of step-by-step ODBC setup can be found here. + +

    On Unix machines, you can use the Sybase-CT driver + to access Microsoft SQL Servers because they are (at + least mostly) protocol-compatible. Sybase has made a free version of the necessary + libraries for Linux systems. For other Unix operating systems, + you need to contact Sybase for the correct libraries. Also see + the answer to the next question - 4.2. +

    +

    + +
    + 4.2. Can I access Microsoft Access databases? +
    +
    + Yes. You already have all the tools you need if you are running + entirely under Windows 95/98 or NT, where you can use ODBC and Microsoft's + ODBC drivers for Microsoft Access databases.

    + If you are running PHP on a Unix box and want to talk to MS-Access on + a Windows box you will need Unix ODBC drivers. + OpenLink Software has Unix-based + ODBC drivers that can do this. There is a free pilot program where you + can download an evaluation copy that doesn't expire and prices start at + $675 for the commercial supported version. + +

    Another alternative is to use an SQL server that has + Windows ODBC drivers and use that to store the data, which you can + then access from Microsoft Access (using ODBC) and PHP (using the + built-in drivers), or to use an intermediary file format that Access + and PHP both understand, such as flat-files or dBase databases. + On this point Tim Hayes from OpenLink software writes: +

    +Using another database as an intermediary is not a good idea, when you can +use ODBC from PHP straight to your database - i.e. with OpenLink's drivers. If +you do need to use an intermediary file format, OpenLink have now released +Virtuoso (a virtual database engine) for NT, Linux and other unix platforms. +Please visit our +website for a free download. +
    + +

    One option that has proven successful is to use MySQL and its + MyODBC drivers on Windows and synchronizing the databases. Steve Lawrence + writes: +

    +
      +
    1. Install MySQL on your platform according to instructions with MySQL. +Latest available from www.mysql.org (get it from your mirror!). No special +configuration required except when you set up a database, and configure the +user account, you should put % in the host field, or the host name of the +Windows computer you wish to access MySQL with. Make a note of your server +name, username, and password.

      + +

    2. Download the MyODBC for Windows driver from the MySQL site. Latest +release is myodbc-2_50_19-win95.zip (NT available too, as well as source +code). Install it on your Windows machine. You can test the operation with +the utilities included with this program.

      + +

    3. Create a user or system dsn in your ODBC administrator, located in the +control panel. Make up a dsn name, enter your hostname, user name, password, +port, etc for you MySQL database configured in step 1.

      + +

    4. Install Access with a full install, this makes sure you get the proper +add-ins.. at the least you will need ODBC support and the linked table +manager.

      + +

    5. Now the fun part! Create a new access database. In the table window right +click and select Link Tables, or under the file menu option, select Get +External Data and then Link Tables. When the file browser box comes up, +select files of type: ODBC. Select System dsn and the name of your dsn +created in step 3. Select the table to link, press ok, and presto! you can +now open the table and add/delete/edit data on your MySQL server! You can +also build queries, import/export tables to MySQL, build forms and reports, +etc.

      +

    +Tips and Tricks: +- You can construct your tables in access and export them to MySQL, then +link them back in. That makes table creation quick.
    +- When creating tables in access, you must have a primary key defined in +order to have write access to the table in access. Make sure you create a +primary key in MySQL before linking in access.
    +- If you change a table in MySQL, you have to re-link it in access. Go to +tools>add-ins>linked table manager, cruise to your ODBC DSN, and select the +table to re-link from there. you can also move your dsn source around there, +just hit the always prompt for new location checkbox before pressing ok. +
    +

    +

    + +
    + 4.3. I saw PHP offers persistent database connections. What does that mean? +
    +
    + Persistent connections are SQL links that do not close when the + execution of your script ends. When a persistent connection is + requested, PHP checks if there's already an identical persistent + connection (that remained open from earlier) - and if it exists, it + uses it. If it does not exist, it creates the link. An 'identical' + connection is a connection that was opened to the same host, with + the same username and the same password (where applicable). + +

    People who aren't thoroughly familiar with the way web servers + work and distribute the load may mistake persistent connects for what + they're not. In particular, they do not give you an ability + to open 'user sessions' on the same SQL link, they do not + give you an ability to build up a transaction efficently, and they + don't do a whole lot of other things. In fact, to be extremely + clear about the subject, persistent connections don't give you any + functionality that wasn't possible with their non-persistent brothers. + +

    Why? + +

    This has to do with the way web servers work. There are three ways + in which your web server can utilize PHP to generate web pages. + +

    The first method is to use PHP as a CGI "wrapper". When run this + way, an instance of the PHP interpreter is created and destroyed for + every page request (for a PHP page) to your web server. Because it + is destroyed after every request, any resources that it acquires (such + as a link to an SQL database server) are closed when it is destroyed. + In this case, you do not gain anything from trying to use persistent + connections -- they simply don't persist. + +

    The second, and most popular, method is to run PHP as a module + in a multiprocess web server, which currently only includes + Apache. A multiprocess server typically has one process (the parent) + which coordinates a set of processes (its children) who actually do + the work of serving up web pages. When each request comes in from a a + client, it is handed off to one of the children that is not already + serving another client. This means that when the same client makes + a second request to the server, it may be serviced by a different + child process than the first time. What a persistent connection does + for you in this case it make it so each child process only needs + to connect to your SQL server the first time that it serves a page + that makes us of such a connection. When another page then requires + a connection to the SQL server, it can reuse the connection that + child established earlier. + +

    The last method is to use PHP as a plug-in for a multithreaded + web server. Currently this is only theoretical -- PHP does not + yet work as a plug-in for any multithreaded web servers. Work is + progressing on support for ISAPI, WSAPI, and NSAPI (on Windows), + which will all allow PHP to be used as a plug-in on multithreaded + servers like Netscape FastTrack, Microsoft's Internet Information + Server (IIS), and O'Reilly's WebSite Pro. When this happens, the + behavior will be essentially the same as for the multiprocess model + described before. + +

    If persistent connections don't have any added functionality, + what are they good for? + +

    The answer here is extremely simple -- efficiency. Persistent + connections are good if the overhead to create a link to your SQL + server is high. Whether or not this overhead is really high depends + on many factors. Like, what kind of database it is, whether or + not it sits on the same computer on which your web server sits, + how loaded the machine the SQL server sits on is and so forth. + The bottom line is that if that connection overhead is high, + persistent connections help you considerably. They cause the child + process to simply connect only once for its entire lifespan, instead + of every time it processes a page that requires connecting to the + SQL server. This means that for every child that opened a persistent + connection will have its own open persistent connection to the server. + For example, if you had 20 different child processes that ran a script + that made a persistent connection to your SQL server, you'd have 20 + different connections to the SQL server, one from each child. + +

    An important summary. Persistent connections were designed to + have one-to-one mapping to regular connections. That means that you + should always be able to replace persistent connections with + non-persistent connections, and it won't change the way your script + behaves. It may (and probably will) change the efficiency + of the script, but not its behavior! +

    +

    + +
    + 4.4. I upgraded to php4, and now mysql keeps telling + me "Warning: MySQL: Unable to save result set in ...". What's up? +
    +
    +

    + Most likely what has happened is, PHP4 was compiled with the '--with-mysql' + option, without specifying the path to mysql. This means PHP is using its + built-in mysql client library. If your system is running applications, + such as php3 as a concurrent Apache module, or auth-mysql, that use other + versions of mysql clients, then there is a conflict between the two + differing versions of those clients. +

    +

    + Recompiling php4, and adding the path to mysql to the flag, + '--with-mysql=/your/path/to/mysql' usually solves the problem. +

    +

    +

    + +
    + 4.5. After installing shared mysql support, Apache dumps + core as soon as libphp4.so is loaded. Can this be fixed? +
    +
    +

    + If your MySQL libs are linked against pthreads this will happen. Check + using ldd. If they are, grab the MySQL tarball and compile from source, + or recompile from the source rpm and remove the switch in the spec file + that turns on the threaded client code. Either of these suggestions will + fix this. Then recompile PHP with the new mysql libs. +

    +

    +

    +
    +
    + +
    + +

    5. Installation

    +
    + +

    To install PHP, follow the instructions in the INSTALL +file located in the distribution. Windows +95 and NT users should also read the README.WIN32 +file. There are also some helpful hints for Windows users +here. +

    If you are trying to install PHP for use with Netscape's web server on +Unix see: http://www.webgenx.com/php/phpnes.php3 +

    +
    + 5.1. Where should my php3.ini file be located? +
    +
    + By default on UNIX it should be in /usr/local/lib. Most people will want + to change this at compile-time with the --with-config-file-path flag. You would, for + example, set it to something like: +
    +    --with-config-file-path=/etc
    +  
    + And then you would copy php3.ini-dist from the distribution to /etc/php3.ini and + edit it to make any local changes you want. +

    +

    + +
    + 5.2. I installed PHP from an RPM, but Apache isn't processing the PHP pages! What's going on here? +
    +
    +
      +
    • Assuming you installed both Apache and PHP from RPM packages, you need to uncomment or add some or all of the following lines in your http.conf file:
      +
      +# Extra Modules
      +AddModule mod_php.c
      +AddModule mod_php3.c
      +AddModule mod_perl.c
      +
      +# Extra Modules
      +LoadModule php_module         modules/mod_php.so
      +LoadModule php3_module        modules/libphp3.so     /* for PHP 3 */
      +LoadModule php4_module        modules/libphp4.so     /* for PHP 4 */
      +LoadModule perl_module        modules/libperl.so
      +
      + +
    • And add:
      +
      +AddType application/x-httpd-php3 .php3    /* for PHP 3 */
      +AddType application/x-httpd-php .php      /* for PHP 4 */
      +
      +... to the global properties, or to the properties of the VirtualDomain you want to have PHP support added to. +

    + +
    + 5.3. I installed PHP from an RPM, but it doesn't + compile with the database support I need! What's going on here? +
    +
    + Due to the way PHP is currently built, it is not easy to build a + complete flexible PHP RPM. This issue will be addressed in PHP 4. + For PHP, we currently suggest you use the mechanism described in the + INSTALL.REDHAT file in the PHP distribution. If you insist on using + an RPM version of PHP, read on... +

    Currently the RPM packagers are setting up the RPMS to install + without database support to simplify installations and + because RPMS use /usr/ instead of the standard /usr/local/ directory for + files. You need to tell the RPM spec file which databases to support + and the location of the top-level of your database server. +

    This example will explain the process of adding support for the + popular MySQL database server, using the mod installation for Apache. +

    Of course all of this information can be adjusted for any database + server that PHP supports. We will assume you installed MySQL and Apache + completely with RPMS for this example as well. + +

      +
    • First remove mod_php3
      + rpm -e mod_php3
      + +
    • Then get the source rpm and INSTALL it, NOT --rebuild
      + rpm -Uvh mod_php3-3.0.5-2.src.rpm
      +
    • Then edit the /usr/src/redhat/SPECS/mod_php3.spec file
      + In the %build section add the database support you want, and the path.
      + For MySQL you would add --with-mysql=/usr \
      + The %build section will look something like this:
      + +
      +	./configure --prefix=/usr \
      +	--with-apxs=/usr/sbin/apxs \
      +	--with-config-file-path=/usr/lib \
      +	--enable-debug=no \
      +	--enable-safe-mode \
      +	--with-exec-dir=/usr/bin \
      +	--with-mysql=/usr \
      +	--with-system-regex
      +    
      + +
    • Once this modification is made then build the binary rpm as follows:
      + rpm -bb /usr/src/redhat/SPECS/mod_php3.spec
      +
    • Then install the rpm
      + rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm
      +
    + + Make sure you restart Apache, and you now have PHP with MySQL support + using RPM's. Note that it is probably much easier to just build + from the distribution tarball of PHP and follow the instructions in + INSTALL.REDHAT found in that distribution. +

    +

    +
    + +
    + +

    6. Build Problems

    +
    + +
    +
    + 6.1. I got the latest version of PHP using the anonymous CVS service, + but there's no configure script! +
    +
    + You have to have the GNU autoconf package installed so you can + generate the configure script from configure.in. Just run + ./buildconf in the top-level directory after getting + the sources from the CVS server. (Also, unless you run configure + with the --enable-maintainer-mode option, the + configure script will not automatically get rebuilt when the + configure.in file is updated, so you should make sure to do that + manually when you notice configure.in has changed. One symptom + of this is finding things like @VARIABLE@ in your Makefile after + configure or config.status is run.) +

    +

    +
    + 6.2. I'm having problems configuring PHP to work with Apache. It says + it can't find httpd.h, but it's right where I said it is! +
    +
    + You need to tell the configure/setup script the location of the + top-level of your Apache source tree. This means that + you want to specify '--with-apache=/path/to/apache' + and not '--with-apache=/path/to/apache/src'. +

    +

    +
    + 6.3. When I run configure, it says that it can't find the include files or + library for GD, gdbm, or some other package! +
    +
    + You can make the configure script looks for header files and libraries + in non-standard locations by specifying additional flags to pass to + the C preprocessor and linker, such as: +
    +    CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
    +
    + If you're using a csh-variant for your login shell (why?), it would be: +
    +    env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
    +
    +

    +

    + +
    + 6.4. When it is compiling the file language-parser.tab.c, it gives me errors + that say 'yytname undeclared'. +
    +
    + You need to update your version of Bison. You can find the latest version + at ftp://ftp.gnu.org/pub/gnu/bison/. +

    +

    + +
    + 6.5. When I run 'make', it seems to run fine but then fails when it + tries to link the final application complaining that it can't find + some files. +
    +
    + Some old versions of make that don't correctly put the compiled + versions of the files in the functions directory into that same + directory. Try running "cp *.o functions" and then + re-running 'make' to see if that helps. If it does, you should really + upgrade to a recent version of GNU make. +

    +

    + +
    + 6.6. When linking PHP, it complains about a number of undefined references. +
    +
    + Take a look at the link line and make sure that all of the appropriate + libraries are being included at the end. Common ones that you might have + missed are '-ldl' and any libraries required for any database support + you included. +

    + If you're linking with Apache 1.2.x, did you remember to add the + appropriate information to the EXTRA_LIBS line of the Configuration + file and re-rerun Apache's Configure script? See the INSTALL file that + comes with the distribution for more information. +

    + Some people have also reported that they had to add '-ldl' immediately + following 'libphp3.a' when linking with Apache. +

    +

    + +
    + 6.7. I can't figure out how to build PHP with Apache 1.3. +
    +
    +

    This is actually quite easy. Follow these steps carefully: +

      +
    • Grab the latest Apache 1.3 distribution from www.apache.org. +
    • Ungzip and untar it somewhere, for example /usr/local/src/apache-1.3. +
    • Compile PHP by first running ./configure --with-apache=/<path>/apache-1.3 (substitute <path> for the actual path to your apache-1.3 directory. +
    • Type 'make' followed by 'make install' to build PHP and copy the + necessary files to the Apache distribution tree. +
    • Change directories into to your /<path>/apache-1.3/src directory and edit the Configuration file. At the end of the file, add: AddModule modules/php3/libphp3.a. +
    • Type: './Configure' followed by 'make'. +
    • You should now have a PHP-enabled httpd binary! +
    + Note: You can also use the new Apache ./configure script. See the instructions in the README.configure file + which is part of your Apache distribution. Also have a look at the INSTALL file in the PHP distribution. +

    +

    +
    + 6.8. I have followed all the steps to install the Apache module version on UNIX, and my + PHP scripts show up in my browser or I am being asked to save the file. Help! +
    +
    +

    This means that the PHP module is not getting invoked for some reason. Three things to check before + asking for further help: +

      +
    • Make sure that the httpd binary you are running is the actual new httpd binary you just built. To do this, +try running: /path/to/binary/httpd -l
      +If you don't see mod_php3.c listed then you are not running the right binary. Find and install the correct binary. +
    • Make sure you have added the correct Mime Type to one of your Apache .conf files. +It should be: AddType application/x-httpd-php3 .php3 (for PHP 3)
      +or AddType application/x-httpd-php .php (for PHP 4)
      +Also make sure that this AddType line is not hidden away inside a <Virtualhost> or <Directory> block which would +prevent it from applying to the location of your test script. +
    • Finally, the default location of the Apache configuration files changed between Apache 1.2 and Apache 1.3. You +should check to make sure that the configuration file you are adding the AddType line to is actually being read. +You can put an obvious syntax error into your httpd.conf file or some other obvious change that will tell you if +the file is being read correctly. +
    +

    +

    + +
    + 6.9. It says to use: --activate-module=src/modules/php3/libphp3.a, but that file + doesn't exist, so I changed it to --activate-module=src/modules/php3/libmodphp3.a and it doesn't work!? + What's going on? +
    +
    + Well, you decided to try to outsmart the people who wrote those nice step-by-step instructions for you and you + have now discovered that these people cannot be outsmarted. The libphp3.a file is not supposed to + exist. The Apache build process will create it.

    +

    + +
    + 6.10. When I try to build Apache with PHP as a static module using + --activate-module=src/modules/php3/libphp3.a it tells me that my compiler is not ANSI + compliant. +
    +
    + This is a misleading error message from Apache that has been fixed + in more recent versions. +
    +
    + 6.11. When I try to build PHP using --with-apxs I get strange error messages +
    +
    + There are three things to check here. First, for some reason + when Apache builds the apxs Perl script, it sometimes ends up + getting built without the proper compiler and flags variables. + Edit your apxs (sometimes found in /usr/local/apache/bin/apxs + or /usr/sbin/apxs) and check for these lines: +
    my $CFG_CFLAGS_SHLIB  = ' ';      # substituted via Makefile.tmpl
    +my $CFG_LD_SHLIB      = ' ';          # substituted via Makefile.tmpl
    +my $CFG_LDFLAGS_SHLIB = ' ';      # substituted via Makefile.tmpl
    + If this is what you see, you have found your problem. Change these lines to say: +
    my $CFG_CFLAGS_SHLIB  = '-fpic -DSHARED_MODULE';      # substituted via Makefile.tmpl
    +my $CFG_LD_SHLIB      = 'gcc';          # substituted via Makefile.tmpl
    +my $CFG_LDFLAGS_SHLIB = q(-shared);# substituted via Makefile.tmpl 
    + The second possible problem should only be an issue on RedHat-6.1/6.2. + The apxs script RedHat ships is broken. Look for this line: +
    my $CFG_LIBEXECDIR    = 'modules';        # substituted via APACI install
    + If you see the above line, change it to this: +
    my $CFG_LIBEXECDIR    = '/usr/lib/apache';        # substituted via APACI install
    + Last, if you reconfigure/reinstall Apache, add a 'make clean' to the process after + './configure' and before 'make'. +

    +

    +
    + 6.12.During 'make', I get errors in microtime, and a lot of 'RUSAGE_' stuff. +
    +
    + During the 'make' portion of installation, if you encounter problems that look similar + to this: +

    +    microtime.c: In function `php_if_getrusage':
    +    microtime.c:94: storage size of `usg' isn't known
    +    microtime.c:97: `RUSAGE_SELF' undeclared (first use in this function)
    +    microtime.c:97: (Each undeclared identifier is reported only once
    +    microtime.c:97: for each function it appears in.)
    +    microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function)
    +    make[3]: *** [microtime.lo] Error 1
    +    make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard'
    +    make[2]: *** [all-recursive] Error 1
    +    make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard'
    +    make[1]: *** [all-recursive] Error 1
    +    make[1]: Leaving directory `/home/master/php-4.0.1/ext'
    +    make: *** [all-recursive] Error 1
    +    

    + Your system is broken. You need to fix your /usr/include files either by making sure + your /usr/include/linux symlink is pointing to the right place in your kernel sources or + by installing a glibc-devel package that matches your glibc. This has absolutely nothing + to do with PHP. To prove this to yourself, try this simple test: +

    +    $ cat >test.c <<X
    +    #include <sys/resource.h>
    +    X
    +
    +    $ gcc -E test.c >/dev/null
    +
    +    If that spews out errors, you know your include files are messed up. 
    +    

    +

    +

    +
    + +
    + +

    7. Using PHP

    +
    + +
    +
    + 7.1. I would like to write a generic PHP script + that can handle data coming from any form. How do I know which POST + method variables are available? +
    +
    + Make sure that the track_vars feature is + enabled in your php3.ini file. If you compiled PHP with + "--enable-track-vars" it will be on by default. + Alternatively you can enable it at run-time on a per-script + basis by putting <?php_track_vars?> at the top of your file. + When track_vars is on, it creates three associative arrays. + $HTTP_GET_VARS, $HTTP_POST_VARS and $HTTP_COOKIE_VARS. So, to + write a generic script to handle POST method variables you would + need something similar to the following:
    +    while (list($var, $value) = each($HTTP_POST_VARS)) {
    +        echo "$var = $value<br>\n";
    +    }
    +

    +

    + +
    + 7.2. I need to convert all single-quotes (') + to a backslash followed by a single-quote. How can I do this with + a regular expression? +
    +
    + First off, take a look at the addslashes() function. It will do + exactly what you want. You should also have a look at the magic_quotes_gpc directive in your php3.ini + file. +

    + The ereg_replace magic you're looking for, however, is simply:

    +    $escaped = ereg_replace("'", "\\'", $input);
    +

    +

    + +
    + 7.3. When I do the following, the output is printed in the wrong order:
    +      function myfunc($argument) {
    +        echo $argument + 10;
    +      }
    +      $variable = 10;
    +      echo "myfunc($variable) = " . myfunc($variable);
    +    
    +

    What's going on? +

    +
    + To be able to use the results of your function in an expression (such + as concatenating it with other strings in the example above), you need + to return the value, not echo it. +

    +

    + +
    + 7.4. Hey, what happened to my newlines in: +
    +<PRE>
    +  1 <?echo $result[1];?>
    +  2 <?echo $result[2];?>
    +
    +
    +
    + In PHP, the ending for a block of code is either "?>" or + "?>\n" (where \n means a newline). This means that you need to + insert an extra newline after each block of PHP code in the above + example. +

    + Why does PHP do this? Because when formatting normal HTML, this + usually makes your life easier because you don't want that newline, + but you'd have to create extremely long lines or otherwise make the + raw page source unreadable to achieve that effect. +

    +

    + +
    + 7.5. I need to access information in the request header directly. How can + I do this? +
    +
    + The getallheaders() function will do this if you are running PHP as a + module. So, the following bit of code will show you all the request + headers:
    +    $headers = getallheaders();
    +    for(reset($headers); $key = key($headers); next($headers)) {
    +        echo "headers[$key] = ".$headers[$key]."<br>\n";
         }
    -  }
    -  /* just close the file, throwing away the rest */
    -  fclose($fd);
    -  commonFooter();
    +
    +

    +

    + +
    + 7.6. When I try to use authentication with IIS I get 'No Input file specified' +
    +
    + The security model of IIS is at fault here. This is a problem + common to all CGI programs running under IIS. A workaround is + to create a plain HTML file (not parsed by php) as the entry page + into an authenticated directory. Then use a META tag to redirect + to the PHP page, or have a link to the PHP page. PHP will + then recognize the authentication correctly. When the ISAPI + module is ready, this will no longer be a problem. This should + not effect other NT web servers. For more information, see: http://support.microsoft.com/support/kb/articles/q160/4/22.asp. +

    +

    + +
    + 7.7. I've followed all the instructions, but still can't get PHP and IIS + to work together! +
    +
    + Make sure any user who needs to run a PHP script has the rights + to run php.exe! IIS uses an anonymous user which is added at the + time IIS is installed. This user needs rights to php.exe. Also, + any authenticated user will also need rights to execute php.exe. And + for IIS4 you need to tell it that PHP is a script engine. +

    +

    + +
    + 7.8. My PHP script works on IE and Lynx, but on Netscape some of my output + is missing. When I do a "View Source" I see the content in IE but not in Netscape. + Even when I telnet to port 80 directly the correct content shows up. How can this be? PHP + is server-side and my browser can't possibly know that the content it is seeing is generated + by PHP, so what is going on? +
    +
    + Very good question! ;) This is a tricky little issue and it has come up twice in the + past month as of this writing. Both times I ended up spending a good 20 minutes trying to + figure out what the heck was going on. The answer is that both IE and Lynx ignore any NULs + (\0) in the HTML stream. Netscape does not. The best way to check for this is to compile + the command-line version of PHP (also known as the CGI version) and run your script from the + command line and pipe it through 'od -c' and look for any \0 characters. (If you are on + Windows you need to find an editor or some other program that lets you look at binary files) + When Netscape sees a NUL in a file it will typically not output anything else on that line + whereas both IE and Lynx will. If this issue has bitten you, congratulations! You are not + alone. +

    +

    + +
    + 7.9. How am I supposed to mix XML and PHP? It complains about my <?xml> tags! +
    +
    + You need to turn off the short tags by setting short_tags to 0 in your + php3.ini file, or by using the php3_short_tags Apache directive. (You + could even use a <File> section to do this selectively.) You can + also disable and re-enable the short tags in your script using the + short_tags() function. +

    +

    + +
    + 7.10. How can I use PHP with FrontPage or Dreamweaver or some other HTML editor that insists on moving my code around? +
    +
    + One of the easiest things to do is to enable using ASP tags in your + PHP code. This allows you to use the ASP-style <% and %> code + delimiters. Most of the popular HTML editors handle those more + intelligently (for now). To enable the ASP-style tags, you need + to set the asp_tags php3.ini variable, or use the php3_asp_tags + Apache directive. +

    +

    + +
    + 7.11. Where can I find a complete list of pre-set variables available + to me, and why are these not documented in the PHP documentation? +
    +
    + The best way is to stick a <?phpinfo()?> tag on a page and load it up. This will + show you all sorts of information about your PHP setup, including a list of both + environment variables and also special variables set by your web server. This list + can't really be documented in the PHP documentation because it will change from one + server to another. +

    +

    + +
    + 7.12.Why do I get an error that looks something like this: +Warning: 0 is not a MySQL result index in <file> on line <x> or +Warning: Supplied argument is not a valid MySQL result resource in <file> on line <x>? +What am I doing wrong? +
    +
    + You are trying to use a result identifier that is 0. The 0 indicates that your query failed + for some reason. You need to check for errors after submitting a query and before you + attempt to use the returned result identifier. The proper way to do this is with code similar + to the following:
    +        $result = mysql_query("select * from tables_priv");
    +        if(!$result) {
    +            echo mysql_error();
    +            exit;
    +        }
    + or:
    +        $result = mysql_query("select * from tables_priv")
    +                    or die("Bad query: ".mysql_error());
    +

    +

    + +
    + 7.13. I'm trying to use an <input + type="image"> tag, but the $foo.x and $foo.y + variables aren't available. Where are they? +
    +
    + When submitting a form, it is possible to use an image instead of + the standard submit button with a tag like: +
    <input type="image" SRC="image.gif" NAME="foo">
    + When the user clicks somewhere on the image, the accompanying form + will be transmitted to the server with two additional variables: + foo.x and foo.y. +

    + Because $foo.x and $foo.y are invalid variable names in PHP, they are + automagically converted to $foo_x and $foo_y. That is, the periods + are replaced with underscores. +

    +

    +
    + 7.14. How do I get all the results from a SELECT +MULTIPLE HTML tag? +
    +
    + The SELECT MULTIPLE tag in an HTML construct allows users to select multiple + items from a list. These items are then passed to the action handler for the + form. The problem is that they are all passed with the same widget name. ie. +
       <SELECT NAME="var" MULTIPLE>
    + Each selected option will arrive at the action handler as: + +
       var=option1
    +   var=option2
    +   var=option3
    + + Each option will overwrite the contents of the previous $var variable. The +solution is to use PHP's + non-indexed array feature. The following should be used: + +
       <SELECT NAME="var[]" MULTIPLE>
    + + This tells PHP to treat var as an array and each assignment of a + value to var[] adds an item to the array. The first item becomes $var[0], + the next $var[1], etc. The count() function can be used to determine how + many options were selected, and the sort() function can be used to sort + the option array if necessary.

    + + Note that if you are using JavaScript the [] on the element name + might cause you problems when you try to refer to the element by name. + Use it's numerical form element id instead, or enclose the + variable name in single quotes and use that as the index to the +elements array, for example: + +

       variable = documents.forms[0].elements['var[]'];
    +
    + +

    +

    +
    + +
    + +

    8. PHP and HTML

    +
    + +
    +
    + 8.1. How do I create an array in a HTML <form>? +
    +
    + To get your <form> result sent as an array to your PHP script + you name the <input>, <select> or <textarea> + elements like this: +
    +    <input name="MyArray[]">
    +    <input name="MyArray[]">
    +    <input name="MyArray[]">
    +    <input name="MyArray[]">
    +    
    + Notice the square brackets after the variable name, that's what + makes it an array. You can group the elements into different arrays + by assigning the same name to different elements: +
    +    <input name="MyArray[]">
    +    <input name="MyArray[]">
    +    <input name="MyOtherArray[]">
    +    <input name="MyOtherArray[]">
    +    
    + This produces two arrays, MyArray and MyOtherArray, that gets sent + to the PHP script. +

    + Note that you must not use indices with arrays in HTML! The + array gets filled in the order the elements appear in the form. For + functions you can use to process these arrays once you get them into + your scripts, please see the Arrays section in the manual. +

    +
    + +
    + + +

    9. PHP and other languages

    +
    + +
    +
    + 9.1. PHP vs. ASP? +
    +
    + ASP is not really a language in itself, it's an acronym for Active + Server Pages, the actual language used to program ASP with is a + script version of Visual Basic. The biggest drawback of ASP is that + it's a proprietary system that is natively used only on Microsofts + Internet Information Server (IIS). This limits it's availability to + Win32 based servers. There are a couple of projects in the works + that allows ASP to run in other environments and webservers; InstantASP + from Halcyon (commercial), + Chili!Soft + ASP from Chili!Soft + (commercial) and OpenASP + from ActiveScripting.org (free). ASP is said to be a slower + and more cumbersome language than PHP, less stable as well. Some of + the pros of ASP is that since it uses VBScript it's relatively easy + to pick up the language if you're already know how to program in + Visual Basic. ASP support is also enabled by default in the IIS + server making it easy to get up and running. +
    +

    +

    + 9.2. Is there an ASP to PHP converter? +
    +
    + Yes, asp2php is the one most often referred to. +
    +

    +

    + 9.3. PHP vs. Cold Fusion? +
    +
    + PHP is commonly said to be faster and more efficient for complex + programming tasks and trying out new ideas. PHP is generally referred + to as more stable and less resource intensive as well. Cold Fusion + has better error handling, database abstraction and date parsing + although database abstraction is being addressed in PHP 4. Another + thing that is listed as one of Cold Fusion's strengths is its excellent + search engine, but it has been mentioned that a search engine is not + something that should be included in a web scripting language. PHP + runs on almost every platform there is; Cold Fusion is only available + on Win32, Solaris, Linux and HP/UX. Cold Fusion has a better IDE + and is generally easier to get started with, whereas PHP initially + requires more programming knowledge. + +

    A great summary by Michael J Sheldon on this topic has + been posted to the PHP mailing list. A copy can be found here. +

    +

    +

    + 9.4. PHP vs. Perl? +
    +
    + The biggest advantage of PHP over Perl is that PHP was designed for + scripting for the web where Perl was designed to do a lot more and can + because of this get very complicated. The flexibility / complexity + of Perl makes it easier to write code that another author / coder + has a hard time reading. PHP has a less confusing and stricter format + without losing flexibility. PHP is easier to integrate into existing + HTML than Perl. PHP has pretty much all the 'good' functionality of + Perl; constructs, syntax and so on, without making it as complicated + as Perl can be. Perl is a very tried and true language, it's been + around since the late eighties, but PHP is maturing very quickly. +
    +
    + +
    + +

    10. Common Problems

    +
    + +
    +
    + 10.1. I installed PHP, but every time I load + a document, I get the message 'Document Contains No Data'! What's + going on here? +
    +
    + This probably means that PHP is having some sort of problem + and is core-dumping. Look in your server error log to see if + this is the case, and then try to reproduce the problem with + a small test case. If you know how to use 'gdb', it is very + helpful when you can provide a backtrace with your bug report + to help the developers pinpoint the problem. If you are using + PHP as an Apache module try something like: +
      +
    • Stop your httpd processes +
    • gdb httpd +
    • > run -X -f /path/to/httpd.conf +
    • Then fetch the URL causing the problem with your browser +
    • If you are getting a core dump, gdb should inform you of this now +
    • type: bt +
    • You should include your backtrace in your bug report. This should be submitted to http://bugs.php.net +
    +

    + If your script uses the regular expression functions (ereg() + and friends), you should make sure that you compiled PHP and + Apache with the same regular expression package. (This should + happen automatically with PHP and Apache 1.3.x) +

    +

    + +
    + 10.2. I'm trying to access one of the standard CGI + variables (such as $DOCUMENT_ROOT or $HTTP_REFERER) in a user-defined + function, and it can't seem to find it. What's wrong? +
    +
    + Environment variables are now normal global variables, so you must + either declare them as global variables in your function (by using + "global $DOCUMENT_ROOT;", for example) or by using + the global variable array (ie, "$GLOBALS["DOCUMENT_ROOT"]". +

    +

    + +
    + 10.3. I patched Apache with the FrontPage extensions patch, and suddenly PHP stopped + working. Is PHP incompatible with the Apache FrontPage extensions? +
    +
    + No, PHP works fine with the FrontPage extensions. + The problem is that the FrontPage patch modifies several Apache structures, + that PHP relies on. + Recompiling PHP (using 'make clean ; make') after the FP patch is applied + would solve the problem. +

    +

    + +
    + 10.4. I think I found a bug! Who should I tell? +
    +
    + You should go to the PHP Bug Database and make sure the bug + isn't a known bug. If you don't see it in the database, use + the reporting form to report the bug. It is important to use + the bug database instead of just sending an email to one of the + mailing lists because the bug will have a tracking number assigned + and it will then be possible for you to go back later and check + on the status of the bug. The bug database can be found at http://bugs.php.net/. +

    +

    +
    + +
    + +

    11. Migrating from PHP3 to PHP4

    +
    + +
    +
    + 11.1. General information +
    +
    + PHP 4 was designed to be as compatible with earlier versions of + PHP as possible and very little functionality was broken in the + process. If you're really unsure about compatibility you should + install PHP 4 in a test environment and run your scripts there. +
    +

    +

    + 11.2. Incompatible functions +
    +
    + Since PHP 4 is basically a rewrite of the entire PHP engine there + was very few functions that were altered and only then some of + the more exotic ones. +
    +
    + +
    + +

    12. Migrating from PHP2 to PHP3

    +
    +
    +
    + 12.1. General information +
    +
    + PHP/FI 2.0 is no longer supported. Please see the manual for + information about migration from PHP/FI 2.0. +
    +
    + +
    + +

    Credits

    + +

    +This FAQ was originally written by Jim Winstead. It is currently +maintained by the PHP Documentation Team. +

    + + diff --git a/anoncvs.php b/anoncvs.php index f3b2d6b4d2..f1fe54ea75 100644 --- a/anoncvs.php +++ b/anoncvs.php @@ -1,5 +1,4 @@ diff --git a/books.php b/books.php index 8258f0d986..263cf84f64 100644 --- a/books.php +++ b/books.php @@ -1,5 +1,4 @@ diff --git a/bug-pwd-finder.php b/bug-pwd-finder.php index b674497ead..f34ebeabc0 100644 --- a/bug-pwd-finder.php +++ b/bug-pwd-finder.php @@ -1,7 +1,6 @@ diff --git a/bugs-generating-backtrace.php b/bugs-generating-backtrace.php index c778d18db3..505c358fe0 100644 --- a/bugs-generating-backtrace.php +++ b/bugs-generating-backtrace.php @@ -1,5 +1,4 @@ diff --git a/bugs-php3.php b/bugs-php3.php index beda7ccc64..b9901cc970 100644 --- a/bugs-php3.php +++ b/bugs-php3.php @@ -5,7 +5,6 @@ /* See the end of the script for the table layout. */ -require("shared.inc"); if (strstr($MYSITE,"bugs.php.net")) { $dbhost="localhost"; $dbuser="nobody"; diff --git a/bugs.php b/bugs.php index 7a475b95f9..00ec6ba489 100644 --- a/bugs.php +++ b/bugs.php @@ -11,7 +11,6 @@ if(!isset($pw)) $pw = ''; $destination = "php-dev@lists.php.net"; -require("shared.inc"); if (strstr($MYSITE,"bugs.php.net")) { $dbhost="localhost"; diff --git a/bugstats.php b/bugstats.php index a174c44a8b..cf2e6b2a5a 100644 --- a/bugstats.php +++ b/bugstats.php @@ -1,5 +1,4 @@ diff --git a/credits.php b/credits.php index e7c8dbccfd..84a47c2af1 100644 --- a/credits.php +++ b/credits.php @@ -1,5 +1,4 @@

    Using CVS for PHP Development

    diff --git a/cvsup.php b/cvsup.php index 762512e4ae..2a4a26f440 100644 --- a/cvsup.php +++ b/cvsup.php @@ -1,5 +1,4 @@

    Using CVSup to maintain local CVS repository

    diff --git a/docs.php b/docs.php index 3cd8c7b0b1..806b4a174e 100644 --- a/docs.php +++ b/docs.php @@ -1,6 +1,5 @@

    PHP FAQ

    @@ -118,7 +117,7 @@

    Old/unsupported information

    diff --git a/download-logos.php b/download-logos.php index 830fe42c9a..e8e996ba8f 100644 --- a/download-logos.php +++ b/download-logos.php @@ -1,6 +1,5 @@

    diff --git a/download-php3.php b/download-php3.php index fc1e2d3d42..e5559419b9 100644 --- a/download-php3.php +++ b/download-php3.php @@ -1,5 +1,4 @@ \ No newline at end of file +?> diff --git a/include/layout.inc b/include/layout.inc index 37327d51d6..44b89751dc 100644 --- a/include/layout.inc +++ b/include/layout.inc @@ -143,8 +143,9 @@ $enclosed = 0; # function commonHeader($title="",$dont_enclose=0) { - global $MYSITE, $MIRRORS, $COUNTRIES, $enclosed;?> - + global $MYSITE, $MIRRORS, $COUNTRIES, $enclosed; + header("Last-Modified: ".gmdate("D, d M Y H:i:s",getlastmod())." GMT"); +?> PHP<?php if ($title) echo ": $title";?> diff --git a/include/shared.inc b/include/shared.inc index ceaa460802..e44cbd044f 100644 --- a/include/shared.inc +++ b/include/shared.inc @@ -5,9 +5,6 @@ require_once 'site.inc'; require_once 'layout.inc'; -header("Last-Modified: ".gmdate("D, d M Y H:i:s",getlastmod())." GMT"); - - # figure out the directory root if (!$BASE_DIR) { diff --git a/index.php b/index.php index 45acb61f69..04c4cdbaf5 100644 --- a/index.php +++ b/index.php @@ -1,16 +1,15 @@ \n"; + ?> -

    Patch Level 1 released for PHP 4.0.4

    +

    Patch Level 1 released for PHP 4.0.4

    Due to two security issues found in the Apache module version of PHP 4.0, PHP 4.0.4pl1 has been released. This bug-fix release also fixes a few party-crashing bugs that were discovered in PHP 4.0.4. -

    New usage stats for January available

    +

    New usage stats for January available

    PHP Usage Stats Netcraft and -

    PHP Conference - Call for Participation

    +

    PHP Conference - Call for Participation

    The conference will be part of the O'Reilly Open Source Convention alongside the 5th annual Perl Conference at the , San Diego, California, July 23-27, 2001. All the details on submitting talks are in the full CFP. -

    PHP 4.0.4 Released

    +

    PHP 4.0.4 Released

    Dec 19, 2000. This release includes improvements for a large number of defects and numerous enhancements in the PHP core, @@ -37,33 +36,33 @@ extensions. Download, ChangeLog. -

    PHP 3.0.18 released

    +

    PHP 3.0.18 released

    October 21, 2000. PHP 3.0.18 was released. This is a bug-fix release, including fixes for file uploads and a backported imagetypes() function from PHP 4.0. The ChangeLog contains a full list of changes. -

    Improve your PHP skills

    +

    Improve your PHP skills

    Looking for clear and useful guides to build dynamic web-sites using PHP? Our Books Resource Center lists now more than a dozen books in eight different languages. If you know about more PHP-related books, tell us about them! -

    Manual Search Tip

    +

    Manual Search Tip

    You can go directly to PHP manual pages with a URL such as php.net/strlen. -

    Tips and Tricks Section

    +

    Tips and Tricks Section

    Check out our tips page for some "neat" things, PHP-related. It's a little sparse right now, but feel free to make suggestions! -

    Zend Optimizer Released!

    +

    Zend Optimizer Released!

    Zend Technologies has announced the availability of the Zend Optimizer for PHP 4.0. The optimizer is available for free download. -

    What is PHP?

    +

    What is PHP?

    PHP is a server-side, cross-platform, HTML embedded scripting language. If you are completely new to PHP and want to get some idea of how it works, @@ -72,7 +71,7 @@ resources available in the Links section.

    -

    So, how much does it cost?

    +

    So, how much does it cost?

    This may sound a little foreign to all you folks coming from a non-Unix background, but PHP doesn't cost anything. You can use it for commercial diff --git a/license/index.php b/license/index.php index 3cfc4771dc..2598ba733b 100644 --- a/license/index.php +++ b/license/index.php @@ -1,5 +1,4 @@ diff --git a/links.php b/links.php index b7966989d7..afde45b9ed 100644 --- a/links.php +++ b/links.php @@ -1,7 +1,7 @@ +

    Sites using PHP

    Who uses PHP? An ever-increasing number of companies are using PHP to add functionality to their diff --git a/manual-lookup.php b/manual-lookup.php index 98438baf16..7bb796421d 100644 --- a/manual-lookup.php +++ b/manual-lookup.php @@ -1,7 +1,6 @@ diff --git a/manual/add-note.php b/manual/add-note.php index 1b9d5aa766..b75975bfd9 100644 --- a/manual/add-note.php +++ b/manual/add-note.php @@ -17,8 +17,6 @@ */ - require("shared.inc"); - $DISABLE_KICKOUTS=1; commonHeader("Manual Notes"); /* clean off leading and trailing whitespace */ diff --git a/manual/html/index.php b/manual/html/index.php index 1cb4f7dca7..81e9865dc8 100644 --- a/manual/html/index.php +++ b/manual/html/index.php @@ -1,5 +1,4 @@

    diff --git a/news.php b/news.php index 8c3c12524e..0e8db52db9 100644 --- a/news.php +++ b/news.php @@ -1,5 +1,4 @@ diff --git a/thanks.php b/thanks.php index a41a208ea2..074dfadb86 100644 --- a/thanks.php +++ b/thanks.php @@ -1,5 +1,4 @@
    "; highlight_string($text); echo "
    "; } ?> -PHP Tutorial -

    Introductory Tutorial

    PHP is a tool that lets you create dynamic web pages. PHP-enabled web pages are treated just like regular HTML pages and you can create @@ -134,4 +135,5 @@ function example($text) {
  • phpTidbits
  • PHP Builder - + + diff --git a/usage.php b/usage.php index 729dc0b6da..149527845c 100644 --- a/usage.php +++ b/usage.php @@ -1,5 +1,4 @@ Jan 2001: PHP: 5104536 Domains, 832457 IP Addresses
    From 4291be0d124a04587edd679f6f938099be3bf439 Mon Sep 17 00:00:00 2001 From: Colin Viebrock Date: Tue, 6 Feb 2001 20:31:45 +0000 Subject: [PATCH 08/49] Remove redundant images (all the images removed are listed in "deleted_images", just in case) --- gifs/b-about-c.gif | Bin 627 -> 0 bytes gifs/b-about-p.gif | Bin 628 -> 0 bytes gifs/b-addnote-c.gif | Bin 743 -> 0 bytes gifs/b-addnote-p.gif | Bin 748 -> 0 bytes gifs/b-bullet-c.gif | Bin 121 -> 0 bytes gifs/b-bullet-p.gif | Bin 117 -> 0 bytes gifs/b-bullet-w.gif | Bin 121 -> 0 bytes gifs/b-close-c.gif | Bin 644 -> 0 bytes gifs/b-close-p.gif | Bin 518 -> 0 bytes gifs/b-contents-c.gif | Bin 786 -> 0 bytes gifs/b-contents-p.gif | Bin 644 -> 0 bytes gifs/b-credits-c.gif | Bin 762 -> 0 bytes gifs/b-credits-p.gif | Bin 636 -> 0 bytes gifs/b-development-c.gif | Bin 803 -> 0 bytes gifs/b-development-p.gif | Bin 655 -> 0 bytes gifs/b-docs-c.gif | Bin 988 -> 0 bytes gifs/b-docs-p.gif | Bin 794 -> 0 bytes gifs/b-downloads-c.gif | Bin 905 -> 0 bytes gifs/b-downloads-p.gif | Bin 723 -> 0 bytes gifs/b-go.gif | Bin 502 -> 0 bytes gifs/b-links-c.gif | Bin 684 -> 0 bytes gifs/b-links-p.gif | Bin 565 -> 0 bytes gifs/b-mailing-c.gif | Bin 858 -> 0 bytes gifs/b-mailing-p.gif | Bin 703 -> 0 bytes gifs/b-mirror-c.gif | Bin 884 -> 0 bytes gifs/b-mirror-p.gif | Bin 727 -> 0 bytes gifs/b-news-c.gif | Bin 864 -> 0 bytes gifs/b-news-p.gif | Bin 704 -> 0 bytes gifs/b-next-c.gif | Bin 610 -> 0 bytes gifs/b-next-p.gif | Bin 514 -> 0 bytes gifs/b-prev-c.gif | Bin 613 -> 0 bytes gifs/b-prev-p.gif | Bin 509 -> 0 bytes gifs/b-projects-c.gif | Bin 990 -> 0 bytes gifs/b-projects-p.gif | Bin 756 -> 0 bytes gifs/b-quickref-c.gif | Bin 941 -> 0 bytes gifs/b-quickref-p.gif | Bin 751 -> 0 bytes gifs/b-search-c.gif | Bin 650 -> 0 bytes gifs/b-search-p.gif | Bin 520 -> 0 bytes gifs/b-source-c.gif | Bin 642 -> 0 bytes gifs/b-source-p.gif | Bin 520 -> 0 bytes gifs/b-stats-c.gif | Bin 868 -> 0 bytes gifs/b-stats-p.gif | Bin 674 -> 0 bytes gifs/b-top-c.gif | Bin 593 -> 0 bytes gifs/b-top-p.gif | Bin 574 -> 0 bytes gifs/b-up-c.gif | Bin 605 -> 0 bytes gifs/b-up-p.gif | Bin 508 -> 0 bytes gifs/bg-bl.gif | Bin 350 -> 0 bytes gifs/bg-ul.gif | Bin 367 -> 0 bytes gifs/bubbles-down.gif | Bin 411 -> 0 bytes gifs/bubbles-up.gif | Bin 408 -> 0 bytes gifs/cap-bl.gif | Bin 103 -> 0 bytes gifs/cap-left.gif | Bin 225 -> 0 bytes gifs/cap-right.gif | Bin 224 -> 0 bytes gifs/cap-right2.gif | Bin 271 -> 0 bytes gifs/cap-ul.gif | Bin 103 -> 0 bytes gifs/circular_arrow.gif | Bin 153 -> 0 bytes gifs/corner-bl.gif | Bin 109 -> 0 bytes gifs/corner-ul.gif | Bin 110 -> 0 bytes gifs/deleted_images | 218 +++++++++++++++++++++++++++++++++++ gifs/flag-at.gif | Bin 388 -> 0 bytes gifs/flag-au.gif | Bin 531 -> 0 bytes gifs/flag-br-gray.gif | Bin 1245 -> 0 bytes gifs/flag-br.gif | Bin 516 -> 0 bytes gifs/flag-ca.gif | Bin 510 -> 0 bytes gifs/flag-ch.gif | Bin 373 -> 0 bytes gifs/flag-cl.gif | Bin 823 -> 0 bytes gifs/flag-cz-gray.gif | Bin 1121 -> 0 bytes gifs/flag-cz.gif | Bin 402 -> 0 bytes gifs/flag-de-gray.gif | Bin 1176 -> 0 bytes gifs/flag-de.gif | Bin 772 -> 0 bytes gifs/flag-dk.gif | Bin 484 -> 0 bytes gifs/flag-es-gray.gif | Bin 1144 -> 0 bytes gifs/flag-es.gif | Bin 426 -> 0 bytes gifs/flag-fi.gif | Bin 417 -> 0 bytes gifs/flag-fr-gray.gif | Bin 1139 -> 0 bytes gifs/flag-fr.gif | Bin 419 -> 0 bytes gifs/flag-hu-gray.gif | Bin 1082 -> 0 bytes gifs/flag-hu.gif | Bin 375 -> 0 bytes gifs/flag-id.gif | Bin 392 -> 0 bytes gifs/flag-il.gif | Bin 385 -> 0 bytes gifs/flag-it-gray.gif | Bin 1147 -> 0 bytes gifs/flag-it.gif | Bin 428 -> 0 bytes gifs/flag-jp-gray.gif | Bin 1155 -> 0 bytes gifs/flag-jp.gif | Bin 443 -> 0 bytes gifs/flag-kr-gray.gif | Bin 1309 -> 0 bytes gifs/flag-kr.gif | Bin 570 -> 0 bytes gifs/flag-lv.gif | Bin 398 -> 0 bytes gifs/flag-mx.gif | Bin 448 -> 0 bytes gifs/flag-nl-gray.gif | Bin 1102 -> 0 bytes gifs/flag-nl.gif | Bin 427 -> 0 bytes gifs/flag-no.gif | Bin 460 -> 0 bytes gifs/flag-nz.gif | Bin 528 -> 0 bytes gifs/flag-pl.gif | Bin 382 -> 0 bytes gifs/flag-pt.gif | Bin 486 -> 0 bytes gifs/flag-ro.gif | Bin 414 -> 0 bytes gifs/flag-ru.gif | Bin 382 -> 0 bytes gifs/flag-se.gif | Bin 400 -> 0 bytes gifs/flag-sg.gif | Bin 478 -> 0 bytes gifs/flag-sk.gif | Bin 525 -> 0 bytes gifs/flag-tr.gif | Bin 844 -> 0 bytes gifs/flag-ua.gif | Bin 409 -> 0 bytes gifs/flag-uk-gray.gif | Bin 1336 -> 0 bytes gifs/flag-uk.gif | Bin 590 -> 0 bytes gifs/flag-us.gif | Bin 473 -> 0 bytes gifs/flag-xx.gif | Bin 353 -> 0 bytes gifs/flag-za.gif | Bin 468 -> 0 bytes gifs/gcap-left.gif | Bin 177 -> 0 bytes gifs/gcap-leftbot.gif | Bin 116 -> 0 bytes gifs/gcap-lefttop.gif | Bin 113 -> 0 bytes gifs/gcap-right.gif | Bin 176 -> 0 bytes gifs/gcap-rightbot.gif | Bin 115 -> 0 bytes gifs/gcap-righttop.gif | Bin 113 -> 0 bytes gifs/gcorn-bl.gif | Bin 64 -> 0 bytes gifs/gcorn-br.gif | Bin 64 -> 0 bytes gifs/gcorn-ul.gif | Bin 65 -> 0 bytes gifs/gcorn-ur.gif | Bin 65 -> 0 bytes gifs/gflag-at.gif | Bin 525 -> 0 bytes gifs/gflag-au.gif | Bin 564 -> 0 bytes gifs/gflag-br.gif | Bin 516 -> 0 bytes gifs/gflag-ca.gif | Bin 418 -> 0 bytes gifs/gflag-ch.gif | Bin 346 -> 0 bytes gifs/gflag-cl.gif | Bin 753 -> 0 bytes gifs/gflag-cz.gif | Bin 396 -> 0 bytes gifs/gflag-de.gif | Bin 721 -> 0 bytes gifs/gflag-dk.gif | Bin 370 -> 0 bytes gifs/gflag-es.gif | Bin 406 -> 0 bytes gifs/gflag-fi.gif | Bin 378 -> 0 bytes gifs/gflag-fr.gif | Bin 415 -> 0 bytes gifs/gflag-id.gif | Bin 365 -> 0 bytes gifs/gflag-il.gif | Bin 385 -> 0 bytes gifs/gflag-it.gif | Bin 410 -> 0 bytes gifs/gflag-jp.gif | Bin 343 -> 0 bytes gifs/gflag-kr.gif | Bin 525 -> 0 bytes gifs/gflag-lv.gif | Bin 418 -> 0 bytes gifs/gflag-mx.gif | Bin 468 -> 0 bytes gifs/gflag-nl.gif | Bin 314 -> 0 bytes gifs/gflag-no.gif | Bin 460 -> 0 bytes gifs/gflag-nz.gif | Bin 511 -> 0 bytes gifs/gflag-pl.gif | Bin 363 -> 0 bytes gifs/gflag-pt.gif | Bin 484 -> 0 bytes gifs/gflag-ro.gif | Bin 418 -> 0 bytes gifs/gflag-ru.gif | Bin 406 -> 0 bytes gifs/gflag-se.gif | Bin 433 -> 0 bytes gifs/gflag-sg.gif | Bin 392 -> 0 bytes gifs/gflag-sk.gif | Bin 508 -> 0 bytes gifs/gflag-tr.gif | Bin 788 -> 0 bytes gifs/gflag-ua.gif | Bin 383 -> 0 bytes gifs/gflag-uk.gif | Bin 586 -> 0 bytes gifs/gflag-us.gif | Bin 474 -> 0 bytes gifs/gflag-xx.gif | Bin 229 -> 0 bytes gifs/gflag-za.gif | Bin 451 -> 0 bytes gifs/kick-bb.gif | Bin 89 -> 0 bytes gifs/kick-bg.gif | Bin 53 -> 0 bytes gifs/kick-bl.gif | Bin 79 -> 0 bytes gifs/kick-br.gif | Bin 93 -> 0 bytes gifs/kick-bt.gif | Bin 70 -> 0 bytes gifs/kick-cbl.gif | Bin 112 -> 0 bytes gifs/kick-cbr.gif | Bin 115 -> 0 bytes gifs/kick-close.gif | Bin 318 -> 0 bytes gifs/kick-ctl.gif | Bin 110 -> 0 bytes gifs/kick-ctr.gif | Bin 112 -> 0 bytes gifs/logo-adgrafix.gif | Bin 2778 -> 0 bytes gifs/logo-amerikanclaris.gif | Bin 2217 -> 0 bytes gifs/logo-arabnet.gif | Bin 5890 -> 0 bytes gifs/logo-bellasf.gif | Bin 2482 -> 0 bytes gifs/logo-belnet.gif | Bin 2967 -> 0 bytes gifs/logo-besthost.gif | Bin 2549 -> 0 bytes gifs/logo-borsen.gif | Bin 2067 -> 0 bytes gifs/logo-bug.gif | Bin 6484 -> 0 bytes gifs/logo-calinet.gif | Bin 5448 -> 0 bytes gifs/logo-chek.gif | Bin 4175 -> 0 bytes gifs/logo-cl.gif | Bin 2311 -> 0 bytes gifs/logo-comnet.gif | Bin 2934 -> 0 bytes gifs/logo-cooper8.gif | Bin 1562 -> 0 bytes gifs/logo-directnet.gif | Bin 7673 -> 0 bytes gifs/logo-easydns.gif | Bin 1465 -> 0 bytes gifs/logo-externet.gif | Bin 4571 -> 0 bytes gifs/logo-fast.gif | Bin 1901 -> 0 bytes gifs/logo-gds.gif | Bin 3142 -> 0 bytes gifs/logo-globe.gif | Bin 6312 -> 0 bytes gifs/logo-guardian.gif | Bin 2841 -> 0 bytes gifs/logo-happy.gif | Bin 2272 -> 0 bytes gifs/logo-hurricane.gif | Bin 3732 -> 0 bytes gifs/logo-ibd.gif | Bin 6014 -> 0 bytes gifs/logo-indog.gif | Bin 4825 -> 0 bytes gifs/logo-inway.gif | Bin 7044 -> 0 bytes gifs/logo-inway1.gif | Bin 4524 -> 0 bytes gifs/logo-isternet.gif | Bin 3006 -> 0 bytes gifs/logo-kimm.gif | Bin 3241 -> 0 bytes gifs/logo-lbd.gif | Bin 2217 -> 0 bytes gifs/logo-manawatu.gif | Bin 4562 -> 0 bytes gifs/logo-mikomtek.gif | Bin 2055 -> 0 bytes gifs/logo-montaigne.gif | Bin 3728 -> 0 bytes gifs/logo-murl.gif | Bin 2101 -> 0 bytes gifs/logo-ndot.gif | Bin 2786 -> 0 bytes gifs/logo-nederlandnet.gif | Bin 1802 -> 0 bytes gifs/logo-netlife.gif | Bin 3704 -> 0 bytes gifs/logo-netswamp.gif | Bin 4574 -> 0 bytes gifs/logo-netvision.gif | Bin 3856 -> 0 bytes gifs/logo-nic.gif | Bin 1431 -> 0 bytes gifs/logo-none.gif | Bin 734 -> 0 bytes gifs/logo-paco.gif | Bin 4216 -> 0 bytes gifs/logo-police.gif | Bin 4791 -> 0 bytes gifs/logo-pwc.gif | Bin 2644 -> 0 bytes gifs/logo-rcis.gif | Bin 2276 -> 0 bytes gifs/logo-schlund.gif | Bin 3329 -> 0 bytes gifs/logo-squid.gif | Bin 2242 -> 0 bytes gifs/logo-sst.gif | Bin 3511 -> 0 bytes gifs/logo-sts.gif | Bin 4622 -> 0 bytes gifs/logo-sunsite.gif | Bin 7888 -> 0 bytes gifs/logo-technion.gif | Bin 2744 -> 0 bytes gifs/logo-telenet.gif | Bin 1535 -> 0 bytes gifs/logo-tgr.gif | Bin 5457 -> 0 bytes gifs/logo-upt.gif | Bin 2253 -> 0 bytes gifs/logo-urbano.gif | Bin 5060 -> 0 bytes gifs/logo-utilina.gif | Bin 4440 -> 0 bytes gifs/logo-webtic.gif | Bin 1666 -> 0 bytes gifs/p-cap-left.gif | Bin 259 -> 0 bytes gifs/p-cap-right.gif | Bin 256 -> 0 bytes 219 files changed, 218 insertions(+) delete mode 100644 gifs/b-about-c.gif delete mode 100644 gifs/b-about-p.gif delete mode 100644 gifs/b-addnote-c.gif delete mode 100644 gifs/b-addnote-p.gif delete mode 100644 gifs/b-bullet-c.gif delete mode 100644 gifs/b-bullet-p.gif delete mode 100644 gifs/b-bullet-w.gif delete mode 100644 gifs/b-close-c.gif delete mode 100644 gifs/b-close-p.gif delete mode 100644 gifs/b-contents-c.gif delete mode 100644 gifs/b-contents-p.gif delete mode 100644 gifs/b-credits-c.gif delete mode 100644 gifs/b-credits-p.gif delete mode 100644 gifs/b-development-c.gif delete mode 100644 gifs/b-development-p.gif delete mode 100644 gifs/b-docs-c.gif delete mode 100644 gifs/b-docs-p.gif delete mode 100644 gifs/b-downloads-c.gif delete mode 100644 gifs/b-downloads-p.gif delete mode 100644 gifs/b-go.gif delete mode 100644 gifs/b-links-c.gif delete mode 100644 gifs/b-links-p.gif delete mode 100644 gifs/b-mailing-c.gif delete mode 100644 gifs/b-mailing-p.gif delete mode 100644 gifs/b-mirror-c.gif delete mode 100644 gifs/b-mirror-p.gif delete mode 100644 gifs/b-news-c.gif delete mode 100644 gifs/b-news-p.gif delete mode 100644 gifs/b-next-c.gif delete mode 100644 gifs/b-next-p.gif delete mode 100644 gifs/b-prev-c.gif delete mode 100644 gifs/b-prev-p.gif delete mode 100644 gifs/b-projects-c.gif delete mode 100644 gifs/b-projects-p.gif delete mode 100644 gifs/b-quickref-c.gif delete mode 100644 gifs/b-quickref-p.gif delete mode 100644 gifs/b-search-c.gif delete mode 100644 gifs/b-search-p.gif delete mode 100644 gifs/b-source-c.gif delete mode 100644 gifs/b-source-p.gif delete mode 100644 gifs/b-stats-c.gif delete mode 100644 gifs/b-stats-p.gif delete mode 100644 gifs/b-top-c.gif delete mode 100644 gifs/b-top-p.gif delete mode 100644 gifs/b-up-c.gif delete mode 100644 gifs/b-up-p.gif delete mode 100644 gifs/bg-bl.gif delete mode 100644 gifs/bg-ul.gif delete mode 100644 gifs/bubbles-down.gif delete mode 100644 gifs/bubbles-up.gif delete mode 100644 gifs/cap-bl.gif delete mode 100644 gifs/cap-left.gif delete mode 100644 gifs/cap-right.gif delete mode 100644 gifs/cap-right2.gif delete mode 100644 gifs/cap-ul.gif delete mode 100644 gifs/circular_arrow.gif delete mode 100644 gifs/corner-bl.gif delete mode 100644 gifs/corner-ul.gif create mode 100644 gifs/deleted_images delete mode 100644 gifs/flag-at.gif delete mode 100644 gifs/flag-au.gif delete mode 100644 gifs/flag-br-gray.gif delete mode 100644 gifs/flag-br.gif delete mode 100644 gifs/flag-ca.gif delete mode 100644 gifs/flag-ch.gif delete mode 100644 gifs/flag-cl.gif delete mode 100644 gifs/flag-cz-gray.gif delete mode 100644 gifs/flag-cz.gif delete mode 100644 gifs/flag-de-gray.gif delete mode 100644 gifs/flag-de.gif delete mode 100644 gifs/flag-dk.gif delete mode 100644 gifs/flag-es-gray.gif delete mode 100644 gifs/flag-es.gif delete mode 100644 gifs/flag-fi.gif delete mode 100644 gifs/flag-fr-gray.gif delete mode 100644 gifs/flag-fr.gif delete mode 100644 gifs/flag-hu-gray.gif delete mode 100644 gifs/flag-hu.gif delete mode 100644 gifs/flag-id.gif delete mode 100644 gifs/flag-il.gif delete mode 100644 gifs/flag-it-gray.gif delete mode 100644 gifs/flag-it.gif delete mode 100644 gifs/flag-jp-gray.gif delete mode 100644 gifs/flag-jp.gif delete mode 100644 gifs/flag-kr-gray.gif delete mode 100644 gifs/flag-kr.gif delete mode 100644 gifs/flag-lv.gif delete mode 100644 gifs/flag-mx.gif delete mode 100644 gifs/flag-nl-gray.gif delete mode 100644 gifs/flag-nl.gif delete mode 100644 gifs/flag-no.gif delete mode 100644 gifs/flag-nz.gif delete mode 100644 gifs/flag-pl.gif delete mode 100644 gifs/flag-pt.gif delete mode 100644 gifs/flag-ro.gif delete mode 100644 gifs/flag-ru.gif delete mode 100644 gifs/flag-se.gif delete mode 100644 gifs/flag-sg.gif delete mode 100644 gifs/flag-sk.gif delete mode 100644 gifs/flag-tr.gif delete mode 100644 gifs/flag-ua.gif delete mode 100644 gifs/flag-uk-gray.gif delete mode 100644 gifs/flag-uk.gif delete mode 100644 gifs/flag-us.gif delete mode 100644 gifs/flag-xx.gif delete mode 100644 gifs/flag-za.gif delete mode 100644 gifs/gcap-left.gif delete mode 100644 gifs/gcap-leftbot.gif delete mode 100644 gifs/gcap-lefttop.gif delete mode 100644 gifs/gcap-right.gif delete mode 100644 gifs/gcap-rightbot.gif delete mode 100644 gifs/gcap-righttop.gif delete mode 100644 gifs/gcorn-bl.gif delete mode 100644 gifs/gcorn-br.gif delete mode 100644 gifs/gcorn-ul.gif delete mode 100644 gifs/gcorn-ur.gif delete mode 100644 gifs/gflag-at.gif delete mode 100644 gifs/gflag-au.gif delete mode 100644 gifs/gflag-br.gif delete mode 100644 gifs/gflag-ca.gif delete mode 100644 gifs/gflag-ch.gif delete mode 100644 gifs/gflag-cl.gif delete mode 100644 gifs/gflag-cz.gif delete mode 100644 gifs/gflag-de.gif delete mode 100644 gifs/gflag-dk.gif delete mode 100644 gifs/gflag-es.gif delete mode 100644 gifs/gflag-fi.gif delete mode 100644 gifs/gflag-fr.gif delete mode 100644 gifs/gflag-id.gif delete mode 100644 gifs/gflag-il.gif delete mode 100644 gifs/gflag-it.gif delete mode 100644 gifs/gflag-jp.gif delete mode 100644 gifs/gflag-kr.gif delete mode 100644 gifs/gflag-lv.gif delete mode 100644 gifs/gflag-mx.gif delete mode 100644 gifs/gflag-nl.gif delete mode 100644 gifs/gflag-no.gif delete mode 100644 gifs/gflag-nz.gif delete mode 100644 gifs/gflag-pl.gif delete mode 100644 gifs/gflag-pt.gif delete mode 100644 gifs/gflag-ro.gif delete mode 100644 gifs/gflag-ru.gif delete mode 100644 gifs/gflag-se.gif delete mode 100644 gifs/gflag-sg.gif delete mode 100644 gifs/gflag-sk.gif delete mode 100644 gifs/gflag-tr.gif delete mode 100644 gifs/gflag-ua.gif delete mode 100644 gifs/gflag-uk.gif delete mode 100644 gifs/gflag-us.gif delete mode 100644 gifs/gflag-xx.gif delete mode 100644 gifs/gflag-za.gif delete mode 100644 gifs/kick-bb.gif delete mode 100644 gifs/kick-bg.gif delete mode 100644 gifs/kick-bl.gif delete mode 100644 gifs/kick-br.gif delete mode 100644 gifs/kick-bt.gif delete mode 100644 gifs/kick-cbl.gif delete mode 100644 gifs/kick-cbr.gif delete mode 100644 gifs/kick-close.gif delete mode 100644 gifs/kick-ctl.gif delete mode 100644 gifs/kick-ctr.gif delete mode 100644 gifs/logo-adgrafix.gif delete mode 100644 gifs/logo-amerikanclaris.gif delete mode 100644 gifs/logo-arabnet.gif delete mode 100644 gifs/logo-bellasf.gif delete mode 100644 gifs/logo-belnet.gif delete mode 100644 gifs/logo-besthost.gif delete mode 100644 gifs/logo-borsen.gif delete mode 100644 gifs/logo-bug.gif delete mode 100644 gifs/logo-calinet.gif delete mode 100644 gifs/logo-chek.gif delete mode 100644 gifs/logo-cl.gif delete mode 100644 gifs/logo-comnet.gif delete mode 100644 gifs/logo-cooper8.gif delete mode 100644 gifs/logo-directnet.gif delete mode 100644 gifs/logo-easydns.gif delete mode 100644 gifs/logo-externet.gif delete mode 100644 gifs/logo-fast.gif delete mode 100644 gifs/logo-gds.gif delete mode 100644 gifs/logo-globe.gif delete mode 100644 gifs/logo-guardian.gif delete mode 100644 gifs/logo-happy.gif delete mode 100644 gifs/logo-hurricane.gif delete mode 100644 gifs/logo-ibd.gif delete mode 100644 gifs/logo-indog.gif delete mode 100644 gifs/logo-inway.gif delete mode 100644 gifs/logo-inway1.gif delete mode 100644 gifs/logo-isternet.gif delete mode 100644 gifs/logo-kimm.gif delete mode 100644 gifs/logo-lbd.gif delete mode 100644 gifs/logo-manawatu.gif delete mode 100644 gifs/logo-mikomtek.gif delete mode 100644 gifs/logo-montaigne.gif delete mode 100644 gifs/logo-murl.gif delete mode 100644 gifs/logo-ndot.gif delete mode 100644 gifs/logo-nederlandnet.gif delete mode 100644 gifs/logo-netlife.gif delete mode 100644 gifs/logo-netswamp.gif delete mode 100644 gifs/logo-netvision.gif delete mode 100644 gifs/logo-nic.gif delete mode 100644 gifs/logo-none.gif delete mode 100644 gifs/logo-paco.gif delete mode 100644 gifs/logo-police.gif delete mode 100644 gifs/logo-pwc.gif delete mode 100644 gifs/logo-rcis.gif delete mode 100644 gifs/logo-schlund.gif delete mode 100644 gifs/logo-squid.gif delete mode 100644 gifs/logo-sst.gif delete mode 100644 gifs/logo-sts.gif delete mode 100644 gifs/logo-sunsite.gif delete mode 100644 gifs/logo-technion.gif delete mode 100644 gifs/logo-telenet.gif delete mode 100644 gifs/logo-tgr.gif delete mode 100644 gifs/logo-upt.gif delete mode 100644 gifs/logo-urbano.gif delete mode 100644 gifs/logo-utilina.gif delete mode 100644 gifs/logo-webtic.gif delete mode 100644 gifs/p-cap-left.gif delete mode 100644 gifs/p-cap-right.gif diff --git a/gifs/b-about-c.gif b/gifs/b-about-c.gif deleted file mode 100644 index d7a3381a1f84d2200eea94bfee550672129c8eb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 627 zcmV-(0*w7fNk%w1VM_oN0L1?QF)=Y(T3T~+bBv6PLP9zJ|JKgVrE_yi|No2-5D2ZU zQr6a5DJc-==URk>FrKLIV?@|~T2*$=jl$0?_N*IKMDLFY1 z&el@Ez`y_i00000A^8LW0012TEC2ui080QB06+!*U?+}403=?ju59bRaGU_aFphwy zG*jjOz~E1^DQ;4kN+eZOQ7Vj-3RU2fyI-7Kq4H@WKOT! z@A$laACG7xQ5H67Q33@BJbQ|B5k-rSjT>|v7Zem39)cY?4sb%BKuaDyN-3otKbQ;` zDNhwzs8?BAr=(*X4wz^+X(lK!z`?>VGc~+70#OVH3JVKy(9zP<)YaD37ZJH@76K$5 z33e#VHjGT)kQY&ea4jDh5_?pdx~g2^Tc*JfJs1z?uXb9!StYv!>0PICJXUxf4tV z1}M56OG99o(W6K`5Ez6Eg#d94o?V+twQ99&+At;XCZedJaT6yh4C~I+Eea5h5aYlp@%4p9_LoEa`4p_y#>caz;Gl0iVG6se!^f1pehRXd@vp*%Wp!nK{zl> zfFi;LeEBA%uu#O`sUM=WFc?#?vcS_q%4kW@HiKu-dQrSs_1t6$H)y?Y24xIc)p_1J)- NN%QMxvGhg=06S<115*G1 diff --git a/gifs/b-about-p.gif b/gifs/b-about-p.gif deleted file mode 100644 index d1f0eaa342e66605f6d802775b14a37efee0c9d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n1eNk%w1VM_oN0L1?Q2nYxe5D*v`7$G4cDJdy2F)=wgIYL50N=iynQc_x4 zT4Q5lYinzBb8~xpdxV69jEszwl$4yDoTa6ut*x!KwY9yyz0S_gz`(!&0000000000 z000000000000000A^8LW000;OEC2ui080QB06+!*ASRBGQUqD5u59bRa2ym0G>%2) zRF&obz~C=YDCRN-3nWzpq#l+*29Q9c5|*68r^pl<){H_i`Bf$mYXJihWDbysWJ0Id z@A$la&+qf;6A};&IRQ3oQVkatJdKWzkdF}r1d*1P6_b@bc7g{Ph8Q^v5)?f`s6I;> zr>jaSKL!~C5>Gw}Q&|~U7F`9etU+fFYBwS!Co#&)%rG-G#y1U80}2mwfZ5vH+}+;a zfe#A@C;|;6vt_5L?5M7(Xb|h{?`9Mc3n;5}^X)(q2#iR{0PM#qUqDho(89$_L1AbZ zC8n~H(U;%@hICJXU$+M@= zp9&BVKoQ_vv^33?4&3d(T+ zLl-P#&-yr`!a$Ez9Y@mLHCIf-A}m<8l<+_ciU_9UrfLAIo-B_k%2;5`ieWE@XANk%w1VPpUm0L1?QF)=Y(T3T~+bBv6PLP9zJ|JKgVrT_no5D*B?&RW*i zS}7?I=jU3jtwMx^G2Y%%T3R8ToH@0%LUVH|&dy5b=TfDmIq&aMl$0?_N*IKMDLFY1 z&el@Ez`y_i00000A^8LW0012TEC2ui0Av6a06+!*U?+}403cqfu59bRa4gR$0tCZ2 z0$#&Bm!NP+Bu+NSO)7JtsF112WszEJP@CeVx}ka`(eu7?n% zNiotaVv$9+cBQZwC&C0215$9H;Lzd_3ZRhxc#$aN*f3|zU=D#6#AQVx(177=5iQ6A zk10YTaL|CH$syQS1fdXXg_H+oo@k-TQkb~~)`B=t0mgwjs&O(BTJr4xw2)9;AHLX z;FnUvqoAuIy&1ZQPKa?DL{LJYLx3}%ODkEC0T)viPouJ#%5LI=*-@me==$}GkOvYl zC<%Z9U&+!!)&v`dpxCiw9+ti29gPYyWkIA@I31>2uAkIV6vY*~LJgH0kF`9r{Tk_+ z#w8A004L|hAY3G|%u*Oo_gV&fJZBMPHE2v=MiWoWCWRMBV8LBYXIx-LUMX}#%?4>m z*T#UzIpRS8oOzIe1?wpY-HR}SR>1=lIACIHBAC_81Q=itfdxPYDddnu7HQ;>NG7SI Z1rcCiBLt6ZMuK00RcYlqgy|3h06QswG1veA diff --git a/gifs/b-addnote-p.gif b/gifs/b-addnote-p.gif deleted file mode 100644 index becec33d17bc25395613986384605eb09f62d53b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 748 zcmV41ejE#X45)chM0XceA4Hp(aoSmMZpq~i@4WA7J38AW? z5d;LQ6@!rn8I>433=$MTT)jaMDZIcL76};wygUjIDRUMIT3jh&7RnMS4?)HN7Q?)l zy>$?}4o2DckgZBQpvlp#f6>e=*Qf zpy`Ln&qA(FAp&hG=w3P@#)`z_00w9YHWf9gM1=ufOPg*&5cMVz76L|BsGT7;@v320 z^sF#Y8HxzIPWOUC%owtoY?x(mCi8dIG0Rdkv_QQ=>M;$%*;!Cau3k(Zmw~M9~r$NMvD=chpR@#sFHS zHvtrGP?tmj&R9T!1P+L%*%A;C)roX8)<|O~6ig7oDNCI7L;(vt0Kt$%7HQ;>NG7S| el1w&P zIxy>S2wW24+G4;aJW1p*w`9MAL@T>dW0(-jW)9|RPv+}ed(&noo~h$Mn!3mXXuvsQQie7SlE(3!#00B@ajQ{`u diff --git a/gifs/b-close-c.gif b/gifs/b-close-c.gif deleted file mode 100644 index c9ac21dcd69f81d2ffd5ff590908ea7194e3d302..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmZ?wbhEHb^k$G__`<;O|NpiB|9jrQ4|@JQ=-$1cbLYH{9dq5f)p_Ys%PCU~TUxY= ziZlxf3Y>zfEuE76{iQ7}1=KY3dHMJm7#Pl-TYBKY0U!epQ2fcl$iN`VpaW6^veSX} ze}ZaXO6I(bRqIwO`|^nLums+zSogl>{qMHJjvr@u$Sk^k&_Tdr{)H7G3^R2WwV!Os zs#V&;#F7#-*GA0E=n0pu$_1ey?E&&I0(1^1Y)6!^OePI{E+wuyzKV72$Ft1S9L zDV$eWN`wWzv4vd8s8l#0Cu!#A^>)^U)2{njIfb^&^4PfOXt#uMR?bw1>&#Z}9i1|s zo0goMtik;L?8F0}Gfz)1i!gG2XyCL&%B=3ios+@t0!rT|^kjT^bdx87d6HJ_sVy%r zF(=RQn!9RCTVt533PaX`0Jlr|n^)L!KH}7wlKnnTU~WM}+f8*=orjCXuAgW!TDQd| zfce4$iI(kmQmz&y$8FVWINs>^$0dl-hM#T0PUEgCyS;@)WHLU5Iap|15s}a=Sj}}% zBSWEP;(-@Zg32+f8U?90rYT!bJiwvw;lL&42Br@V8BC}Ao<{Gi^1tz`NwkT1eSz0} zzrDM@zP?d-PhwMmHfQ_ya~cx<`}X|&{NnQJ@cjt~k1x;++t%V~KhwuS^YiQb@;WRG XivRf1GtVyCF7r(_jA3knG&aI-viw6{`)hKc|+BnY@~P62K>w!=7CcEv?PZ&Out zf`+oeItN-%1h&{rS_VB(S%cY1Ke3uV5=H_9jGOTB^7Hid_V@8HGNk71Dlz^SH6CMAk3fxQVFutf%X3bmA;hB zc^RwL<-FdP{n=rn2oFo(o0|9k4=gC~(2?r5Is9-zfrA|H#Wx8G9P4hZDLehPYBP6- zvvgeoyTFNqJ9o4lZ#OafTW~|R?Yk-8&Sm@&+~vjsoKdWtsVYX9y?y-?CQh0>W$Lu) zGo}X^%$YlH{(^-$=FIWSmam9l;b}=?V)5(EW!hN6v!TC%Yi(9yU&X#nOb2_TSlBuJ z_=Ju5I5=2Ymae>V_1g6t%PiQqxQ+Q2K791}$Juk+@@y!7W!m3fz@#qQ@GF)$pgoFSJ#E7NiaS3YB+4i^pCeXsf(e> z=+uh;3O+0Jugx{%c_CmFQut&BQ>KiL!<5f{^ZF$A>n>iWV7H#f~?o>43zp%L~`Sh_!Q z)w7_4PSIeAjh!~4AD-~IEr?%#&V5CnAEQ&UQ-<>ezgeuDE&4Y!1AF|ZxE+=Ga5N#~ z^P=QUEI$99BsNanz4qn98F%|<&8kXrpT!sA=V2-+|M70prRzMb>?Q5nw;6Odns7v< zuvLlsP6<>@*}^VV+Yo!D#MQyK<7*4kg@*0&TC2BAnj7TL;&Hk_EOq;7du6jjab*&+ z4krR8ocW|+p6Gh@8m9cg_bmeEGWnRjd@?z} zP4nrLkg&|BQzOiF%ET;P_~BY?X{+Y58NGL&Iwa*TUHNQQ&L&AF2E~7T>6vNenN^8J MDSFBIxeN@}06aocKmY&$ diff --git a/gifs/b-contents-p.gif b/gifs/b-contents-p.gif deleted file mode 100644 index 0155169e8355f055f10b57de0bdb2af67587cb51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmV-~0(<>ONk%w1VSxZ10P_F%MR-&veZiI3bLLG#aXea7Zi~kI3Y35D*lZf#G3P*p(7YXJIrPH3eWpR=ABO zs7vsUM?4q`q5!4pt=sSTynfH``~QFf1t5flhKGoWOjid=j*pO1Ya>nvlO#fyO_p{A zSe;N_0%CS0pdFX%FE2lbb!#& z($my@f)!Q^CykNa-rq`P;9UWpjwv{+O#nYB2;=ZcWd=lX-1b&NW8y+=L}Ll!^ed;2 zOAQ zn@O{#&6_xL>fFh*r%#+Zcr+VIw5ZXeNRujEy0pLmiq)b@of@cQhBzb&*x1UotJkkA z;7sZz{~kI2S~1*2fxhkBsO*0@I^KZ0@Pn=ED-4j;!!RC0gIU4KGzs+>rJWwPG6 zl2%w8y_C|)2TQ-c{TlLvJsUIutAGIn{3PHXfCLt3AWZ~3l~M*yK}FSr5I*=He@szfEuE4B0;Ek$BpDbO&YfF&;J^VOgCJ1+$->CMAk3fxQVFutf%X3bmA;hB zc^RwL<-FdvTG+Kmgoh>YP0joN2No1~=!gk+G#92@$cXgMbT+Y;;AmP?cKU7A{s$kz z1sh9N-#VIeFiz#lGo2WQP92u^o8Qj%x$#7^<{PWWk-%4JANX@ zf{lxN_uLB?FI~QJ_1g7oZBuUFxqI*a)afdvJPZp@zIgev_#9_N)naB=kMqXihhP0% zyjJi>WN4+53d4&d2M*K~ow~5`vtE-}yx)`(#Rdo8nH>CUeq27jvD?*Um6FU2rR+9I z`_41}YlIvamNfQvZn$IhU`-E)Wa=FiheMl}pP%p0%q8o!WyQtC_QEFB1sPo1mIo~M zn(MW7)z#HuTN`hm+WI=oTeH9^qCla&Pc`H6s@T)t+=Vqd=5%EkEWX2=$o%Qm-P7CG z-{0TB%q_ou1AVDNHcC@Vqx_t zkFz@GnD9WBZQZoiR3+u_0KJUuVIAKAUeZ9``%2X+D|YB9{4NqRltO?ijURbo+!UUGge1A{dH@PbD* diff --git a/gifs/b-credits-p.gif b/gifs/b-credits-p.gif deleted file mode 100644 index af747e935ff6dae1eae50557a077ad4f49e1db39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmV-?0)zcWNk%w1VSxZ10P_F%MR-&-76cMtvAOA&dmcD3?kYkI1BQ$!t28gOPGnI7Uf>Ea7Sm2ok?iL3-R~ ze*wdBcNjecMf`f#GhKErlC{K)yj*SL%Uy=zTb6=5^VR2NM zmuou)VE{h@JVYu8s;jK6uCK7Mva__cwkrk&x}}G`zQ4f1!o$SFaDK?i%FE1qfE8g2 zCkKz!*4NlbQC|ZB1PNmSj47wQLn#Q^>gtx%NL1mLy1EAKM%!Q{;AHuL^hsnPX1kZO*=J>s@hf?PbV=%Qw0uGJn?etav)w(t^)BeD$mmiP){ zp;{1Qu^YxByaQ+yFGdn-+XxkgLo30Tgi04lq!Zu^vrpW;I$zef9U&OB=-ZhT9WiYr zQ{3K(Uw>g8?l+Q54N>IU7LTC2+o633m|kMKan;kQ8cUl5Jo5=01*HH WA^r|$X=Zn6dSP;8E@N+P002AW^cI`| diff --git a/gifs/b-development-c.gif b/gifs/b-development-c.gif deleted file mode 100644 index f946f8c644f19db8a331d13635a3e826304b8bb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 803 zcmZ?wbhEHbY-EsQ_`<;O|NpiB|9jrQ4|@JQ=-$1cbLYH{9dp^b)oJNc%PCU~TUs=W ziZr956zzSBt*pgF#e^9c7zzps&YfF&;J^VOn;=m9$->CMAk3fxQVFutf%X3bmA;hB zc^RwL<-FdP{n=rn2oFo(o0|9k4=gC~(2?r5Is9-zfrA|H#Wx8G9P4hZDLehPYCls; z@|zX|7J(BFU&SoAdgIH&-rVJaH&~ApdSt(hX63BnS24=$=Fw*EFmcl4NdX4a zXUv>6drq!7bHc(!i=#M=JF|;&1oFE0^O#aI`FX;amUZy6G1cy@>g0=LVdwPY6E^1K z;9zB0u;jwUON9mXYc9uIuyJu4x6XO+@X_NZPoF)1+CJs=o44=YPnf1+EXXkb#*d%B zZZw25v!0$KGAr=u&3(<0Rgz1#sa-P-WfEB;$#CMpT*>rxXCf|mH_S`;+oGtD(sRnG zh5h9J9?xR82Qzx}Pl`!-2@_@x& zbG^2%3SGf3r_o_G`QX*{e!>OG4|KV9ZO*v7D)#iYwYRtDNuRM{UBB+`?l+sP45}Yp zSj}u%q9EzBW5dJ4UbCi{x}2BmW1OJuJ{GYa?pOMAp)YZ!f}d^-}x8sjdn*=>=~%D8FC!uk5Ep9Gy2l{oh)(LGWmz|G)a zj#E*t7z4HHe=_B5S5sWWh%MR-&veZiI3bLLG#aXea7Zi~kI1A_CuoiYiBUngD@lja>afZi4g!M0sHiO- z3dFX%E`fd&d<=% z(sz9nRSPGWi`(4Y-rq)LC}*U?KPd>{>WZD(M39mJQwg63Wd=M?SR|eFV38z@oJlj{ z3o2FX5+-TFP@fwo0WG~L@eob|d{5pS=tsoO00Kk*1_m1-L5% zT*;$lm6fo`gr_Y~2g9;r=v}n-+11e2h%Cspo0RswTXcX0k)vH*uYGsk8QjZCp z2w)p`fS1{`Xw#~7)r5era`FK5%ciidU2nh)AQCq&N0tB}Q{26Kz!F2f@FHd`2oOxA z1SUTP*jRAllaEBm85|L0u-(FOE=7??Me)4RBe#%%js^+P z3Tc0n@9{W=31ieT9Rr#{V=yd^+ql)q5p6)JVo#+(X{&At6UQOk|BVBtMrx;nsh)3L z&z?t%g6v17SLsITgho&a;Lm6b%j!0001RaB$AfrNF?z000000000000000000000000000000 z000000000000000A^8LW000vJEC2ui0D%A=06+!*;3SS@X`X1Ru59bRYx6*n6buAW z?0oP4z@TtQECvk-gz;xM925@7qam6d3 zL;$esow9ovGr}uG?~(um4!&sAGN3>bb2G62uTL{z{yeqKb#@UkF5f+UC&D_+dFvE#>(BTJsVIKe&!QKlH& z%(=7Y&!9t#9z8nL1GElPt6uHubgUGE_Z-NfV~OqCxO3}f^2EUm%_9a+ys>V8apPf* zD__pMx%21Hnb(PKoD2fv2*^-xo&yPj%v2h9v0=PjlLJY&L@k`qcsfhK?YY_l#~EZzwA)e zMPaBllt*C9!Q)tbEiz0rYF*+~jacn9rBmEARg*YT5tHL=y%>1R7jhNwAsGeeVMdfK zO_|e}cqrgSRapuG$u~?&IpiC0yv5Z4Ge{z4UnM~yg?JArphQ*WgcOn{B8CLu7MWUV z40@J^BtSXO)J2CFe(_^z0w5_Bk}=s_DgYFr?x95inAO$lB$g`B-m7hxN|HVdP&h$s zNgznuvdlK??6c5DEA6z@R{QKV4o?6EoM68>5TpX&hAZy4+ioI001HWAW~&ybz@~@ATcy0AV45@cXuvlX=Zn6dSP;8 KE@N+P0027}^{oH^ diff --git a/gifs/b-docs-p.gif b/gifs/b-docs-p.gif deleted file mode 100644 index 05bef07490c3aaac9dcb7be0a4214a7f2c5c0088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 794 zcmV+#1LgcjNk%w1VSxZ10P_F%MR-!v;ajZY_+2G#V*WVlWaC1%}ZW^lcB(-bVq=Jf`f#GhKGoWii?T@1t5@-l9QB`L|RKiNrD0i z2ZIJuf(2J(Lx);UfMSEJft`d0s!gT|Y=E6xoKYwS23Y`JzCbDn#>dFX%FE2n&d<=% z(kgpnUX|F{+S}aS-rwGTjN|0x=I4lx66gs{nU|MEIiq5GrcQESV)5M}L6he0F z+7t*1O+W>10y=e3O-6@-T$w?mY5*I6GJ9GiP)lZ@B`JM+ss;?eQ3As_YTe4UtJkk! z!-^eC7AygoJ;145%eJlCw{YXijZ4ZYy1RJumizJu!!4u4a0nhuxUgXte4M70K!!lO zcPknmo;*0q3?3*J9xliQfGKzIOi;C`5X=o;S`X|ACgTq_^Nq0%h5^%Go4QkfD}9#f5x z+Y>>ECJ|4%AR)^SG7)#u5~f^X;28}?k)S_x$TQLta+JXa6lB2ikV+Ny$HPnToQ2dE z!XXvhYtSLJ+m8U*0^|?^)CW)~viyiuk|sRqNs%QK`J)!U05oMlK7Nsjl}y%$!We8k zQsXdeQs(BHaMHjgM>6##!7X1fRo0$-_UY%J91%d?6B*Q{*P)0e%83|rHR|Z2kVZN| Y1OOra4rgg*cWHWIa%3)JZ*2eoJMBhUng9R* diff --git a/gifs/b-downloads-c.gif b/gifs/b-downloads-c.gif deleted file mode 100644 index b035e37eba1e2040207747e306fc2d13b404cf83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmV;419tpJNk%w1VSxZ10Q3L=|Nqwi|BUbNQs?JW-riEq&Pv9{L$$R+rKLHPlre;a zDspluT3R7LO>;Lm7Yz;$0001RaB$AfrNF?z000000000000000000000000000000 z000000000000000A^8LW000vJEC2ui0D%A=06+!*;3SS@X`X1Ru59bRYx6*n6bMAF z?|kq7z@TtQEba=0!$IMIJQ||e!9WmLuh^`1n}t9SSMQ<8xF(ze2BZlYG}!}z*xFpk zAxpHi;6->H3kzxx0(Do01%ZJx4p{{W3r-{rY+ja^n38TWk;@E<#?%xO5b1%RHVT~otVsi*OhZFr&OCs1z)LVJCs~fHQ}c_G zYgq^&DEVdz$BtQ$Wx7@EPZa^b5(wbqMXE766R+m7?tq~z( z&4L68zR8_Sx31m0c=PJr%eQac1n(F$d7`hd;lqd%D_+dFabrpkqzRl%xw5Fp1W~jF zbU+7^&!9t#9!C>oFt43mAsDl}VN3=bd@F>zQcy4on*wN6IR|GC17!0Ms8XK>4 zbIGQpVS#rGo-u!FK*^QrNq!!aJSwgYW#wPZOTC;hHnD& z1l1Q!qy)?iV7!!-7?F%*jDnaHk`-199EgcCK@HUm1PXK}pB8W26jOl*%uvQjE19@b zcQD~WRgDD8GHED(a}DmTKy$sHUpwr-6J0TPY_%CYfcl)=Dd8usWveuDtf@YX|@#{vc9iWOZX@ fWFRp$B_Kc`cXxL#XK7}4X?kIDWG-WGZ2$l}$>V?% diff --git a/gifs/b-downloads-p.gif b/gifs/b-downloads-p.gif deleted file mode 100644 index 4e4db12f63fa517a2d7e9a1ebe84a29279d6dc52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 723 zcmV;^0xbPUNk%w1VSxZ10P_F%MR-&veZiI3bLLG#aXea7Zi~k3`;ZRM-iIqCmnqI*fLKLxL&Xm6(Ik&>Dye z1_SJrH1wj-=qvGHC`2jEk$%tb`~QG}f`f#GgaQR1ii?bmj*np_C`go*Mqzvf2~m1a zBa(UsLOgv>TLGE|eOg$1qMLmst$Lb5DL7sLPB=g-2*1F=!o$SH#>dFX%F8Qt1$hFG z($mz{*4NnC*m;KC-rwNif`}Df3nyBZ>grtU?n$Wcm2Q-`xB<~WDG2iNpG&Bm48auT z046a4+qq#GS6zwsS_oP030d*`nglpN7F2br^+NCsq$2fEfb3G723^w5ZXeNRujE$`q*%9@?Txol3Q;)vH*uW-X9LoY${l z#hponfs;iWXw#})%a(Dy&;uYUh$(aWSMwR8gXk4H$gz?D(nJh6EWtno&5r zQYMJ>c|S&>it_p56HZSKn(CgjfO0xm9OjU27_oIh8W95RL>nSJfRxUAM?6;3gsYSEN_&)?)?;g>Qd*Q+W2H(`j1UkQ zDJe<_2oL}O2mk;8A^8LW00000EC2ui03-kv06+!*ARvy#5NuznuI#r3LotrQ_gs#X z?b6rjnZrjCNnv)06wslGa6SP*0kw!!D4ND*yFElO;4rwMp;RIe;YKD!JuC`bZceYy z!J6~JC96Rw7(f{q9w`S0g%TNiE*&WeJA)Jvdr>n|CMYeNDK9aXGXy9H2?&8>4XLWD z4U-ZJjvE9d9|sc(8G;myDvAz5DjYiw76UtEn1qvAC5W}!xD{VqL z@B?7rLjpLt#GQ+jt%8n)*&+xL0ARoe2yp~+IVj}eP@)VdJaAwnEEk4JLI$7!lp~Te zpF?^aFlP;01!*WMgp2g#2ecs+QbgGC!~?Y^(o8NupdnBs3YvQHaO7gD(KH_hP^@L8 sYmQAC?A&Rf4gw02A_zD-K*UOgzkmY^K7)n>3W@#x1zenB;EWIeJ1M`gkpKVy diff --git a/gifs/b-links-c.gif b/gifs/b-links-c.gif deleted file mode 100644 index 262a7927304ca7803b8d13533c47d0485ff4dd93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmZ?wbhEHbY-EsQ_`<;O|NpiB|9jrQ4|@JQ=-$1cbLYH{9dp^b)oJNc%PCU~TUs=W zinOAl6fK>Sor0>ZY@`?&84C&u&YfF&;J^U}B7ovg7DfgJVFn$LT9BO%tp6XV^rd9Z z%UHE8=k>m9X2*#lJS>54YTo}pu%N(0M@gVO#M8VmiiMpskYBjmot0(A++Dl(>`k;_1RoT{jxu-depvD8?`cJo5fg|U8Va}qv2U(ztm z#J7)&;|;&JSP9ePu!Du$H>$O+cyXp9_^5;3Y1h{}A6B!*Hcc}wlPK}I#hnts)7@2c zd8WWlUB-6D0EHb}-s&xnHf6c`$#iTn}e5v9P+`SJUl_DK>q)NvA^Kxg}#E z|GH#x^N$4^rWIv>-QBun&(F^BxKUV~C1mb`%l-mx8j6aJ4^tktN~EoL$f3xxc~qF diff --git a/gifs/b-links-p.gif b/gifs/b-links-p.gif deleted file mode 100644 index 3914929844dce3dd5fa7c5c4b32c1fd7a87707ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?PeINk%w1VSxZ10P_F%MR-qXc2hIBF2WNJyg_%0w(0kI1BQ$!wZNg#=U@h*C?VUVuP648DVG@n9&3 z0+fPw#BRIa@VI@_?`~QG}VI>I%PKStzibYe6Z%s;jK6uCK5vWd#LUfw#E1y1Tr+zP)OA!o$SH#&voXoC^w>i_g%{ zj+jVOPAQ?A0RjL)CVhOcdwA3eMXJMd1qJOd|3q(IA8(Y{Dm1diwe$8JGdZ3yh`%b3aE zb0o}ZF-%0um@+4Qijvy6Got_jgHX{LhKuN<0*;av5hp1q0001RaB$AfrNF?z000000000000000000000000000000 z000000000000000A^8LW000vJEC2ui0D%A=06+!*;3SS@X`X1Ru59bRYXd=%6buAW z?0oP4z@V^aNF;p4<8TQ~GKq(S!ZB-zW(Na7!0md!;P4kKILx>Uh@&ubEEbHj8B&(p z>0B&z(cOdRb$ADFZ!-!4eqaR&X%Hk04>OXJl$Dm3n3Hu6pvEFb&-K={>#q(>}KYH@jpjM0o|Su$!A!|}|^ zH8%?qyJfPY04&3N{V8hcz{`p(lbNe1LWY_JMiNBZ%C)Q4uVBN99s9MQSq56ks@-a& z90OvZ;>n#$x31m0c=PJTJ1?K#zkvPjLt*v7f&)2pJXy@RvE#=~3`n6;<eHR z%(=7Y&!9t#_AGKh>C&T9b3Q#I^`6Z+3`C=BMaBagn|HS2#ye&g$-KKHa|&p z0OKudp|B_|dnb#;AWN5sHX&F&fJ3*d84TdeCA4XNUBPXY-MIRMtyh7ku$lh~MKmTBghXr`$qnwE&U=9@X}AjMSL zS=L5)3goHho_zM{=bwNED(Iku7OJOv#MDVxqJcH)=%bSiw%4STR%+>`6NCT&A^spz kWn^_@Wn>^RHYFfHAa{3nE@x?GcWHWIa%3)JZ*2eoJ3Quho&W#< diff --git a/gifs/b-mailing-p.gif b/gifs/b-mailing-p.gif deleted file mode 100644 index a374158d01f7505d865960c6c37ea9bbee4793e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmV;w0zmyoNk%w1VSxZ10P_F%Oc(5UWhXcx&e|A&dmc$dED_kI1AFIVvOyBhw%tIE(~?!7uQPLb=~A*VO!# zOy*=b{LE%Yr8M$jD2M`-!gj>(`~QG}f`f#GhKGa#1t5%#j*pO$Q)dTDmX}O}1_^t7 zn`>U7erI=mXGfr1R)1f70!AnX24(<102=w%th>=1i z$(@0z29gO-V9GsCB-DsXFoofFrxf8 zsi-mCGg<)d2q1t9na`gtJkmI zuq?t*Y5-3jXw#})%T}$OJwYaXA#g5T+q*gL9MG#5ZwkI6aF}r>Ys;cA=qiO=Hxy%n zXUJe38+c%HWuJAI2B(Ja6=O%%-dPE$hz{T zX6M@!VY?Ach4c|R1{?+k$r{thD8Xd|vQ2#G>FkDif-Q zzLH@@)eukpR(Ko^#E0J-768t8RzwzQ;Ik7Yz>(0001RaB$AfrNF?z000000000000000000000000000000 z000000000000000A^8LW000vJEC2ui0D%A=06+!*;3SS@X`X1Ru59bRYx6*n6buAW z?0oP4z@7nt2pW&b;INoP8V(1A1M+ByW(Na7!0md!VDAFr;7%7@2n4DY9NOJC#5-kl z6I6lv5RNbY3o{CGW)NrsV-J7}2?7O+Gi6={35g^PQ)-%5o047xnVW8VoMi|znq>@~d|dzyi8HNCY zMB1`wbl9=bp*x(G%eSxJzkmY^9y}P+184vfD_+d+Fsc+}u^z~wqlx9qm@{im z@C>oFt6rTNfg0AZW6Ngk8iMIFvsdR>lGjQDGB!+abcD0`76I4z zB!^M}InL%>3bb2bAkNF`eTplGa;*-`nAf>H!FgN&#h)|C9>6i&s-i$;GZjdBAm|?Z z5EvYQk48;9rd=pN#Ui=9R$qQX&A@XBjWEcffRWdE5)Jz|F zsFGBjI52=rG~H6n0Ensa0Cv{=4lJm^rkr-_ z>8GHED(a}DmTKy$oc^)UX9AgESc{CsDyyuHwMy8nxaO*>t|0&bA^r|$X=Zn6dSP;8 KE@N+P0029*0)yfJ diff --git a/gifs/b-mirror-p.gif b/gifs/b-mirror-p.gif deleted file mode 100644 index 9faea44be368e066c5da57507d551ff03b51a8ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 727 zcmV;|0x11QNk%w1VSxZ10P_F2x2mPlrSC0SN{ z1Dzu!UVL1BbVLV$RZ*r1qjPD01*iuG22KE5wn8chzQ4f1!o$SH#>dFX$|`nJTanPw z($mz{*4Ng0h}+!V-rtFf6iy2YaFv(o>UyW@?(bp(Tx#&NwYJYeCJ0Z1>Im}*HGqsGZ}2D*94h#|6P1AHbXlHn0l$uj^t@=Rw$hVsbs#)fcAnARF4uGpf7v`B#w0Ke^GV_-Pus3Q$FK86?t zqol==R74hO;Lm77Y#$0001RaB$AfrNF?z000000000000000000000000000000 z000000000000000A^8LW000vJEC2ui0D%A=06+!*;3SS@X`X1Ru59bRYx6*n6buAW z?0oP41q9*%EEU3}B0tJ0DYg+{gdn65pag~;rn3Fr}uasHv%8 zH;7-auz6yXaSsJvm}8f=0tU1Yc9&}iGnEcA3R=at0&xg|mv~zQ2ML7}g+c`cuCdf{1X4!-UO_NOfs`|VATWRfVF*bt1Q6^gbfu!j zjzB*);zIKQnv5{bTq-F`m!&nu{)CKkFq20u)YP33A>)jn1VX}!9ZR;X*|TWVs$I*L zY=U$QqD-Mjx31m0c=PJr%a`w@2gUda9!wY?V1FpOI#_TZhmIwXBTJr4`9~8dGvKwd>cgV}s6NK!{u_4bIpA{c}r`TTMn9cy%C<1Cmi@ zUg;A2W*3!2oi6;srApcqx7cxmWZu&G!k$U=Gy* z>FFde-m6kFmJb*ZM;{9?!`&l+EK`8XPd{N)o=|DP)Ra&(ErkmNCh36*8Z$%$flCk+ z&>?=i497)IN+CntcugTS)E0Xv^k70AdUJ;?0`kHIOL3q9qJ&-Wx5YzHNRitE3Lvl` zi|YK*q!!j()rB<0+o_zM{=bwP;xx*7$X~tD%4%DZ>qKr1`=%bKED(R$@R%+>`jLuPIW~7|( qS73#OD(a|*b=uddsHUpwsv!UXA^r|$X=Zn6dSP;8E@N+P0028`p>wl21k8n zeVYcIoP1LvduWoHCO(;7L?{LZN&siELMaHjy1Tr+zQ4f1!o$SHDs%;SPmj#a&d<=% z($mt)hS%8H+S`YT6iN#UZf%z3R03t@L{gU|>hJLJDYj<-K`03E<(TePPf`ECNRpx^ z0D)x5x&-**X@Dt&1$K;hv&R!69|(`=s6*mOtRedUDDfK@&r%=c{gOYPi6$4A8FZB>R_fF|&elMy@!a34Aaiq)Wk3ML_dV+2|O zp@S9*Kn{c(UWnm1$vi~Z8n%=O*oi2nNE%Sdz(#?64lO0)j5OA0BSZvjrH5P>XvGy+ mKn5A4SY%;k^FJG-Z+=l}m}=guuvRFufh_WJ+7 zXYJacYuBQlKL^Tco;&CD{CUvQrIzpC2Thq`*wUgI6eMA3DRAJx0S0V9@h1x-1A_#E z4oDJYrvvMM1+_jlMTW>#>vCT2E8yX1G3;|XW^wV!{{!;MUn?SlCL}J4NO1|8maKNj zLQSIQ!TQvR49Wth0vik$>=Np*I+VBj{)Zhke&NPi{oZT|+UiEE?A$gbt!+8{lHw(P zg;_#E?llsYqC5goGrgj%M7wMqf?Vu68D`GWid|rrAewBhq^fSXW$QKrW77@hto4js zJiLdpjvPI9{KUyqr^>}N7+6YAC)FAs@`xPCLjbGqIAP|5JfnVRC6Q3*n#8f+c{ z*Ov>=w$tRP(&1kcVBabJ!nYytp?gc2<^#qB6Vm31afmbh>gdpPn%5y76Z^nivAoWN;3g|Kzt)L4o|~7Qoo!M4%B1LF~K|W3$-ro&a*Sc zltY)yWLOB;OhA s^(Q(s8rCtfwoTZSegE9v-QV9oPz{)nsb~@=WZAPS{=AdJB>@I&0BG&)xBvhE diff --git a/gifs/b-next-p.gif b/gifs/b-next-p.gif deleted file mode 100644 index c38792f91f71e5d0b57cf1eaded5b662a5de166a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmV+d0{#6*Nk%w1VM_oN0JHx95D*Y4DJd~AF+xH@T3T9bYio>*jHRWet*x!Sy}i!P z&LJTfz`(!&0000000000A^8LW000aCEC2ui080QB06+x)kjZI?04?jyyZ>Ma2!t_B zLQ^0};=b@}WQ3I+b5qv_k_o8>!Z2to42IaNGbq3ixT1hzSTqL6gZ9AcdcWYXcs$YAx)aW(4I@c zcqu)^w4ARGOI|@!6Ye%2O>?Xxn`41l zB^r)ggL6Qj4hB++fzipi^Ejkm&IH&bA(5gI#8RtX&APQ~*9G#;^FJG-Z+=l}m}=guuvRFufh_WJ+7 zXYJacYuBQlKL^Tco;&CD{CUvQrIzpC2Thq`*wUgI6eMA3DRAJx0S0V9@h1x-1A_#E z4oDJYrvvMM1+_jlMTW>#>vCT2E8yX1G3;|XW^wV!Zz1p3?tg5J8je4nlw>gL&}rkv zAx3?Y@=GHBxGIP&WJq?1R1xa1I+VBj{@cf_e(P`F&2mfa+%i#El9ip?rj)0=qq8d~ zE5nJw%uPFAtcE84tT+MDBy%NIb;C`Yw-^|kt}|zCVC3TA zJ&<+i@R6g(j-NPDC8oi^sv^nA(PHZ=AmkIdQdq$6UfjJY5ANMMY1{(ZUm6%LUJ~jMXDMp#$hs{a z_SQ`#qwL_JW-g83N2_8^Zd!VJx`BMejtg%h^_ZEnUfwxre3-$0SAfWjX9^LU7JE#V zD|S+x?aO1y8hCjN7sKAw5t~;z9ZunCE~Fj(|ocCzBhSv(KM*jHRWet*x!Sy}i!P z&LJTfz`(!&0000000000A^8LW000aCEC2ui080QB06+x)kjZI?04?jyyZ>Ma2!t_B zLQ^0};=0Aqz4S{o3t?r3!KVUWL#L}`TnAq5g*X^w0)}DH81xR<18d9eZf^mvcud}A zorM&@B&8M;I0&6_xxpi41;!Hr5X1A%KGuY)-u8Y*2&O6dia0hV?SnHDq#wqV;_@MLrd$}%iU zWGo111i&;cfjDv~ipa$wZ(1J_DUm?Pjj?2J0Jt%r+7e}xh+^%qKpC)P9RMzk1g+OE z0t~$V;i40uB``TN>ok+@R}=~ANGuyonskg3rBkb3oo-)CO;0|`o(&?%i3k8YuM@y1 diff --git a/gifs/b-projects-c.gif b/gifs/b-projects-c.gif deleted file mode 100644 index 01740ca39ca71e97dad824cc2eb88b82617c4192..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 990 zcmZ?wbhEHbY-EsQxcZ-ggM&jrKtNGZF*`fEy1M%R|7+*YEiEqg`v1RY?b@Jg*P=8v z1)e{TYH2Y%cFgPEy`ZQl#W`~RDfh{4oAL4u1l_4M1S{SP)&`0zz5P1^M9^#l(oX^{pMn}sTU z$5YS0|NXzAv8hQ&L!(BlO}tI0hF3$PMx;$rPD8kLy6|ja$u`ltnYB`L1g6xANXcrb zyC|x)ZQQhZ%hqk%ckJA?d(Un)#ejo{4j(ysOi6=1d_nWsbLZ=4Zj!CuEGI4*ypg+V zn(z(o&EoviHa*=abn{v*zmU{4CFKp$VqzlvXD zV$EB|jF%Sux1MQoB5_)0({@h{ogIb2je#rXitFS?cs)Gd%wg-VF#FYmv~%k(B{81( zuvt)k;ihA5drKBB-_fw?m@nf4#pc^vs=jRr?ohhNp{Zfxb76s^)84}!!rF0Xb`&OA ze37xfw}G)K@#G9~_X`sQoOW1>I(N(Y?%MM5@`~W)e2PphbNe5&DoREu)gW*>l>T1@1NVd`}_O5dmGQoefZtX z&iCplCxZ@4zBbREI@_ChD_i!6znOg1JFAJ+PI3w3g4#(hzHr{brY^k0}9_;#& zLMJdx)JFk81TO^lrAc0k~fPt~)t>X?ymW(^a_f{;Kmi21oie*t*4y(3lO`X{GPN*PTu@>^z^46X!x6FUHycl=t$wrV44bthyR;6&L-upB2WMq( aPF?+W+r}$pv$GzwX}{a?ginx#!5RQpjg5Bz diff --git a/gifs/b-projects-p.gif b/gifs/b-projects-p.gif deleted file mode 100644 index 1fb63e66258aac4987ebb51474c6e6039d479f13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 zcmZ?wbhEHbY-EsQIP#x?gM;J1fdc{(nodF0hL%B^hF($GOM{Z69FlywuXE zIJ_ShX(a z^*$W~!836DS)K2V*+Dsc%$!+j2_2nX-95d1{Szimnmoy1+VmMSXU$e( zE#%>?ie0>9X=HIHYiJh}TSccpRlzDgfi5=og3etX% zg^QOipDDg_y(NM3`kf0_&CJXNbDlhX_WZ@mSFh(xdH4Rq$4?VAj5+uhF8lTS&o5Rc z&L1BoTa_b)1p}99yf|KP-+_7FwHY&mGn!Ud?tHXm<_3kB9lh!6Y+8g5E@sv_)bW4C z$Cezg!_yZBs9I$%JHKf1W(7SXgJ;){aWctNM5$;!Wk^y^aq*aNX7T0a0gJunN=^0j zTot11GNE~E_H~wmc^jm?x2?IkIpgxGSZlLWd$t!mJ~a8lAu$#v<_RzEp5DIxzCw$V z%fjeGVNKQM1trmEb`(C2>|5*k+w9B)Lk`{#olPetpI$!e=O1SIVEF+i?PizVMO{`U zvpD4oZAD`*I5uf8KA5xY($4KuElU|zGC3!_aAV}oV>X>2+{a+Osw8*q;|E`ls|hS% z7YUKgkh{09*8WNG=C0*oVQ0=vy4ih3?z@$!>y9K5o;fU*hq}w-Uq?vZSkV~RU{J7T zqOipBSVp%(mf4a9?OEY_goN~(=ZH5*x$amZ?^De2;Gt}21;@f>!5WPyKbxs96sz3V zo>3&dirhE{s$W>eDr3Yk7;+gbYlU7%0o`oLL0pw zd+N@=|NXyGPD8k{SzM!}qN$}rNLWLzrh_|QvQDU@s!2j_uAG#3cddw&tcJRal3K@_ zwd>Yz*tlu)maW^iZ&OnW*t2)v{sRYRiU{Kun`1k~2 z_X`06OsW=w#@YAI?A-kP`~v58F+-&zb9z<;uijRnbfhEJ!()nr;sb{!ou~^h?w#Ge zJ>N9fU;&3fdPm1i7CWOI;R|?(fbP-nmjX6%QKb&1Tr` za$(ych1J)-|Mz>e<@TgQR~R&0S{x=OSk^S;bh=LSzpPSpjwy3$Xk&r<-qsGs2`8>j zQy2D8n8PkSLsURhV8Mn{@?6n7zRx!*`@3Xer?+PlQ?t^v$(*c0DHHmvzC2aDsw}tY zLIcbFo)!ImHliMVCKuK;b_7%kl+NrZczW?l@ZT2?gQVqFwL3C@-ST3w{Mj8&9@Ae1 zB=ee0m{RJh1UM^qIruAyYl4)75mI;?^kf>7-DQC%C cwpQ)+nk}0y-O66{bk*y1d%jt@2ryU!0PB)|`v3p{ diff --git a/gifs/b-quickref-p.gif b/gifs/b-quickref-p.gif deleted file mode 100644 index a1ce55f477e75fd89bd69a8c24b3067fed569fec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 751 zcmZ?wbhEHbY-EsQIP#x?gM;J1fdc{(nodF0hL%B^hF($GOM{Z69FlywuXE zIJ_ShX(a z^}cK-AC}Js?(5#yy#Ie-L4k+PCz%tjDNG(6D#GpO9M(pyzpoa**m4HyQjCWf5OB`lc!9bEXZsyYxbPE z^XBKU^6;|9EL*-Jgs-zJIW>J<8vB~u%=LT)OT$XLgt*z53%laF6GALKyjdB&1wDeS zxh`G4a`oEv8#gZ{-MV}4{!Qy9X687-`7d6+dj00@yZ7%prhWeM_1pL9GgZ7RF_+UIjJfA z$)>Ekr?#%XzCK#nL4#r2nwy(5gex+c)~~(2z2Nbwx!&9J?wT?!cyRml_WZpzDZwfV zo(T;T4|fP_$DK(IV9^ko)5Bq=*k~_fc_8!No=9IaTV{)F=OyZmheKP9t~OqHF#qJ7 z4awp)s=qT2JMalPXqrE~?t4>|pGR4Ydz!BCAq5fJItH#wlkFaJ2-rDRUStXgo7LFW z;vj7l+z?)KtFXFqYCczJ{od2(8X5UIL_asPJ+qiM^>DX*N8sWM_l~Xncu`b|^RS$# zSKz@(Io@9*1t)uz{z$sq_b|hX1e52a2z`*We`WeIbyqlsKm>nLT zF+Ojg_L#3w#NctS-2sa}8=)7qt?5uylHSNLXg7 U;;oxYpH7P@d-;?@k%7S)07z0R)c^nh diff --git a/gifs/b-search-c.gif b/gifs/b-search-c.gif deleted file mode 100644 index 402ab8f5b0bbe9b31283bdc4a66abfdd0a8569e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 650 zcmZ?wbhEHb^k$G__`<;O|NpiB|9jrQ4|@JQ=-$1cbLYH{9dq5f)oIBR%PCU~TUxY= ziZr956fK>Sor0>Ztp(LIGQ2fcl$iN`VpaW6^veSX} ze}ZaXO6I(bRqL{aJ%vSiSOV` z#1)p5UMawqT_Kpy!ZR(iYF-u#JEyCFXgNOz2P;c&-|$NNN>txx^VYn+a?b4$Ldi+&Ns+Sya=Mmr6tDGu z*taq!tS~Z$pDoTN!eN8YHnV>#_9Pm=JE<8T<+8(Jvw~w&xP)=mof8`uAMal;^d+g_ z`H78_HG;pciaEJSRnb~d$8@%*vHzKL4K=5Tf(328@(#^hR|Q*6a8Fj2*)ze+`C7yB zfW=;Oy|%8px;%u>V{Kx??1_$iTTWC|tz8r8mz=?SW7~t)OC=_Gh6bPB`!==2ehD=^ zl<6hLSiVI=McJYtNG)+I}>D>Nh)1H6}o7c=J z%G#t*QS{Tmn)7``x!aFtC!>_&do>!K-r&(Jo|3X?(#>Ci8a9j5>g5i+wuoq4&v)dL z=iXgkU*FiA{k<}o;|NEyn-9z3gvO@NFD|c+KfiBp^>-F|2a7HiR-Z?vpY?Z3-dpJ7CJ2y`l9QB`mY0+!R|Q-` zZJ(f_qNAj1on@%0s;FlbQws_SByzO1wzsuWRV0mw0su862)0vlGPghhNk|1qHBV6= zg|b&!O^ma&Fh@06Lk4vN;!CZGiRw-QgMZf?w7_xwf*P^1uizl#jnK7YR00OY1WMLdhl1G6Qy?mhYm>^ahTrgwC zEVrvsmQDmj5<7=3fwvwnh6M4$`I#h)yU3=EV~b?@c$Tovq0ETQ`G z$wE^SradhM2>FEZ^n>41aS>|hZIv}Fwzyk+fY5OKF*;UFM6RosdZ7Lq-w5?_g zSnM^|YwN13t0S@{B0^a&T;ecV5L6xHz%hAa1}l$7!TX~@oa`BAv<^(@Vq|2NWZ7~g zFY!>frqF@G@7)50LKmJiCh=cknt$bxL`7pl;X`7vv@x~uMqJ&;xS#9H87SyzCR(4+R+`3%XymiOPc=jZ1a7mX7b5*M^AQOmeD$KQVWncqJ?|L0<4Q2fW2 Uo|#sjS(R9nqL-YX%fMg_04U)DxBvhE diff --git a/gifs/b-source-p.gif b/gifs/b-source-p.gif deleted file mode 100644 index 746d8288b1d2ce4e19b3c17db840d704de5c9601..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmV+j0{8t#Nk%w1VM_oW0P_F_lc)#GVcuX#n z1qF_J&2DFc$b(L&{T333m>1bhPMKdzeqVS&gd@^QqNAjxrfgkis;jK3Xcb2b3V3pJwzs&sx>h8Qic&1cTp8eIkZaJ%H-#Bb|!?S^@;Vp7;3q`uqI-{`fFtoEk{5 zpuvL(6RIgNAY7}55W@gTgQ3oVdMz?)+;}2OxET|pq!5rri=)YtD}3omBPGEsZo6=F zf*G^skVIO#j3a@|fERBD6710vf*H6eh8X@_r^lO>M@p#i#6<**fCJ5N6ftTJL;_D* zbVvd7)YFdu1a8z+;u9@8AzYp1h-Rh6t!qj|Zo4J1RywzM93GYSmJn95w7?btAjOd{ zUnnDMeB3D&MG19)5ctQrv*&yS8hQbFfuZ1ts9Q}`$hx)bQV{?EA^r|$X=Zn6dSP;8 KE@N+P00291zSGkH diff --git a/gifs/b-stats-c.gif b/gifs/b-stats-c.gif deleted file mode 100644 index 9b44e463a48f308790f8461fdb0b988ac8ef1b2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 868 zcmZ?wbhEHbY-EsQxcZ-ggM&jrKtNGZF*`fEy1M%R|7+*YEiEqg`v1RY?b@Jg*P=8v z1)e{TYH2Y%cFgPEy`ZQl#W`~3&dirhE{s$W>eDr3Yk7;+gbYlU7%0o`oLL0pw zd+N@=|NXzAv0hlNm0LqYN?cAuxI(CdyH!F%uA)PzvZbw~t4c&lRzuxINv&hW%2lh^ ztX;Q$!^TaUH>oKF?AW<$_ny7V8tmbsO-GI%J6^SD)r6JPRx!wm3$N-swX&LDNUBF! zez~-mmPcOFVkIMM%gX2z z0RqbIO$LIi9S%CNxP5wN5fHF$;qj8oVqYp>usbdFF8R>H^F`s%7UBJ7S6=?uxNIX& ztA*;W1ff}N|Jm}@I8swyGO6+it2{VUnUOv(=R-irZ-u3oSa_wBT5g}(y88P1gu`93 z-rLqht`n^DYbfA2w{LsF<5P3Jx39aqyWF*h!!Uip{rwG$^EeD2i3tg*25?wRQ0Nvj znV{@F&nMDX+KcfKkKn`^4o+-Ov^wN`cWrrjc}4K*xU;*MSonFP#3ya|b;T@J8 zs!kh4*-Ub|?A?u$PIZdJusJ9yv2?L4X!qt{!WekYNklE+Q$eXk29lU=2x%l z-vh2BT(a!aJ-Gbz@nShq6Pu&@5jQ3jTc7d~ztVo9_QsBuj^c-R4evMAO*rCVa%q9W zBro;Yh7MLmru zpUp^_micUE#qrVE#BILLImaluW&s*j>K=2krGJeAP;@agmU4QyI31RNO{tN|^8 BQ&a!| diff --git a/gifs/b-stats-p.gif b/gifs/b-stats-p.gif deleted file mode 100644 index c51e43948803f1064c2f69e627bd2db6b8639243..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 674 zcmZ?wbhEHbY-EsQIP#x?gM;J1fdc{(nodF0hL%B^hF($GOM{Z69FlywuXE zIJ_ShX(a z^}cK-AC}Js?(5#yy#Ie-L4k+PCz%tjDNG(6D#GpO9M(pyzp(`nl+`e=7-u;P_RlHd^_~$Ko`Ra9KMpj&L+@{UK=L2?ez4`S!a<;(R z%q=>d$qMrr>tnw0M0`jW){Fh4^sZRonV%$cGna~j!?Ff<6PAS@8U_tXM-9bS{@1t? zrrpp}#aU!H+jH}>v$HLVU)?#mdAa`_&I=|7-L|Z_xY%Q|R_v)MFBuF14tUP>+B%zs zQ6*SKg1PYkgL1;*E?Mts?(;d6=JrS!s5M&3SWY-O*SkEAg^{zbRnovm(w1}b4Tp?^ zcax7C?zr1%bR#v6N#m@Vj===xjZXvX)IxZQ7cj{5ru$9$n5D&Z^2}_`SB{4S&$ehz zPp&>0^I~q2mY3F{iN=k6jJMXUTcgsf#+Y;S#9obky%SEUHKnLA*DRlOzSvAiOkw4m zJ-Zo0wyq3NsY?i0Wg6(Y?ox5X&Byl`*&HfoWLMw({o}Ln%Kbjl2}18Z1sEB*|D-%< sNk%w1VSxZ10P_F<|NsB@_xJDb@7~_t&d$!gy}hlit(=^kjEszXdwXkZ zYeh*}0s{oVz`y_i00000A^8LW000dDEC2ui0D%A=06+x)u*pfQy*TU5yZ_t5FbV+# zL#nQ9>%MR-&vd;KL{T6jvq+-?K>#QM2&3d^VQe~|(5Q4utriO-R)>g*ibZNc00(O(U`mEY0t5#=4NC?F z0|JAKqNAjxV^0B>2nk7kuCK7Mva__cw2gMTy1Tr+N_Z21MFF8k3nrz>%2TJLD4m)k z1fNaZAip2?Iz=NdjOCYLx)= zOhLc^k2`5bU^^iI6tSN`g9;r=w5ZXeNQZ(+N>l(mXiNG@6XXO7lXX}}H4`HQ(KB*A z45WGjabDK5hs@}FXTV*O0rl=RL812TfMP`|zD3KISr%^$3K(IvpxM@Z2KF&PP+&k4 zk&gOGZUTk~01*p_v|9}B@2~+keT+chDOH@ElP8xAd_*OYNrmPTKyc=VzfLWC>fX(} zx9{J;g9{%{Ja}6My;JPihf>V~1ql#HpH98H_3PNPYv0bjyZ7k{6f{Cv0kX;S=+Bb} f$-ce&_wFMA03rSkXK7}4X?kIDWG-WGZ2$l}urC6) diff --git a/gifs/b-top-p.gif b/gifs/b-top-p.gif deleted file mode 100644 index 22a20dcd5d4c8b2e49de8de8f1271591fe74cde7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574 zcmV-E0>S-9Nk%w1VSxZ10P_F%MR-&va`LgAfqXXr!iuK|m~$g2<$D$!t2GP*Z^zBoczTz*G?2A`gZFK}RX% zjOes_&2GEj@VJ~fD1h$xynfHml@bR^BLY`ZhKGoWCWA!<31dY81_@h{g(qMJegJ+3 zo+}8UqNAjxrl+W>s;jJ~Tcavr1qCAme7Cr{y1Tr+zP)C1!o$SH#%XmGehUhKfmn`; z($mzGRMRP*nj`=|C2=o$Szlpe0i8dAkZJ+u`sPDA1D=tH1URrI z0HaG_W^Do>f&>9=vm#2INU@^Dix@L%+=x+x7K;tpcl;VjvZTqAC{wCjxzdcmV=!aN zlw&X%hL8gu*4W9jr_Y}%#0(fAasn+v%$xyT%G4*VflIYzu`?xKvu9m&?AvM%9gD0eu%4T7mQ#OjBt-3iK$Qd{Bq(MC)mqweH{H#f zDWq(zfEuE76{iXEu6&M&8&YfF&;J^VOgCJ1+$->CMAk3fxQVFutf%X3bmA;hB zc^RwL<-FdvTG+Kmgoh>YP0joN2No1~=t%Y39DcZ<;*89qn+F{PBG%tnQ+E1o)&2(s zWrB?n{Kkwob7IrEIg47ZG@N<&V^7`r_rL!)G&VH~@EWvtbar+3lyRFgCrz3>W$L6n zrVPQXN`AIT7Iw}u0pT)!4h~k9iPP4t-!OGXqy-xn_mZAnyZ7wfxBtMw1EtMJj~zd8 zvY}PAjE7;u#!Hv4Ok!r`Sez|{=LX_h>nw?WEb%ZiJOJtk|#p4zhV^74S* zX9g2ad9pa$E8bAhTEF_b=k*)0Q=1;IzM1*t-PX;E`Mo1n|Kd7e?L9r{mha}YNJWLR zwx$`S%(r!m-QMmj$>V+_BkkC@YG;#j{>0{XVLAW2+{mL=j~Nd#uTJTb^WC-O<>eK@ ztK-&I@xGMx`4g)uxZzAQD_7C$duMlVe}Df#Gq=3oo*nO4xs9@15`&h0etzNe1{Ke} gyS~1@q29v4p!kn3Ju|I5vnsJDMK3u&mw~|=07P#F&;S4c diff --git a/gifs/b-up-p.gif b/gifs/b-up-p.gif deleted file mode 100644 index d8d83602d9b0571ba7cd7f4dd34b9eca3a93c721..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmV%MR-&veZiI57wTA&mxAVn{3+kI1BQ$!t1{yTGs@5G0~REb(9{5O|cru1YSO z&*-#z&2GEj?Lh%VuiNkV{H}z0`u~7|ep*ykV`KvcMJYIY0DCw=D+rX8mY0~Bnwy-R zo}ZafmMdKa1tSA_s;jK6uCK7Muwrnvwzs&sadQ-V3nvGH!o$SHNQ{jn06-}S#?R2g zgjH8OLkFmfU0(r^lF{JdON9aD)MMsVir1x%03sv=k*4(Z_V@Vt`uqI-{`&*E>4Vop zmcfGv6DnNDu%SbTV$$iFNU@@=a&j^dlw+f#$B!VFL$dG^kcW>6rvwoAg`yd#moQ_> zoQa84vH)|aNC76Ur_W)?;H4zc@~2U7(+pLSxQ?BHC{=_UooXy;H7P^1ursw(rBte5 z16kFAjf6H@I8EY65w`815oM~CNwnpFDWL#TCW;hEq~E`QUqn&Cw-j1l5;hJX@UOAs y$B-lM(^0Y@hKO)2YTnG5hroxRLyI0wdO`#MA^r|$X=Zn6dSP;8E@N+P0028gy5KVa diff --git a/gifs/bg-bl.gif b/gifs/bg-bl.gif deleted file mode 100644 index ecd638c20f78a493230f4c7697be84172fb752c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmV-k0ipg!Nk%w1VaNcM0P+9;|NsBv=J3VI->$XOjFrJ#X{G=G00000EC2ui0LTEA z000C3Si0Q)Fv>}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhG{a7Zi~kI1BQ z$!t2G(5Q4uty-_xtai)odcWYXcuX#v&*-#z&2GEj@VIs;jK6uCK7Mva__cwzs&s zy1Tr+zQ4f1!o$SH#>dFX%FE2n&d<=%($mz{*4NnC+S}aS-rwNi;^XAy=I7|?>YW77 z1J44_0nY&K%>eKB^Y{4t`^x|V=2I3BKmdEm3Id2nP$5HP3I!&N*zXv{fDegX#E4KC w*v5bX1_t|BFr-J4B?oleg_2?b0V;PT001HW4rgg*cWHWIa%3)JZ*2eoJ8E#ke*gdg diff --git a/gifs/bg-ul.gif b/gifs/bg-ul.gif deleted file mode 100644 index 2d3cf7aa309c0cef048c0d3069855e1adbf85eea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 367 zcmV-#0g(PjNk%w1VaNcM0P+9;|NsBv=J3VI->$XOjFrJ#X{G=G00000EC2ui0LTEA z000C32)f)FVvs_sy*TU5yZ>M)j-=+CKp>TD>%MR-S16;-c&_jKR;PoWa7ZkEYJ!Pz z$!zLS0;hCJ9i4*Jtae*)V7cJ1u@M!U&pSpL&2GCE0i}CRKPtZUyx#KI`~7!+f^{i_ zhHe0Ohl^kUa*U8#0g;qiYn7NyikX~4kDZ{QqNAjxrl+W>s;jK6uCK7Mva__cwzs&s zy1Tr+zQ4f1!o$SH#>dFX%FE2n&d<=%($mz{*4NnC+S}aS-rwNi;^XAy=I7|?>g(+7 z?(gvN^7Hid_V@Vt`uqI-{{H|23LHqVpuvL(6DnNDu%W|;5F<*QNU@^Dix@L%+{m#i zqsNaRLy8oJq5$&6_xL>fFh*r_Y~|5&!@p{tjnpW_M|N NVRB?HV{dH$06P^r%>n=b diff --git a/gifs/bubbles-down.gif b/gifs/bubbles-down.gif deleted file mode 100644 index 1e295435ec9d84e0194dd42322e271aff365cf4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 411 zcmV;M0c8G1Nk%w1VKM+R0K@kfLP8LOD4YDJc-==UUd*Qt$6tgoH8P-cq%-LUVH|&dy4Vj4{2vLZziS zV`CvoN*Ey_2mk;8A^8LW00000EC2ui05SkF06+!*ARvxpX`X1Ru59bREb`4W0^i2h zX&9z$kB{ND3Vbw`$YdhXWIh3+bV{vSuh{HLM*G;br5q;`srVQ|FhEi0&I$^(YSD&p zGL(+zQ&`CVfPsR8gkUom6Bsjs2?A~c356qvNfQwm8;gkfLP8LOD4YDJc-==UUd*Qt$6tgoH8P-cq%-LUVH|&dy4Vj4{2vLZziS zV`CvoN*Ey_2mk;8A^8LW00000EC2ui05SkF06+!*ARvxpX`X1Ru59bRXYgrNG)41ejEn~#4-GgNMGzkcjUr_iloApc8%G6)Q&m@L3kL-O z0R;zlfK?k2v=tZ>f0+P49}E;57Y|5khk}HLx+P6dQOVBF(9zP<)YV_9tF5ojZM_Z} z78jOwx@8U%wHOwKqnR=mdp8mmxILMV5E&NWz;u|pWX_-=7A8RufdUdZGaw|L1_mDt zBr~(eMg&l1k}>R{fs%#|!Xzd$C=iK4MF>h2HhV^K0)~vxQVLvYt)|VJICF*x0RTJB C_?lG! diff --git a/gifs/cap-bl.gif b/gifs/cap-bl.gif deleted file mode 100644 index f6e2ab5f550c737072e68f10b9fd664ae85e931d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmZ?wbhEHbDk%Y&(F`t$H&6L!T|sOA^8LW000L7 zEC2ui02lx;06+tj2)f)VV~|oz8|CQDy9R_Oj)y^>95A4$Gnnk=EJDaWS?t-mxb~vO z5BQlW0+^POmK@ERu|gB*=?KWZ1*r zJ1=)`R(@`0J!W4ADv1YUjD|#nJ%N#o2UJ{;RhVdMWrLppQ(PC4f2D^;HBodBl5`FM b5EvB+03rSkXK7}4X?kIDWG-WGZ2$l}nF?S` diff --git a/gifs/cap-right.gif b/gifs/cap-right.gif deleted file mode 100644 index 5c2fcf4e05cb7364bf6e67e29c8459c081161bc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmV<603ZKHNk%w1VHf}~0P+9;|NsB<^YiKH>Dk%Y&(F`t$H&6L!T|sOA^8LW000L7 zEC2ui02lx;06+tiXjL>LAj(POxj5@v2HjwI5P)cA#(8=w>U}B!RaUzdvn>*OIP{rU z$6aJ%1wLGXQ9m)O%2sxdUEOk}%(j;jZ7wrXAJ z8H92@SAjr6WmQouUt?hhTVGybDPfUcJYkPnB#;nXgPL$ae27GVggbQ;Ne^)m3LOu5 atq}Oa9~+wurQfRP~r92;$I0GbsPtKGiFINyxLcwb6(%6UoEz5qhZM` z=@$)|oX%~Fi%#~4PEqTB?ZCm%ywZ7L#nfYEHVY5F5*6z8cDj5mXZQUN6>ko>a7=66 z^yb6iLo33SIoQNw)s>oC+v*}i+o}T-jS{5OYO9PVR?IN5^e*%D_bDkYTDE+}%2lh^ ztex!Z>67KHQ(2*Kt8v}T3JKS1(IuH{B;N@>kXoR2@LrR|k_{~kGg&_7TrDs? zv%qTUq>`Q$@2fQ!7!?001f`~wCa0z-SQx7+I4G2tm+Pfxrj=(_B^IUVCFkcdFjxZs D*6lgt diff --git a/gifs/corner-bl.gif b/gifs/corner-bl.gif deleted file mode 100644 index 33420e7e5996db9b238fcbc6c5fc07b8e2d77571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmZ?wbhEHbiMa_sa{^UqqZ)7Sa#@LwIG8v0Gwbuh^{iDyYB~36dA1-I~cR#PZ6 zMT=5u!kJR#aYG#wC|?p#9Djg|a2+rV1PyAFl#>Z3k(HX800~bg7>uG@baxVYKoA%m z9!g17MIIXz2?YsF3o=e7DG(JCz`?@9#K090DTa7Z5Q(FV9mpoRdJrAY*a8qRClwyw z;NjxqS}?D1;^VetF@ iEQI61LLFQ(L;%@Hprgl+AVE4=pum91Trxrd0029+W1Niu diff --git a/gifs/flag-au.gif b/gifs/flag-au.gif deleted file mode 100644 index 74eb630530c397d828613e9f57ee48302c50b009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmV+u0_^=qNk%w1VJ!d{0L1?Q|NsB*@9+PdoZebm|6^nS5D@U>Qt?IGc?^EEI(y@3c zW|+&v=)m|JM=uzB0T59}az{!DUr=t3M-PWZ4GaujB#jkt3IiS;3=|U+4;LH*2&1a2 ztPT|}UI``@8wIun2Dk>fw!60;S`PsL3sMtxcNG!=0tXy=3TFqQ4G;(f9ePF&FNs7C z5CMR1v)+*BL=y^=lwK$7Q^O2<=tTek@D!Dpj3rMF4<4`@NN`m^B@!-mfic3%lM1g| zNSt`WNh}hx7Oa~hEmSEE1Q0+_P)`&rMkp+hTtjeA8Z!a+B3O{=<{rFb$YyNtu&bxf zpFM$TaWGB_(OHrr01!YRLj-9M!Vw^F0U*6c6Koo(qp{gDdeP8OvPOUdpLxw(~;lmG>R%DlY1yuH0cLqmb2udgqV1OlLVKtMo5L_}U*-prXZ_wCy^Yu2oX z4<9m&g3%Bd#37*glLhQL9S{l16YL!S85lW4IuE*#tCVZk*iw+>b}xEQaCL z<`=CTJaS?k7M~oNImCK?9a*sOa66w=hu2fjg^VXA`fv4OJ@v3TaT~%?i{th&Sckp5()oFpkLS-Erl->-`|th!aj0au=rJk# z*Nml)7*|=Q+&y*RK>ESWq1)~<%=|g+QkaND!U0EtHKtc;+7^Z_sC)bMivtt4l88jZ zl+p)|3~~`muQz6gPGD$Du>3JOWADbWh5mdR4U5uwS6PI#?_c@j027x6hl4Bol@*T? zq_?C!?lY27nB>T6!Z52>|CdQ4vrW>9CzE{aQiE7y%3eO5E*g>GI9C+Qz@Q+|>ufN%?FmV)6tbZN^ynPD28 zi`ov529iw$W0n=`?CtIq78dLj6A$AGg(?mI00Rmf7*Iti5~mtKxOE80hHcs+ zFnCdb5Vi=_k|6PRhXcez6d1t3#&B6TDnbT@83&<=xh$6tq63J0Ahz=Y1p@|7mFya| zgNFbf&|p1OA;Fh^Ph{mHrtN|w1!w{AYtn$L-o6tYJo=(fMxiGBB1@i3nIBrab{mTb G0RTH_@4Zz3 diff --git a/gifs/flag-ca.gif b/gifs/flag-ca.gif deleted file mode 100644 index 18d97b27a3a6c99212a37b94c6aab698b31e48b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510 zcmV5XCe9zW9v)zmq*qNI9U3Sw zd<$wefNxg~dIUX++6Br(YVTWHj2|AKvfE#MQz*k3u3I%q97n>)4WU_FPq_~!u z3!5f-7aQgb5b5gc?CcpE7ZD8%4QCHCXi^sY`w|iV00RmXSVIM?dzxO^_~q!)0BzH9 zbg=Nk!MzG6U{!%AKtKTn2s}dc<{?iE37!~xZmc6mhmbnnaA<&0L*+_2#S{=QP=rV^ zX~@W2P=hTNC1^V61g(h#-Br)Jf9`Hl1kuNJgnCKpyhdG%Dszfn!PF#7sb; zK|V&=NEsN=tqKQvnZ)VYU=w1ghzdMpxMXhziE&Y4R9MWovE#;QC`gu!a6||IJDnNF A_W%F@ diff --git a/gifs/flag-ch.gif b/gifs/flag-ch.gif deleted file mode 100644 index 41fa3f2a3f26c519c69a47151fcc97cae45cb114..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373 zcmV-*0gC=dNk%w1VJ!d{0P_F<|NsC0=jZpv#@>X4ijv83c&S@trBh>^N?MFYNO5W_ zNU;kLy#N55L|xo%ZNR|5A^8LW000jFEC2ui04)F*06+x)@X0yPK`80XJI59!idmvC zXsS9u+X`yTC>SzQg-@g^ zQVEMzIhQe_FUQn=l?m8rX8~K{(NdJwCfJ!=lQ!zckL^!h%Ohke1N-{|PXYV}IEb;J zNGE2ELP5*3U{;Y-&9Y=$xW-KpVK?S%z;+Bp!#1=KFb*42qa>%3e+I9u+~cShP9L;W*dJ0Jt8RNyp71!em4>-6g7t6+?oQ85vE_sG3cg zt5A!m79u)UOo*9jdAg%e8xcb{9IBZrHHf0iP*tg^s0P9s^xT+(iB1#~VFr;VL#i8D zre~<;sMJJc#+F_rI^j;CMWZ`Tp^n+ zxNgC=^M;XC6rHh2gfvRC7-t}KCCL>+0uKCth%bF50Ca$*Z(H8}qzTgw5gj6kt^AGx8 zz4PqVw_#KnS+8$y-I1;x`z~%Q9X#?=H}Ze9zr=UxwC~Sz&hS1q6nIfvHj+Bpb!&RG zV(a#W>E4E!t8G7j*f?wD>;Do#?%mS8=@oUyX})E_mdIT=HK?|46DpEV|Nf+Z$$Q%d zE-pX$e7vN+t?5`NH~WM8xrw3XDfn3aIy82*X3KP$5S+U#axKzuT!pFVxc%E|(o0|c3w znep-QIXOB1|Nmzg1*0J_h(kc}CkxnhIv^61C)hduGw^bVcq~k4ZRQZxiaD{t$&rg$ zIc`USfMRQ>gmKoL855h1c8jz5ed+jcu$5Cn%pl_ArlsD~xkVf@5*{WT>}1kZt9fvs zv4!8EnM>BIM5CEaTqe$B!Dof@^K9$I=6Z>0uymPg+qK@>?09v(i+VzCRO9N%^$C~j zIzCKz61Le^d4;dGqjt<@euXoCPhEQ(yIDl&&C*>5n(pt9(btf$*}Bg8NP)gig3lF0 z))Q&`88;5>-2D9f0?Txb315t!&11J{i91`>+`2^c-ap^FyS6>&SwA;vS?=!ghU;>^ z=fm#qE@ynem+Jg9c26lAqfi6;{?mIbU-NM+>YsCN>#naCm^XRb9k>~`S)FLAu549Oqj)|}ZQsrV zeSGi#z+dF$!r=~_jdICsI-Lc}L8D^$uwtQ+a;{TAflmUka#8BWL4-{* w2*{J{UyX+lnGCoiVT!FcR1N^>kkLs84+S_68jC^V%?oHSp;?$&YeWbDJ0|e7K>z>% diff --git a/gifs/flag-de-gray.gif b/gifs/flag-de-gray.gif deleted file mode 100644 index 023b46fad8309a6fb2125f45dd56c95a859e2c35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1176 zcmZ?wbhEHb)Mb!h_|CxK>+9>~<>lk!vuxS2wQJW_RaJF&cW>FUWyz8ylP6CuDk^Gj zZtm*pTC`}<>eZ_^Zrr$Q*RD;QHUSwscI?=&VFQo^g8lpVA3S)lv9WRG%9UbbVhRch z4h{~Hk&)u!;(>vIo}QjPJw4gk*~!VtK&dHHru6pqR##WIwzd`*7w6>UL`6lVq@)A| z1=ZBll$4Z2gMpQmm9w+6k&#hfUtdT_2+)Pr*4Fdq&yS6bO-oA)4Gjf~xVX4XpFX|6 zzrU`ouB@yqFE0-$o1UHyl#Ppv16m{?AmHliYGPs{DJjXp!67Ip$iTn=ROasP9uX1Y z=H_i1Whofcm-xgTVM z|4crbzK!PZ>HunGm28tJdoHI!o>oM>3Mf<@I+P}`BokPiHm5Ak|M{SK?e<;5&Fg)UM>8IX~1r5wU zV$BaSIL!EPi0k9u<4*jxCpI`Ri-aT`Y?Vlxp~xZ-Q^43R5Td}y#CfB@iOayCpYA9P>)Mo0E!rG}m=X%^@#)P>7?5+q_iMgX`eayqJwz zId-8T!6tRh0a3S9oDgzrD_k{m34$0t0|yOy(@O^pD&!?Y zUSh{j?D>HzvwjapQZz*~49g=dkW@B{B*=-9;>Ci7c$K1|tokLzFGwCy_VS{R1)akR z;x!h@f@JWbhr=qu5(6=0g=_}Nioqd?hTI{a|&v4@v5+NEetmaYnC@(&C0!(fnjc7;nk?90|yQ;-~ft0Sr{1@#2Iuz z@*q1MSpPpz?OVJ^r{}Xx!0UbQUKwp=&488|9>(eP5?zIbg#?XExH@yVViVjZHQRe+Rz>9ru&!CVmc@y2-R3Q<8r;>q+EW$cS diff --git a/gifs/flag-es-gray.gif b/gifs/flag-es-gray.gif deleted file mode 100644 index c25bcbd8f179a44fc2fad3086be49f44416d7cf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1144 zcmZ?wbhEHb)Mb!h_|Cu(931T9<5OB%>gwux;J^VdFR#gyCzqF($Hm3f)zw|UetpG? z6%QUfxPANfg$oz|L)zpH*VYjvX34;dgREFwQJV`RkpUa&X_SH zF)^{Ru@Pu&eSJN{C>RZaK^y{#KUu)8(*cp7Ji*TKpMjG@q=Uh+v6(|yE9Qhi;=x7% zZYdv&1&fY$OBl!bXb2v3=;UAr>O0VUaqIx zz6y-GEgVvhj^#esmUo>!a{Hp#4Gzrh`=x%|T5GMint3~?&=21pN9U%4rB}r~92nQK za7#X_WB8!h+`4VTc`rW$#@yEZ_3Sl2KA1bb*euBtWOmlknSDB=)sM9wZmoI3)P6qf zL(bOb&@+3gtN*UOp2N(-*;W2x!i;rA>-hM5YHGrq9&t$sm4xn?An~P?n|+JCN!-@G zzgMzd`flTOe_6v1Z{{oa^FK8+{;`o=B46+RlU>2zcB;z*UxqvF^W9l=O&L77ggk;6 dm}CUzmkBtvB)BWIX(YM7oLbS)&dA7M4FJGl%Lo7f diff --git a/gifs/flag-es.gif b/gifs/flag-es.gif deleted file mode 100644 index e3c4bc999f2be2c25f4c4168c814cac8bb6a9860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 426 zcmV;b0agA-Nk%w1VJ!d{0L1?Q+ZZ0IA~3F4cV{wEz`(#hNpysg#b|e^OkRa@^79Dr>HyW!S@O~V)U+PItXr&z3;uxs zj#nPzX9)cP0oPhsA^8LW000C4EC2ui04)F*06+!*AR&qfQk-b2t}I%P;+aTLZQGHi z>&@-|z(+|2gh&#J3MSFHAZf*D&2l&l3xj}X%k6rUjCj*CwzG9352Z2_?gP$k^)YaD4*w!g#(1eD` zy#X$F(t6;@0FTlSQVa?U3JkeYte@;f3k#%d8u{};6NV(9P(*?)9UlOEhy~@}4ORsP zs^OraL!$s4Na1q$&|Z-S2olWd&;dygjx`)7JUc;algpQxoaH$O?oY5`pN!Gu0{~bs UXd}1@9ZHmFm7@n>5C{PPJ3Ha7p8x;= diff --git a/gifs/flag-fi.gif b/gifs/flag-fi.gif deleted file mode 100644 index 5699d3b0c4732ab683c9150907c4db52c8ef005a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmV;S0bc$`Nk%w1VJ!d{0L1?Q|NsB*_xF^Xt-Z$HQe%{*t;R}PlyiHWYjc#8oX&H5 ztx{TyT4S6_QiM4|bA*h>YjdqqT9h$4geftUF*&s00ROZ4FtBYeaB-5XH(iP+3*SuP>^B)OC>x{uXa-Xg7WfIwvc`difCCd&Ab?`P7JBsp zC}03jo;oG&?7%>@e7gvaQV*1r~E2Kx`6VfE{BqMEG+JZnTU%IIeEITa>(;I7)~y3_?d|Q|+}xa;oT{s< zgMxxeN=kfueA?UFU0htIPoEwe8=Ib zpmtYRSB6nA8Ulkm1QdU=fE}mb13+Kl1La7Wnmxb?`Y-NoD$Dx{{9*;G`_Cg9_0A$<@70xEGjD=G;vxzo$N1Hz;KWGA*aX1+INvl V9=6G3?YLLP-EuCZ&{u**rX>z$tYgurOp2h@$HR2gT!}MshKo z5p1tJ93N~V5mzKxDqDCuUwd!@0v#AJC3F&6c|3bUeMo0%Yn7IlQkg{-lbxQ4Zg71S zSWBm%p_v&Ef^{Wl3<-xh1_Zvpz`jz9j2;}b53~~#G?6ET3enLL4b|4y))g4r7#1mz zGlNiNtl~LQ0w`R$YR#sMietvFlZb3moUS1xM1cIELob2rE%*@P`l$8Jf z|1*q&(GVE)A)xq^1?)y05DCf?>>U3YSUE&84mdP6a|mn2oDfJn*eJj)dwR_LjPuZ}RtZ0qusYRF(>lD)Jl_Vl*3x3_0X z3xqOkUl+TBnNPyx!Gm@8_sa@M*c@Qkkhp`Bjo;$TjNC^|Ez;iaKFoOk7 zjrW=b^g85xcWrrjd4;>X#fO~?tyeZA&tG?7mnjR+rsCsu4G#JjFYIcb-Zx>v_T%?= zw6d$`&3TZ|c`DVvB4Ex|_vic7Jr*P^-2MIi1MLp+^%v$IYT?);_~jb+$K>PRKRiCX LK6ZDl1A{dH{eHKs diff --git a/gifs/flag-hu.gif b/gifs/flag-hu.gif deleted file mode 100644 index 4f34b768f00bc5988e32e21ff424957ace5b7d54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375 zcmV--0f_!bNk%w1VJ!d{0L1?Qr8zuiKw7}S!1(z3`}_PnNp(zJl4NzHeT}@5pTo$^ z*X{51^7Ho3)Zpdk>`kC|Bz{OSs!a~592To339=Ffxe5oi4FJCY0lotNG8FnV7w|J1 z*fuBs|Nj6000000A^8LW00062EC2ui04)F*06+!wpdgBdQJiS1t}I%P;+YU#ZQppV z?{!n2kc)6gEE=r;pR1qTf2@EvCD@A2sK1?Tpg3r(LCqXHtSz{DRAfe7Eknez*RgoJG- VJXqKZMzV_-GiEGU5Qcyd06SQnn_2(> diff --git a/gifs/flag-id.gif b/gifs/flag-id.gif deleted file mode 100644 index 541b3aa204959036fe5e801a5ffd850f31ec7973..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmV;30eAjKNk%w1VJ!d{0L1?Q|NsBq008gz_nfWHdyKVGW0aJfwS<($YkRF)Yo$_J zj9O!yN>YSEN_#m%b5dHA=jZRv&gZ42#!@+2V>x5Mz`$cMQfo0%j4@J#Avug8F`O7F zwGbG_2oTl)2mk;8A^8LW000#LEC2ui04)F*06+!*U?qx=!ZeMeu59bFD5E^1m}Wt) z?|kq7I*#mQ02q(Rq;knTMi7aGA~o3nuUK7&!eBfW4n%WICQE3KE<;joGb4ioRJ16i z92O0yA7!M8w0;2Xu5(Ov`_x1t^3r=9_7is_$R1Me=ECXQxfhZL` mbs>;xVG>)ocGVzZBGrrs1wx7(Nm8V*1PKrYs5Dh01OPh#R*}H~ diff --git a/gifs/flag-il.gif b/gifs/flag-il.gif deleted file mode 100644 index 7de51d1cf7847a2c6ca822431bb458fadb145123..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmV-{0e=2RNk%w1VJ!d{0P_F<|NsB@_y5k$@wK(sjEw(}nZRXb|7&%dQe&J_T9iam zhB-oX0RjCfDgQY+|G>b&A^8LW000jFEC2ui04)F*06+x)@JX4JT{!E_xmC#|DN6yI zXsVup;jXYMd}V9{LL=OAfOBlscI0aSd`#!vQa4f zBnU6&P!I&(TG(4KID9~e$EEP@`~QA!fP;PmO$!MDaR4q30(1^9ivs-6aBc@LvaZGwcgfdXY_Kd)#(LLdjh!o$SH!4()EP7}TuV$Wer z7J0}+o7dRc+S}X>$|MOpi#R&tCj~;{QY{7!oSZJ8Qg%@CJXBUESoS=W^@}bHxDntY zUmQv#)UA6Hu+O3ZKbr89qA*SXSH2WL+X#k?s64S86db5%PR@WbyF^g910sRTmoQ_- f1cG1~F9{I<03rSkXK7}4X?kIDWG-WGZ2$l}U;v(R diff --git a/gifs/flag-it-gray.gif b/gifs/flag-it-gray.gif deleted file mode 100644 index cab64dc479cced6cceab9d7d59769fd707b9d159..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1147 zcmZ?wbhEHb)Mb!h_|Cxa|Ns9@n>JZnTU%II?Ay05JUl!oC}{ik?LIy}0RaJDzI^fU z@JLQhuCA_*ii!eCm6VjYxVTK8K0Q4>-Nweo*VnhczW%_00}c)jIXO8%Zd_cPpP!$- zy}hfeE5j%l4S~TO0*XIbzz);_k)S-m&hei?pF`xtfrHKLfn!1% zhH&q9nKKveUB!3$*4NiJ0@D50zWr(TY(@X_uo(>> zj1%tommY3)uyJC#zq0xBlM4w=2k%XrxP7YL0jJVt{(0#U|JT|yx4aUQ*Rb=m`@zO3 zq~>#=DxfCzZ3Xv!d;9+xRd32%zfWU-_VN1s`UkD-!Kv&T4<0lNSV>&dlipP-jg znQ;{pCU&4-qI;wnfD?kTc7~}33cBWSUN3)R&O5ZT(>+71}s z7!(yLFp?xng-)wsaUEun7YtjK>b16UWszH{c=oMwNg`0-*RR&UDiuzxnMF&~K_he2 zFl?yjVUal~2-Y)5YKQ;`upW4twGN0yG8V8Y)S=g;(OLK8?>F@84 zjg38j{`~#>_ZddPXb24M5K#Qd0(PJdhy>*cc8>oHf*c|z8kt$R#Y{9}PHb4{+{U3O zBI9A`%+}0l8Zp6O;o{@{3eIIq7#tU~cFGv>>^Y&B%*rlnqr%{@dD+?77K|z%HZV9J zY0?sm@!>ew*gnT&@}m%khbdkQbxl1o41!mNE|pVrm{75CNh@18Ba4K?fdh=pENme z$gbn-I8*6xgHwhfzV(cxe&Yr{C;thvujFLzVLRj&Ap5QK$p+q#&2F!5eT%%Qs~QmI zb?e*9Ba#N$-*T^SzRDtDB$Jc#b>sV!;gSgz1p!VEcD8uSC-7A#TD!e!>b`$fdfLIZ z7p&WxN`0>BL~YH{H&X~CZj43C~P)?MVhay3k%M*KlBx4?<}ULQSKCi`%PWISw@ o2rFI4F6*-4U^TyuhoIxXy`dL6HI~g-8w-Oq00_U#z5oCK diff --git a/gifs/flag-jp.gif b/gifs/flag-jp.gif deleted file mode 100644 index 82dba42ff0692045f8a02885728ef7ce90bec33d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmV;s0Yv^sNk%w1VJ!d{0L1?Q|NsC0@9*!uz2}^q)=EmwF)_{|A-w zQd*SG&febM?*IS*A^8LW000O8EC2ui04)F*06+!*AR>w!2U(V;u59bFC{&JO>Hv7I z;{kE}z~F%p*ckzg(&={8^@LDjQ^&wOGMtp8k(heFIL`zk%V;KG0CfFJH#i6rxsk3L zJ(mq8Bf@4?6%HL9U3NwZ9t#*TC47Glgh29$=JgKm=(HSrSEGpP)md zSW9V>YXp{H40?PBewl)V3BA6*z=gja9T6LP4_7o9ttlE75);zX)YaC~6cEoAG90(K ze-I9xhG_~E+}?587Ia_%0|W*K1_T4AUmg|R+MHkl1wa*;^~He<6dk|}Pz7W_nhBaF zM4B>>A-yyaB2H{lk)Z*MSu7;{ve2T#FA4TIobdMrpg@9NE?7|l!QB^l^61&a=LOFO lWv$3yAXm;yf(3c3d>cWtTZyMoqe^9#41<*iG!TRU06Q|vxbpx2 diff --git a/gifs/flag-kr-gray.gif b/gifs/flag-kr-gray.gif deleted file mode 100644 index 9efc2aae0f5c5f02303e17aac512e04f03196b81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1309 zcmZ?wbhEHb)Mb!h_|Cxa|Nnm{C#S%`z~bWK>gwvAo}Q&kmmWKI?A*C?2M!!)ZEbaP zbF;9p`10k;%$YM+uU-vQnVg*L?ChMDmgeH(($Udz@7_J28ew5!2?+^#d3m6&+S=Of z+qWAS7%+^2(GVEiA)xq^1?)f_5DCf?>>U3Y%sE6P6q#5!M1-_rPHad#+|0`EHOJtf z0t=^*g2!eDr)rBReOXoA2&1|}9JJ`)Cq&CAZtHj$R#NH}CXCi@C+N%EHRFP2WibL8S}4|2$(Hv zoEfC$Ae644dNOB+zkgBm{?|A+mcZ5*p_Ozz`4aUY1 z6AnCMWM}3HXKP@1bd;lopGV-qfi$MG8yL&iX(k+K*kmS~vByG6n{hU;!SQo@7}i~y zVIk@6(V?*FEZ^be^XDYDDzRQUm+dF<&at_ipGPF+SNv|9ro!jq2eQ9SU~K-)BX^{q z{lkJkH4Nep(!V{}XWz#2sW<$7>GRO%^U9@uJeOzx&YN+shF?QtVfERw;f*mOAsNCx z=CK9~>&5T1%!w3Nx-u)>m-oTV_P-C^E@!dq@DOHF%~~=oWnpV-aEtt@4u_u<;K1M}7uneUE;is`Wmx0`21Z7SatBs%G1kV|@|qVZhNEKfdGoe3P8SIIAi`8N*K$6q?1w3r8J){ICwWL&HZ;uS n4as`BbjGtQ4Xl%uE@Vuv^I}P#BR}<*psPsX&t)!*j11NQq%ADNk%w1VJ!d{0L1?Q|Ns9&LPAnfQgd^2dwY9~jEtqFrN+j_&d$#7t*zE$ zW5y5=y#N63_xF^XoSd!BLQ;EDW0W~UYg%KRIYM)LgvQ?9=Q%mG006Ba0E9{aQoz8# ztz(SNt+kv05C8xGA^8LW000{REC2ui04)F*06+!*;3kSu1VL1)u58<$FeofPsR70|p2Q4iz#R7YrH|I8<+wLt0!M9%q`Hni-FnoS~v08BZq;0hE*r zbBzoeB_%D+exIFahDf!72wP sI9Y?_Arm=tV9BCokq3eX7!}qaQKaM+SSV8qs!XZyf<%eNM1%kUJLSfi6aWAK diff --git a/gifs/flag-mx.gif b/gifs/flag-mx.gif deleted file mode 100644 index 59819aa5a8fb70c904f6183d31cff578aa7c0f69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmV;x0YCmnNk%w1VJ!d{0L1?Q))5(^HA2WiSe}N8on3HhJXyfN!20_8fsevua-K?D zkoETYIZ1Nw@%8rk`S9}bC~-y&q#6Lf0j9yGywSX9pk?gv>e}4Z#-*eG0Rfr`3F6Yy z|NsB~{{H>_{o~`~A^8LW000I6EC2ui04)F*06+!*pdpG%$((4auIyQk;t5G~ZP#4> zV1cFun;a)YEEbeQGj|rVJW;rSVL%T61PZ{h7-|ovV-zYqq^z*0LL3St2buhmQOE^3zbbt2HwXZi qhMoEe3pL>9ra$xgg(`H2kGO$ugxc%&?Oix`ShH%yijLWc5CA*frN)&2 diff --git a/gifs/flag-nl-gray.gif b/gifs/flag-nl-gray.gif deleted file mode 100644 index d4079d3d19c14638ff52010af7a8c9f4e19b6420..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1102 zcmZ?wbhEHb)Mb!h_|Cxa|NsAQ-@d(l`}X3+iz`;Fm^^uMb#--aZfCcnkB^#~nv9H0WMt%l0|yvJ!Dt8!!4OdV$pUt@ z4u}Nh33iVE4Eh`*D-s-;+4+2hmPtSWhtErKhM_|*kv%AZ4Zf`e!_sw_C_Ex6t-0Sqt*?jxR#O|k+uwhT- z=jYoi{qip~94dIdMKeLWzi*Sm*LU|WuZ~~;?`st|+l2dek%0;KHma&?c^ufk|NsBL Pu_X>0Th3-FfuTRGw6Wi zL3TQ@{(qp_b?TDExy9>pUT@0Stg(28n8UjFHShoLI(X>Gf{?xwONvhBC~3AaCrxZ} zQJK7^?DX5J?LzL&3mt6u4s40?U7#tUzPQ-WK8mY#1xKKl?HZxR_~w{KK>8G* z<#g(j@eF#ho|!F(Wu25D6NBPEg`m`w(&W?>1rt+M1qX%l@^ZcO%(U{%s>Grcz2y8{ H1_o;Y%}l5C8xGA^8LW000L7EC2ui04)F*06+!*;31AS%5RSxhl)Wt~8=em+tP(vHMJ(aiid2h3=*oV zs#2`4u&O9~TW|sfxVZ)ZlmWWGz*$Y6YH;Am!-kxFA)m9}`ST#)@S^;u0?ai4edyK-mrs!uWVvurS~t zn}H&Pn^OyiB~<44V`ud_@zaDbrfSeGb+t5C8xGA^8LW000L7EC2ui04)F*06+!*;30}h(>Tkcu59bFi(@9E=sXa| zZCfC0hJt|?2y84m%Vf!HG9wa5gefsK780j+%k4HF3P|a;$Z#$S#X!iYbOsyrv>Q>) zm-SiVvA{U)6Au&^6c0`f5EM-k0~A?JfJ_fGB`1bnn2VQ^3=Cl;V=EE~8Xg7=6A@4j zZyTzwu&@#m4-PU72{e`&1ib_WzXia(!oD6|j0KxiGb#!f0R|ck5fE#q6AcI(0|t(Z zh>;Q$2FsHvk(ugV4!M?)>s%4S%S#QO5TI5!vl6lY0AJ0TqyV3o8tyEqh+(Ut!-o(X zrih_uM5qM`vRGp?VO*;V3F39EHRC`DJ_xEegD;6a$r zpFn*c>!O0o0~0A|F#r%?fCdKF5Fof9U_gcks?^O>)a2oTl)2mk;8A^8LW000vJEC2ui04)F*06+!%;3SGn(-df`u54SF%qXG|VBdJI z@BICkr_5kTEE~RTdarZ2Da!oUs zBE!CqgW()QOAX6Z3zn5G2LBis7WMLNi%S0NXZAli{rWYQ0|yQ;-~ft0Sr{1@#2Iuz z@*q1MSpPpz?K;+|(z$3|&g)GYMG}i===rXD-Tl~RBKwDj%x--rmI!HDKPMv3rn0z zf_5@bp;dc_7nh;23A_2^)F2@t*J)8X`CRj?dFZdhx%&;QkE2?do;1yimLgnFjy_Ig@yeA3(wW(QyUnB zzoo2X^;kS7RyN+A(c%!7+=ABcRV_xJ6h!9N##^W+oJd}9w%KC8YV@*f`AK>4D>$7J z*1xb@;+Y*|kv zlqo`cIZAUPgSDT`LG z+eJ;J>L6Wd3knHoYhFYE92*uWWECf7Xj_FqZbL^8WekInI+JXbL>Ce$o1AuCcy1RB z5J{W}r%$Ox7<+vc4RR)d38e-Fz`?@70szK|8@0ApGPx!z3(*S))YaD47TFdQ6Df@( zk7lKWp0fcP-7vV1bakFkpd1r0N#k0vPUb`z&kXI6_QnIJyEG-RoE+*`AX!M6^QkKtisYICJXE<-ozR Im>~cFJ00Gm7ytkO diff --git a/gifs/flag-ru.gif b/gifs/flag-ru.gif deleted file mode 100644 index ac7b78e2b9751dc0b5c8287125ca5635c2974466..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 382 zcmV-^0fGKUNk%w1VJ!d{0L1?Q@dymn6(QvtCCWEU%tTw9CqA`UcZ4)jz`(!&0Kxe9 z`uqF*`uh7KDXMaGmpVqLH$$0?n9JPW=I-zF;^gZ)Nq10TmRM<^XLzlAi@v|a)J9i{ zh?21J^7a1!0RR90A^8LW000O8EC2ui04)F*06+!%AR>y^wpD1Vu54SG+bE(Vpuh^_r;&^Q=6-aMPCO0gIXHdy*6A6(_lccU# zI2uYv!RY({fPe}U5*l4z7HB6G98+44kXjl*6=jx}HV})LoMR6qCkJk$ZU%A}bTAtS z0RaH7u(7hUuK@$58K8_3IbkC;+7YNdP!#qDBb7gB}LN*_Q@X1y%^# c2rv+*$u1eHU?keev7<)|`!I-{BO?R=JLg}h761SM diff --git a/gifs/flag-se.gif b/gifs/flag-se.gif deleted file mode 100644 index 0544b8c98d22101e03ece8fc2b5d099d9102359d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400 zcmV;B0dM|CNk%w1VJ!d{0L1?Qz`(!&0RI62`~m{|1O@d42KfgF`v(a23JmiK4Cfdd z@(vQ_6BytV7|kj$-!(k#At|&%O6My!kym5SK~aM_Msa9)u7Z-sPGFXHfLZYJ4Cm<% z;^Yv<${zp!0Q&j^A^8LW00000EC2ui04)F*06+!*ARvkuWmagat}JU(*eFsJBm{V_ z2VU>*z+jH?stI+z-*FjmSTInUq(KlSd(2=$VuDsOpR0IGE?+aTlF4ShW`U8*xrenrJ08H;`_UJ8^UX zQ7?H52nVtnw6(IgvIPaV2n-Gr7IRNABT%C$63NLK%+1Qr(8(!_#H=SZ38hGZWqxutVqslMMopcY=<{|*lSy}bU%#Qe|B{$E~x;J^U}96<3W3nK%AID-yI z9%QEj>;DI;U8fG2^e$eP^LmrUW{t%&>;mSwGYLGM%B8YGTdLpv=1YbQtN9mJl)O?= z5b8Y2J6)SWWmm`3b{%+1SICI8`rk znM6|3CUqMcbBafGxe7C|S_&o17oN04Ad_pBhX@nv#HH&6_@lTP8@6p{V2||Pu{V&V zWx9B~nh`q-Gvle#XU?8G#mv&&5`L&{cV}1k?K^kx-O-$ytsEI`&B&C}yKaLe|J3PK zw-OncEXBmEM1HL0` z<>eQ61)QFKQk_l2e1Ss2rql*)^^C11nGd`=O={C_2`zbjX`w9#+lwhe3=sy|%3>mu z4V@b=FArGkbaWC!<5ee9Ck6(^e+ogVDW%D&DGFvrstOJY<>lpi>6vNenN^8JDSFBI IxeN@}0KOZx-~a#s diff --git a/gifs/flag-sk.gif b/gifs/flag-sk.gif deleted file mode 100644 index 162246b2a0cbc3e4b14fce2139e007de2dd83216..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmZ?wbhEHb)Mb!h_`<;O|NsB*U%tM+ar5(meTPn6+p_WS`(?`>R#dc4I+9NPcXtbKt-M1{^@~CkrD3gE)f@ zNFHRT1MB|>s(s3bP0lep2EN|+?w3Wc=e_NR?M_e95I(J_U=g9#Ij`ts${8t(AZO8q z5o^WTTsCcp+5aG4^<+n%7*FhzKn{j`A9lp(1=z@KZH@erk-J?~jER|nk(o(Eu)e#e zUXVAST3lUIM|k>-nX_h#a&UN7O%l)0(CO!3VazKoaAD;%GT~WRovFi_=gQ8`#pV!YA^8LW000jFEC2ui04)F*06+!*;3JAxRaw@gu59bFsCkWIssLH8 z=U?x2yI^Ls5gHSfl0{+6b$q~PF-L6X78DHTl7c7%*04Bta9EOs5?LZ!Cn^pK2?hcHjE#9UdHYc3i1Va2puE3)4S|{ugeDaX2?quR*xB0K1Oo#E z*aip-4H4#9&x67%5DxC|@bU8R5EC((=@^Ax2YaMq01`mBq^Sfd1#FsdUmHDHWaxcPu_h$vRPW`((fvW=UTLynD{iGia< zP_IN0k!htsmJ_!;BBSFl2!RObPAm~4idP4sr2atF6s>}TicP~HXyz>4h!WD0V8W-R zt=qS4Daf5m<3R`jI~^Y$nm=O_w!yS)Mj$CM9~4Zeq5!841)`+Fr&gCSGaxux)ZL|B zHW)85f**w{DI7s0{h~NfIm?kwcY!J}_1*Q+X4v`>ng9wwaV8eSedw?<`e=^22jbA zE5w7cccz+wWJv%)1Cmu@P*CEpR6qx(3J_>4cgh7sl}#}aCE&qhRBm=yn4yBl!`Pw* z!2aDSLJ$`nXc$uQh1LQD*iXv^W1|8LtLCzSaI%K^sWeeoU`Ivc diff --git a/gifs/flag-ua.gif b/gifs/flag-ua.gif deleted file mode 100644 index 5551ee5930aba633b36b1e49ac0eb4bb9ed71732..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 409 zcmZ?wbhEHb)Mb!h_`<+&;J^X@@G7T(b|3|53 zoer#@6coDJ6?vQ&uFHA7X+?s};u%8T>)zMA|8L!#S+G%}|HP7_lQv!woh^!?0SxPJ z%ykg3P~mFyD)y0!&rr?VcqYzGj(3Gd;36T8Yir^PrB3W&2xhgYY7LKJZ*J=j=L%*N z&YhGZ9;BWcT-YQ_U+rZ ze*OCC)2G+f)rE$J0u{KpxQL63r>Ccfg@svKT5@r5?ccxO+uQs4_3K?-UE$&3K#f5` zLH+&xKtYC4Fd71bI|LMevVa|^10q3rf}P_(122cjj026$?EDHEF()=GbZ+C|Rg>^A zbUfJ1qnUBXBeAK4Tfxz*;6UNyLmhlNd|NsMn^-tSv`);?+|1a($Wp||aG^oXmy1_r zK}hC;1Sbwj0S1Nx3d{UwTaMOB4Mt->ydRuRssvhGIRWf-nJJ|36o1oC0 znA>4SZHMc`llycoHXh!hypL4D4dsH*`b~r_Y(jeA>nLV1g4HM-#XC?uYL$ zEe*UWr!V*0f`OH*MLFWZZ^w3q8=JH5_uV~wYbPUD$AA3=wR?UtDJ#Z&*tc!(@9!TT z@4v3#xcATRA0M+l672W?|IhN~x_kr6vF-Png$tHHD0?F~VFrVMo5sTyfwTz>P8U7f z9g0s&PQT-Kj`7$-MwMw9(*s2out^4ZF;2UhEuryMk>TLX&;ty`i5EojMQkoK1PYv) z!oX%$<$jGxB*RQOjmKnrBLg2>f+N#}&*52<@W1O|U z-leV9jFiT6d#y@RghEPtIYM&?5Nl&&j8am2F)@1p0AtRz&TBbZ=g!`xdz6$pTK~@0 zttmOqb9?6q5C8xGA^8LW000I6EC2ui04)F*06+!*pdpHh<2(EHw&0`c-4-^R)X4s#$ex#W~MS(#Q02>6n3t%D6s~HC5 zL~+1|ibZ1$4hZnTalipW7cJ^*@G1_(SSC`-tZ>89%>)S-V#bs}v89_8z=V+?1|dTh z0DDB`ns%$;1}+>XJdhF5!7OF|@*D^{bYQPT*WhVuur!#{VpR%a*y!aT0tEt%V6f&% zYEUW^QaBrxX3WXe?su7wVTi*%uaM-+M}uz-Oui6$mkfWj+asa?EO c9Z=xPBn=T0O-PVKy}I@5)Ej7rMI!_NJ3*B1R{#J2 diff --git a/gifs/flag-us.gif b/gifs/flag-us.gif deleted file mode 100644 index 14cb3665c52f0274ff86cd5f4b7cab21af599801..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473 zcmV;~0Ve)ONk%w1VJ!d{0L1?Q|NsC0=jZ>%#{Yzb|6^nSDJlN|0KmY&Qe%{al*U?X zrAk_iLQ;fMT7*JMdpSaL&d%?9d$mGBr9wirDJhIGF|8OFoV}&JYcW!sT62ssQqEd? z#wkM97%9#W7ytkOA^8LW000L7EC2ui04)F*06+!*;3100!Z^;Ou59bFD6=4=m{L<^ zP1fG?K8wddEENbV{vSqnC)HlzK=k6?)&#B&I41x3svsx)%rzGH4)RkWL?}gF}`j^MD~B!C41; zl!<7e)vH$#WTf~KM2x0eX9$QKNwTC#0t1*YYOT8vU!lu~1xS!1MHYo%s( ztaXFEgp9_Fme2qI00000A^8LW00000EC2ui04)F*06+x%5Xd>tF=Yr5y8qrb6oy5e zr@;|O;=XV!#|J^8l%WxG@4pH~;((hV4h2qt_50NZgc71CAp``irWR%)QURBYz>wX> z77d01G5rFL7^NV3VB7EZi$*Y#x{(|MWo9!qbYE5h2ZUP~28bJrj9N!u7X)*IlP?Qu zm2Pka1W+Y)cy~aZ3qoveMiycr8?&^uS92tFu3&&21a*uEDtrYdmO8$glTW!{$N>hM zJ)*^5Nzl?g2n9D(RsxdQG8d2DSIXiEM_xtO(djX3>^Okn@SH;PC`V%N;%E!hwV@Jf zz=&{!(5M+Q(3J%Y1R`=XP^ycm1VMtR(?=l!03rSkXK7}4X?kIDWG-WGZ2$l};;x6! diff --git a/gifs/flag-za.gif b/gifs/flag-za.gif deleted file mode 100644 index bb2991c662f8e3cd33d890e6f92ab93de83acbf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmZ?wbhEHb)Mb!h_`<;O^UM2t->D;s?=k+?StVt$wb$FaT1Mc%TbQO5$2qkw)X>OhMqe`&hpyS%8 z^;et47Rt!_SsY`I*f`_-3zMpa9g2Lh6T2?1FxNP@yzYGcnMdO4nq2%r5$zG|EUZxl z4dU?{+Ll>Uvki>;3KNq2Q>HCQ%jJwIEH1OIS+$y9qhWb@rJW$t)@|E&Y>#eG*W%yY z)^UiBy(hkZLQ^i+;ZD}`y|en`_a<6izj0I7BmYF>9B$Ush0|u#&-R%sF#pNa9HRzJ z9&Vd?j&HNxFO4-XDgSE6#vzB>`1r3pEtop$&E+V z134rlJU1=zoV5Fb?#7G4sa~6%kC|QTc*5;;dV0Hv4mlm*C2le1)q{Kw^rl)!HEvCNHCy-NZJk3uH644oj3NvkOEI;J zJMf=8aWb!a9v|~l$FiQdz{y`LGn|)-o65;fe0nj=jCYx diff --git a/gifs/gcap-leftbot.gif b/gifs/gcap-leftbot.gif deleted file mode 100644 index bcbbc85a1ddbcb82c8329c85162dede5232a10d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmV-)0E_=eNk%w1VG;lm0HXf@|NsB@_xJ7X?cm_x)z#I}(b2%bzyJUMA^8LW000I6 zEC2ui01^Na06+sdShn20AdE*LxcEx)ME#lcG1K?}rO9BanQ4Pkaca}nfm|DaxAQ%n W3s!rHMlXzjc1pek142QO00299o-@<{ diff --git a/gifs/gcap-lefttop.gif b/gifs/gcap-lefttop.gif deleted file mode 100644 index f1b6470b5f823a1a22937d555b191ab3b1e6e7fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmV-%0FM7hNk%w1VG;lm0HXf@|NsB@_xJ7X?cm_x)z#I}(b2%bzyJUMA^8LW000I6 zEC2ui01^Na06+sa2)e8?q!i<(xj18@dvC$uWq~z*jl+3McxHg`cH*q1Erc?mxdX1* TqGkgUi$|NxmPy)t%me^Cqc$@- diff --git a/gifs/gcap-right.gif b/gifs/gcap-right.gif deleted file mode 100644 index 00d8c261e29d638a037dec771629dce7a0605251..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmZ?wbhEHb6k;B>Lm4e!> z$*u({tj^Zr%NXDI&Rr?Pqg`7#f3=73QWZ_!GoLJ1vaIYke0pK|#eIH{tk2hFrdV?G cR@ZYfDE{M1&rB=NtV%3O(M!(HWni!d0FV+zpa1{> diff --git a/gifs/gcap-rightbot.gif b/gifs/gcap-rightbot.gif deleted file mode 100644 index f7ddd5ca81ce621dd270e01215f05acbdd3fd853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmV-(0F3`fNk%w1VG;lm0HXf@|NsB@_xJ7X?cm_x)z#I}(b2%bzyJUMA^8LW000I6 zEC2ui01^Na06+scXu8~5E~*iLBNXVpr5E0kb)hqq&0wL1s(Ho8u?#_rw^0PSu%ZRu VFC;6;UJ-(j^C}cDOC~1)06XWMF$4er diff --git a/gifs/gcap-righttop.gif b/gifs/gcap-righttop.gif deleted file mode 100644 index 87880b4c3e9c89b49bcb1910da0d01c128a0dee3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmV-%0FM7hNk%w1VG;lm0HXf@|NsB@_xJ7X?cm_x)z#I}(b2%bzyJUMA^8LW000I6 zEC2ui01^Na06+saXjL= SE6=P-EK1Q!&d+6Fum%9N

    uN diff --git a/gifs/gcorn-br.gif b/gifs/gcorn-br.gif deleted file mode 100644 index adfb44047564ad712980e8f6c13caaced1e5df6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64 zcmZ?wbhEHbWMyDw_{hNU|Ns9tZ{A$Ic#(mDK?jI|qO1%IOzczoCBzeWxfm4x@ug>` Sm1kBZ7NzJV=jSpoSOWl_w-bB- diff --git a/gifs/gcorn-ul.gif b/gifs/gcorn-ul.gif deleted file mode 100644 index e2abbb8d932384c48c6bc24be82c1abb7b09fda7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmZ?wbhEHbWMyDw_{hNU|Ns9tZ{A$Ic#(mDK?jI|qO1%IOdKpqMVcr0T^Sh^|M8_~ Trj=(_B^IUVCFkcdFjxZss&EsM diff --git a/gifs/gcorn-ur.gif b/gifs/gcorn-ur.gif deleted file mode 100644 index 55e19379f75794e22f288adc35c321ebc47b7970..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmZ?wbhEHbWMyDw_{hNU|Ns9tZ{A$Ic#(mDK?jI|qO1%IOdL~~5|&GIhchxL{^Lu} TOe@cU3Z&d%1>*52OU=jZ45_xH}m z#@^P}y|uNirKPp4t*xA#&b76*oSdzcl+LZK@5aWpl$7Vaz23F8t&EKK#>VHhwY7|l zt%QW{wY9Z`gvN}Fy@Z6ddwb4|jJ0cPy=!aEb91$0W3^gZy;@qeQc}HAQqEdh&Qemw zN=mgtLcKyly*W9(F)_Uy$A@#2ne+R0KEVJz`(!&00000 z00000A^8LW002AyEC2ui04)F*06+%+K%P)I5Euigw0dn;5eS1~K;pvf?)bcZ&(G5~MsWcI0ELE!h>41ehzC(c0uCsBl$Coc z3kGjQkVqUUGBtLVl{hsoApuWuJX8TEqolHwF%D1x0||_~yt@Sh0Svmm#KpgmBeTkV zC7Mw@aZe5;F*G;V*xA}R+}zkQEguR71#i!sa!3sl9w8p@@bU8V7!OE+tVBl-Cp62m zFe2cCM&*Hve+X+-2t-8!3>y$5N}NcsqD6=xZV5n8tRpW1R0en)xyS%8kt9SPNR0_c-P~vFa P%C&2pH(&`^4FUi=e6s2; diff --git a/gifs/gflag-au.gif b/gifs/gflag-au.gif deleted file mode 100644 index ff28cbcb6a36fa3511c3b7454a608b9b8317e82d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmV-40?YkJNk%w1VJ!d{0L1?Q|NsBBwY9yyy~f7I&d$#Ny}kdOod08E|58%_LPGx- z82hlxn02K$rz8wBgUe^94#-1CYjL?00OFZyQK^Uf>MoPcuXb-pJanTlqcM$#d*9$ zOkqf*Q=uCz8yy=JNfa6zNDdDJ7D;|c8Zjj_6mgbG7mY|11O#6slPD1s6ATIn5*Vru z90&&ms{-0(uh<1_%rk7!+v<5*c0v z2MHVwNEe2W85aZ(%|;W^5$Kom85kOxND*NsQ=7{Y7w91Y007^S37%p!*mpuh1q&A< zN}NbBA_j^UC`1_0>5D>8VpO~sNwQ?g6nJ#8kvI`RLL+TzGB{v^pumGl0xR5sA&D0R z0eqh^4h00|JfaUp0h-A*wcj18Mgwd$}q7TP7z00YHC2>_}wfUxb$g98XS^pU3p z1Jiso1c=3E1SYp5-_RnlKro;)zegfLn7~$`kqh!5G_4|Lu@l0E=UsqdA_8C|U;#Y1 zOwYm`Dj0r(Ie`-|#K`FeJZQ=(;lfD)CU8bg#X^LRU}UTu8K$@I-@to+89qRF2mm|I ChS5p@ diff --git a/gifs/gflag-br.gif b/gifs/gflag-br.gif deleted file mode 100644 index 1da3a728bdc973d88d92a53934225bef6200c558..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmV+f0{i_(Nk%w1VJ!d{0L1?Qz`($Dbd3rM{8L@$k*3w0sJQ@u004Rb1%U+(gbfvj z6*P}DUY%Zoq=Kx%teL8r%+1ULfC37G02qn@Je&Y{y8xWc0I;`=$m9V1{sG+FDYdmp zl9Fw_yu7ruw63nMA^8LW00000EC2ui04)F*06+!*ARvle=bc}wu57!WXE%!8$3#Z1 z>j#BpnSfwO6mWnT%3;SeEIcM#lX;j}fWl$`XqhahItHW^eJm2-UG>`irgMr%tn+Cg znpU7bQ!EY$1$$f*Qw%aDCk%IQIR_FH5^juQ5Mv~WDGdw@3JD0GprN9p2nh-c4Igud zH4JEPJwF;792-bVj83X_4+>MUdlv)41jPeGTY5>7I}IkiU~76CeMAGcgUmY*C5bqU zjunCxk+}v9l`;TiD4U!K@bU8V^9rX7=#^vYmzW<94;ly@NU)$mfdEyl8iDBn0|npG zETLdPTN4BeqzO zC(E+3I0WDzbXmxy`cx diff --git a/gifs/gflag-ca.gif b/gifs/gflag-ca.gif deleted file mode 100644 index 35810f078adaed99b6154589ffa6d38e906d1d01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 zcmV;T0bTw_Nk%w1VJ!d{0P_F<|NsB_+uPgQ+wZ!%y}iA)wY9CSt-h9)xqpA&b91?G zZ@*Pl)=W&tHa5Kh0l>h(A^8LW000jFEC2ui04)F*06+x)@JUIEH8|_dxh=#b6~^M6 zC>j945F888q)EU8EdVfS|CPPeN~b$G8jObWG$itZjs;;_F&t*SCQ%n~9Jb(R>R_1~ z5Kt9hkcKu^;-Df_A(^t^En|>(_80;JQxtU=2zL%zeTx8h4G0DwgCsyuifciaaVQOu z1XgW{I-6~LJ8cM`Mr}eWVTwf*}vI7Y7ImzJbWe%F71|2nEPg zB2<)C2V_*)+S^mt2N-386vK#2j0d=*DGg*GbR<`nc>@CpC-s_8?NzJtU|lH~>`J2m zgcU6E0G>DyCjmlOr_zu)6KaL4P$<4cgffRBD;;b-Fgm!QE=?*D6~Wlk7p4se3;i(H=&m76ck3tN&SPV?Vq&>M zLcJCiy#N5fz`y_i00000A^8LW000dDEC2ui04)F*06+xwu*pdqxuodLJFXyj6$xXW zr~$02fWC}!h16KWr^*5@ZX$yLtu{I+a5`4+wK#l+lFR|Nt6EnuCp3y7++GNQSUiP= z1p~r%($yRiiiPjASSSvK?%I+e&66#2GBZ$8awu1cST9RZCfD zmTO%ZaCM}mr3nWEXhC~KBO3>?va_-qdaZ45k#jJ2x0iiKnme2*O;1BbyDxw|yiT7q z!7pQC0an$;3wc|HFOyf5-H*%QR^pch!Z`-*1_D(9?(Iy3$s@}tn{x{UX`mRsFx!VC s468k%Ao0S{M9jffY(hy46{O;t2mm4e4rgg*cWHWIa%3)JZ*2eoJ8AfjJpcdz diff --git a/gifs/gflag-cl.gif b/gifs/gflag-cl.gif deleted file mode 100644 index 9b7d0aae2f7c07a8bca6da186fcdbe23294a62d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 753 zcmZ?wbhEHb)Mb!hc=n&+|NsAM*RI{Vb?e@}dygGEcJAD{YuBzlfByXa`}g0!e?NEZ z*u87lwys@!45(txoV8P?oLjqgZ%@zGmX>2cvby?QPtV@s;;q@)d$Y680U623dx0n_ zYHv``xu~dPKr$%kn3vaHL&LqAn#VLX_bMvxm5|sgAaG1TU@r&9F%FKs3=B(`u6_Uh zKhXGd=iX15vbLvZ?cTlbTUvnbdR|?1Fqq76o4sJ+qQ#3i`WdCPSFK*NcHR07tL0f(m|GbQtX*dq zna`WQVPkViRLo)w^l~w`_)&QwG3^M=# diff --git a/gifs/gflag-cz.gif b/gifs/gflag-cz.gif deleted file mode 100644 index aab960965ce0229a1a82dc37eb7164e93991e0d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmV;70dxLGNk%w1VJ!d{0L1?Q%Puk3KS0*Gy4fBmz`($;udrJ^eDLk`>gnwG_xs@A z<-xt&OGS^UrOu$Bt=D=G^Iiy9vvKmgoTEO9337CUngO2L}d$Hls`g44p(J15(kx^4<-egn-NEKs7Vu2 zqGLs;si_xudv9T2Q5pifyuH4^ym)zfwS1y3AGylQ%*uUXZhR*W5SkF5pBxIJFRc<} zS=g0cVBVz<;+3JI-=#PR>02C9RHW__3GqOo_3m=9b*8l21Ph>=08vEQvr*8XlL-Nc q!7(z&VVVH~^6a^F!U}*37Moni;9yuT7{;Ipsa(l2Of!@r002AjO11C+ diff --git a/gifs/gflag-de.gif b/gifs/gflag-de.gif deleted file mode 100644 index 116404b5cef736eaeb8199d372b77cee34e6632e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 721 zcmdUs?@JSL0LH)O(8D>oJ9FGjqw5FkAjJcT9TCWuQwxF)f*29z2!ugYBN*HpbGKpZ zz!eu;>k56=T1csjcL9_~yN zpundhz%Y!WD4M1jhGAKj<2bL^%kz975D16Ef*^>ZC`pnm%Zj3?s+!GaHBHlX9YTl@ zGEGw}C8~-v4JwK*%ep9fAoW#M?SWDF|;U?Qk%*)=2; zP&ls#3XnJTP+sRP#24TZ3o;g@ix4kD4C#WY2MegwVJ%2mTVZLQ%_GS|OaaoUG|Zct zR$@~O!vOz}=uKN00DiE43wi64w#s6kzrUX(;`qRo#8pX(6J)fXz_E^0`ex>qaywl< zhRmXF9quY2fGdnjAXX$G(;&9W0SFcshS2rOp z4cIHo%e1K>P*zce59a*xjr@miifxs|>-R2f{NC8PUcb-!^Vi+b?IOu+cdK({w~OfQ zoVPc&M&717Cwtm=Q0%dftPc)uuX9iFktXMzN{7>Z(s-mUrCMB`wz;nj!@e3E>wP!T z7tPoiuElu#Sp|;B@t)lB=&~)j>lD8J@XKVid_c*)yhIH|0?!le>%++y5uDB#x$(uC z==tUo?|;x2T?BRE*YyND@_ptkanAO}?pRDzt(@+9wuzDB3&}l4x zT(@FkyfZVs008f$rNF?zA^8LW000jFEC2ui04)F*06+x$@X1LZDcI=EJ1$iiUdGa# z=&1lekiIa3i4A-mDTs#!xfFT4Y1w(;Fty-^G7Qy+nTrfA(F)0=Z z2HdVUV@NEDV;qB#kT%tpXbBf5pJWATG&;z3C~Y@$}p#X7mylR;^SJq6?zWo>goYh>+kRmkD^iA%hc5jmh|=0osBPpAx#N@qyQ^VF(n{CAa{3nE@x?G QcWHWIa%3)JZ*2eoI|-hhy#N3J diff --git a/gifs/gflag-es.gif b/gifs/gflag-es.gif deleted file mode 100644 index f3f1e0060febe45d46f66c6108c63d6a30603801..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 406 zcmV;H0crk6Nk%w1VJ!d{0L1?Qz`(%0*Z}4D0D65y`TPL&_W-xL0RR60?(6{k`~~{@ z3;6gJ>+3A#(Y1;#)PRxKd^0Ri+QBkNC2 z>1Suqh=|S1%)Pw4A^8LW00000EC2ui04)F*06+!*ARvlgX`X1Rsw4R|$sx}(5=GTr z(0uPRr-tu97z`Yff#ney5QflM!-MKha9D#zjUxpofe0{rB9m&ee%+1OxBPSibz_y1cidNOzU}6kW z1Ofp9PqDHm-$MolIA;;-<~|9t5DG&C5)wJR8~Nq&G~#@yHv~bBRTwTv59LiXLf|AFNlps){v#r{OVv0%=bof=$3m9T0S{z$JlO{1;EkXbQJ0;ku A^8f$< diff --git a/gifs/gflag-fi.gif b/gifs/gflag-fi.gif deleted file mode 100644 index 26e27580d0c5eef728a05c72c2015ca365c63711..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 378 zcmV-=0fqiYNk%w1VJ!d{0L1?Q|NsB3t*y1SwY|N)#>U3Z&d%1>*52OU=jZ3|@9+2b z_obz^oSep#l)Z$6y@Z6ujEvTMd&YZv&U16tYirhHW8N__=NK6G5D@ne5dR1W{{R60 zz`(!&0000000000A^8LW000~SEC2ui04)F*06+!zASa50U4NxGqFHjsbMM`XZIzuo44HsmOkYN%7j2MxZkq}TO1xtsBLUA!1n_PDac{drW ztXQaT1_lLAqjOOxFau5m552y-z`;+1T!JJg0tTr%pL_^tf>Be3d!RQ8&@=-Hp4HYj z1&a$7nB`*(G!7c(>{b+%>h1Cy6KLGsNZ&aHXadV?-oD8imWEosZwd~~I@7PfJ!S!2 YA&5mw#<3Tb%7 diff --git a/gifs/gflag-fr.gif b/gifs/gflag-fr.gif deleted file mode 100644 index 86be0b7911160957f834cb737f885cf74e3f52fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmV;Q0bu?|Nk%w1VJ!d{0L1?Q|NsBJy}ic9#@5!>#;vWroSe0kl)a3MwSQc}G+IlUnvy$}$+006DEwR@DMoW0gDYn+^=t%Q`NQhTKcQk(!vlp$K2 zT6?9GoUOpXzyJUMA^8LW0015UEC2ui04)F*06+!*peKrfWS(fMu4yoeCa2AGJySrg z@46EGz~JwJlG%px82h&tC$s)JBt{2E~Q6p_Knr><9;+r36@nSNrb|8$zz+=x0(w!je0>%j7ZVp35>e9A(*y|D2nPj=j3g%( z9Gho_OluC?m~JK(6|KEoYd;VMVkQ^jrR3%DKMR-=>{_{+#19C%3#20HgB7HWpM-K2 z7VJj_Up{gSU3h*4EzM-sk7%_xJa;t*xz` zoVA>swUm^#jEudEjJ1S>y@Z6ldwa%nbIxmP##&m&Qc})BLe4ok)-f^GDJj+=A=Vfe z-UtZZ006+izyJUMA^8LW0015UEC2ui04)F*06+!mpeKrhUTz9y|uNqtE;b!jQeP4 z|5H==IXV9*DEb&A^8LW000jFEC2ui04)F*06+x)@JVToML6rtxjn`t9moKj zXsVvUvM6h;3STMT0MQV*EEEMp1=DaCkI1BQnQR~|LPViAYa~#L230i(RY(h_c&uCu z20+ReV>kx_+gm_@{(wTHlHkqn``-cte}jGlPzVNaaS93x1c5IwaR6P2ic|s&3k?mM znhTdyU26=brl+W>s;dkMXdw?mA8i7Ago7!3bZ2KkuxdjXcR<9&#>YXyP(l-H2%BWl zOHRwNd7GTs+S}aS-3(74BnASLCpzWklps$gTLLeeSuP5pJq6?D0#;ZJ_C1vhm}BH9 z0D%`*CUvop?p>{TwHj_&XyG3f9_lE)x)4U1$0cSQUd8%yV1UGoF#_=NC4z#TJ3?a0 foJrHbv6c}403rSkXK7}4X?kIDWG-WGZ2$l}wa21~ diff --git a/gifs/gflag-it.gif b/gifs/gflag-it.gif deleted file mode 100644 index fc04a72aeab44da6e239ee3211da1b5124799a3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 zcmV;L0cHM2Nk%w1VJ!d{0L1?Q|NsBJy}ic9#@5!>#;vWroSe0kl)a3MwSQc}G+IlUnvy$}$+006DEt(>i#l&zG6rG$H>dz{vsTBTZ2rBX4RF(I5G z2%HE2lmNiMzyJUMA^8LW0015UEC2ui04)F*06+!*peKrfWS(fMu4yoeCf3b#Jzqes z@46EGz~JwJlG%px82h&ty$s)JBt{2E~Q6`IY66&n2lkx#ES7B77d#{4D@ncX9LV^0I z)UzipAv^-Tz9y|uNqt*x!+oSfEJ zSk_8Pz5)Wkz`y_i00000A^8LW000dDEC2ui04)F*06+xtut{l-ML6rtxjn`t9moKj zXnF<<Cm$y^mIMns_r@L65dL8xL;Qoq8%fJotD z3Wl%V`F1;b8~xpdz6%vwY9aqy}ic9 z#@5!>_wVoTt*zc`YsL@|y#N5UwdZ?#)*&Ia7#OVp0Hpu`tx7`15CD|DwcbhqW5B?` zV*pZ|01(zfN&o-=A^8LW000{REC2ui04)F*06+!*;3kR*VxDNKu4yug<^s&LV$ib( z?R*b;IL1JMn=w!_oNZ9RMJyGIbPBaZaD;(@7*r?{rI=AWI0U#fMq|w=9<&6-p$%Xt zOkf1MSiE35JRKNR78pQ$dVjt2$=24y%64?a5&4VAP62WfborKShE5FH#E9Doj{N+qPwGf#xq6&chsieYFB z0tJ!+!D$i`Qxg)!2LubUscD)n8+mx3p^n>_s+pQz^f-0$1jdWOg9s6V8MtsnCs1_+ z)S9*rz`HV+jD&H;C<(Y)2FL|*kZYHNVzXq5)k?DwPca1rY|&_dtVb^z1PBzEbSF$P zN;GTQ3_^)jf_)bN^$;}W&mn4xJnfTEh?#~#gesJS>XVNG0)3)flTzVAks*k_oG2x$ z07xek#7?O|L0b(22HbA72oP2pa^gf5Sr9?r3^TLdl?ny09wP;G7C`#B4VA}yjbGGj Pv9Pn}&z%!$4gml=l8VRd diff --git a/gifs/gflag-lv.gif b/gifs/gflag-lv.gif deleted file mode 100644 index 789a6c613af43961e8bd670bfd223becad6ad92c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 zcmV;T0bTw_Nk%w1VJ!d{0L1?QmH-%*0~?nF8Vs#<#Y%tgEa4|Ns2_{QCO(^z`(=z`(q`yt%o# zw6wIbv9YeMuC1-DA^8LW000mGEC2ui04)F*06+!*AS8;~#&Mmeu59bBU3X5~D01Hs z0DSNNz@U(4prH=Kq;hzWWJ)*%W3a3S3keQQ4Ma0J3as$nArf(l zo^1~WaWD`F0|J7BgoT9z1O*HTF&rBj84w#C6bDpsm_!RS9UB;DprN1W?@H1@f|-4+i>}0~BoNav_z$Go(6XD0r|T8V&CJ z{ewfmL52w(6y%$@q@ojNNH{W~lOYnTHXINiNE8XcKmuhYZHT}%q2`908glB~$#ZAP M3=)Fcu@M3QJDkz4V*mgE diff --git a/gifs/gflag-mx.gif b/gifs/gflag-mx.gif deleted file mode 100644 index 8cbdf55b4c3b2037a0d732b71d506379030c992e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmV;_0W1DTNk%w1VJ!d{0L1?QU`0m2z`*9^=Jxsd?(y-6tBU}?00_Pa7`+%`wPNw| z@i(?Lsm!Qjj#=#R>fPSk)YH)a006cF1N{#Vj1CR-8yo91G~{7no<>E+iHN_xzOu2g z|NsB~{{H>_{rUO%A^8LW00031EC2ui04)F*06+!*U?7T`ww-9Iu57A};+Yt9ZP#2* zY#2phkQ`?cDH@MO%f_^s-JS*^$D@EaJW?WZdnuJpg~b6%lbWU5V7r@%-w z8a+yeQ5dGVFHB8wQDjUMP|X+}$7F z;NjmM6Xl*37a5C;*N%^n1@ZA-^z|AU`1vYcBZ85^Po$yw14AZ1fW5k zWz_!E+;}s`13NtvJP;CeONB2d0G?Vn^Unkg?4T*6+SG_5cG&z$l|z-Fx~worxUk2z KZQHaV00280oXc$h diff --git a/gifs/gflag-nl.gif b/gifs/gflag-nl.gif deleted file mode 100644 index 7a43023eb682826bb194dd2a250f390e77e00190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmV-A0mc4DNk%w1VJ!d{0P_F<|NsB*@9);u*2c!hy}iA)wY9CSy|$T~#)E^_T3Y8h zIsX6v0s{YEU*n97-oU`XA^8LW000jFEC2ui04)F*06+xQ@JUIEH8|_dxh=#b6@~zu zXsWJkiw2+3Fm!F-c&^vYFc1~PL9r+rkI1AliLd|-1DA9<6@)6J*>20FH3R}51&cu> zh|Ba+(fj}(Btt??uOAgo10g`|`vE_Ce1C*3R#;kHid$blV=;+~I}Hv4VLl-fKtUJ> z2MC~{qNAjso)}JV6c-0`cCSVX2dNK1L$J6=vmhh~xxYtE1O^3zg~uoZBm~IKCsumS z%~lr1(tke|2a?=6P}y1C;*E|#ACcla4q%ufs~;en^7HiaKKBFe5db0n4rgg*cWHWI Ma%3)JZ*2eoI}#6pR{#J2 diff --git a/gifs/gflag-no.gif b/gifs/gflag-no.gif deleted file mode 100644 index 6e401a5f12aa7885e84dbc6e298c2227e8b21d53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460 zcmV;-0W>NsN=p9-2>$>8|0yBoy|wSw&i~%dz`($qrRS}+_nf8gN>a`tDb9?HwUm_S zN=nuc5WN5Zy#N3JA^8LW000yKEC2ui04)F*06+!*ASI3@H3(>+u5616WgMS@^4vH? za9&0lnn^4E|0f*4VU~ojz3=PMP+516*kOPWZ6$t`@j%UqoyWj9>Su}ky zv=6THi(5z}a&vSiX8{Kc4Le;=K@JcN320-2CWQ)kTZ(&pI7I?vRfQI#q@)=h9Tlak ztQLWxDiRa3v=abL0JXZi6R$^g0tri+UYs`xfS_|zgf)H`9X<>Y)YT0P2m^nASqu4kc1|0+AF%-O0;Ul6PN-idB;F5W? zg%M1qUbHkaL=y)X5=D1J4K7&$PHB!p6A^s`1Xd)Aa~5C-2M!dU6B=a#pQWay6A%w@ zCs+$79tg4s3A72dvbVDcQWIehPfP(N7Y;oK9u^c0VVxCK1qOo?fqsV-6Bq};Ly2?O zkKs`lasdtEkGGOV4V5knStrezHS zk_I|3XvToS1_K5(*Z~KHf;u8EaU^RK(U}lv20RdnaEn@z2wuApV~P$N*(crttSieF z63;nd+df$XjzR!;Co;-yi2=dds{<7+YEWn|ln56FUU@;H1;fXXBR{r6c>v=O06VEw Byo&$; diff --git a/gifs/gflag-pl.gif b/gifs/gflag-pl.gif deleted file mode 100644 index 6561973048b068ea588720e1e83d3263ba33dc95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmV-x0hInnNk%w1VJ!d{0L1?Q|NsB3t*y1SwY|N)#>U3h*4FRu@Avoj-qzN&t*yqj zwY8L#)~&6zgoMV7jMj{dy?cAkb92UPYuX94_zGfEjX%`5xon-+|z#z_` z1Cj^X>A?E`fohjaqEyDJbvoH%M>NFPRPS2I+45g;u;Vy?T|=t>gwo^C)0V2cJyH&3 zSg0LY@@<6#4~OdEho1Ll_4BlF>Zsi>v+YRDE98(*H&zN;bn}iyWjYrVQ=Cez27A4~ zV3P+AHwT-3g1CuqL!hv*O@9>k6qek)0v;X)Mll91`-=JQ)l2gDgToRydAUW`Z*Z-y z?U~iL&y%CgP&~oskRR{z3(F^j@^Eo5x5b_8NYrG%|KL8y<0ns_J<-UXrlQ{6V1CqX z(yLP@$?pS>eDumP`1U?Ht5EAw^88tWZ1;RuB(OU+v2bvF`?NGIOxcf5YQ-jj1V?87 zk12PRg;f_bgfjTqHtK9^XFI??r^DgF7lmX)w$ofaI;tBkyTn^;otyD2ZN8w>ttnqG zcIL;=a`H^QQq9QRb9HsZ=BAH_N*k^SFev_02ue*UO-@ZwFf&nAa8M{OFV{=YOe@c< PN-RpzOU}<_V6X-NTKu^{ diff --git a/gifs/gflag-ro.gif b/gifs/gflag-ro.gif deleted file mode 100644 index da85d96a4ad3410562a1550a5bf2c67ebd5a5a0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 zcmV;T0bTw_Nk%w1VJ!d{0L1?QwY9aqy}ic9#>TC!wUm^-jEuE}guQcf#!^zfIXS&4 zDZLO7y#N5coRs&@O2)>7|NjvG{{YV3YtG(tdz7UyYn<oSdbtgp{RHd!+zMln_#! zT6?9yz`y_i00000A^8LW0012TEC2ui04)F*06+!*U?++JU|wjdt}JT;!6*V3r`>pd zOHuFtJ_ln+EDjZ~nr^A#0iO|}af%QK0;LP4!rVch(kVkxFkvs0uFm-lil>KI$zR+Q8yh%xZDB(T2?iH0SRFJaCpKJwkA^}!{U{O{Q0qm8jEOQI@wswq4gd-mbIb#xj*K!}%wB|R#sGS6%r8<5V^X$ybuq+54sT&6Bl<-kRwri3PMrO(9zNzP(vS%$+A-(78@Cu z;9D6SCeCdr9vt7{>|7fiLQ@MH?e$$2LLUhRr~Ntu2o`W6;IE)4fd~j1?6-ynzlEj> zJTgH6f~$*69u!;l2BXJ1#~{t}Fd@RnIT0okgv>U=O}r8?W6GQf?Sjo%BSHWGJM`tR AF8}}l diff --git a/gifs/gflag-se.gif b/gifs/gflag-se.gif deleted file mode 100644 index 1f8031ab1af3028191b420e6dc0e53c7b05bcaca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 433 zcmV;i0Z#r$Nk%w1VJ!d{0L1?Qz`(!&0RI94{sRO31qJ;L4f+)o_be>!SXkbJgTh>3=ajEn^a2ni@N8W{k74_Q!YcSQ#cV;vV0ZKbAa6@H_q ztfv-LCkXTX3<(E=1;G=;#KFeL#s&wGdQ=&?d~rA*3p8RbBN bW;SiiGcjWW4KhfRDpmUISxsmnLI40e1roD$ diff --git a/gifs/gflag-sg.gif b/gifs/gflag-sg.gif deleted file mode 100644 index cece9a4b858e7050447c5a0819fafdefbc4ae091..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmV;30eAjKNk%w1VJ!d{0P_F<|NsB>^Yj1R-PqXJ$jHdOy}h-ywXUqJ#D#_badH1p zQ0z-f{1OuX00951tH8j(A^8LW000jFEC2ui04)F*06+x)@JU&WJvi&lxi!Tk8OPF` zCnEsNnIz4N&U8&P-!TAu@BhG{uooZ@3Y7zb(P}sVrc|P7tIik*3-VA9c)#GVcuWot zLKVwy$ZqojgMpEf#vm4qg+rjAT5U{N2OmfeBqdY|01hV$Q4I?Uf0GP@1xkJ>3IPt8 zlb;O;mjwZCrl$aBX#}XPKyXKNgaZM!u0FMJaYnHdNJ$w8!o$SH#>5#~g%lTv4GgtS z44t5WgCJ;!R15$DE-)tw;MG@IAS6py-Q?_9mj|ATj13Bs_3TxHn1TGy_51(>3KS@c z%dLYx&R8gg@ZgaT3>%`7^H7aMQ?Ozo`9L7zMIr(bcJ&gGhS0B*C{v!~#Y@D42mm4e mAW~&ybz@~@AT&88AV45@cXuvlX=Zn6dSP;8E@N+P002AKK%&$D diff --git a/gifs/gflag-sk.gif b/gifs/gflag-sk.gif deleted file mode 100644 index c7d9c5b64d61b0a185670350014a8703882a1082..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmZ?wbhEHb)Mb!h_`<;O|NsBr-@m(;ev*S=r2 z>~?ka*82L6)>S9s6Q;Q2#zbv?ZKr#KhwCT{%N_;>ZiYf3o~{E24lv*Via%Kx85qPF zbU^YTI~`d6KTz#^QmT-#XkAXXQmV{+Pv*Plp6DFh;30fF*F(iDz)0wJN%GHs^8%o!~zhc;f826Vsa6GkAI&dTw-aPuLuDIfK*3LHNnjXF}F&6QU-o-aoeB za@6N96OV1Wd+z}U8`Jv#3>*t)nq|&1G++>BvQYMpl4kkGpy6>uYob~!1J4r8Wsj~k zbFwP2MHn#7Ft8VM2rb;g>dq%?ZTrQ;QnKg9tf=ie9xqB8#9M7mvY!QCI`(8rbYRoJ zjSdANU4=VqY%3V9&Iw)3t|aR6SYdX!Ti=bX#vM%u&#k|`Sxl%kiMpUc2t4FGF*#U}s& diff --git a/gifs/gflag-tr.gif b/gifs/gflag-tr.gif deleted file mode 100644 index 25f1d890807cea205821bd2f695f06079b309ee4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 788 zcmV+v1MB=pNk%w1VJ!d{0L1?Qz`(%&009010{sI6{RIX34Gs7c6Y(P>|1&e{F)`&y zN&aSL)mvNFZ*TsXn8bsFy_A&y%*@fTv9+P0wXm?y&CRW=tGBkc|NsBMz`(q`yt%o# zw6wIcva+tOuC1-DA^8LW00000EC2ui04)F*06+!*ARvm`#&Mmeu59bBU3XsFC~_Y& z1bok9z=*>~3?LB2WP*lbBzcbD@QLIdpFBk+Q^G+M1*~|?J3u%zjpspl0)gU16zHg8 z8ybM-!lCHMfJqA#gc%}Sd>$4L3<(AW1d)=Hl$8Vp2MP}{92**j8yyx5VMz#Y5kd>A zfj$WoG#wBIPZ2>2SV#^L3wBr!p|ekOytxj$LcU24873VK0$6hxsmIEI4TXm#d=w1{ z2L|HfmA**Q~6vb*z_| z2B99*ByuySm1!`4O7x)86w6$zj`+l4KthIs6KJiZMzUm&0ur`#@iS)CF$YsyX>kXj z86OT0LVCq=z(KorHbiW=z?a4bPZ|OX9!yy9yLW{KiUU$duV~h>sc_6c{KVi=?(% zh!|AJ;9-N&qezn~weSGZFLi_tJzxQ3;;S4Go|dHaz=kLyDlQPyAQ7LC3cn~>_z{W+ zrvwFYtzr@ZDF6chovK|NjO4{NefkpW(oP0}Mm}#h)yU3=F~yIv}+mI~`bGJy7Xl zP87>nwN58n=&*(m>!Ldq>)zM&tFLErcG8jRKe1%f3jq$crA>?zKSZwI-g1ydS4Zje z28%NtQ+*C^w0gQ&T( zyL;_8q7Bkag3t6u#audlrG?!<H7N<&1`u&Cmqkhhwtk&wv2p!kn3Ju|I5vnsJDMK3u&mw~|= E0QjDhxc~qF diff --git a/gifs/gflag-uk.gif b/gifs/gflag-uk.gif deleted file mode 100644 index 10ca7c51aac32e13fb4d913195ba306bc7ec4371..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmV-Q0=4}|Nk%w1VJ!d{0L1?Q|NsA`rKPQ{t-Zay#>U3?_xIMlz5mY6#)O28)-T7amn&#hjnDd{BTz00$5c4HOW7m&%0%MJFz7ID-a_h5`@> zIbcx0LPIngFjydfYK_5FtO8ibK(b_p00a=ns8mTHfXR{;0-$K~(NX{dMJjHPMN3b< zQGo_AIMK_E$YIdrRIzx^=Pf9~oDotAU_wl50y3P@*DPWdeiP*3JK`)8Rh@n^v@)S! zoZE2a04h)rp>Bk^bM5Ml;D*t*zknYkDB(A-;Yfo`P@qwR-;g=VgcvczV}hZ}hm6L$ zU?WV@0~I#(48_3$KYtI%474Ml;0bvJ=xyp`XY?{Z`);6a5TRowO9%|ulQk>yQ{tow YgiXcf1&J0kqf4J2eT{Vj&O-nII}$tj>Hq)$ diff --git a/gifs/gflag-us.gif b/gifs/gflag-us.gif deleted file mode 100644 index 3171403c89386b783d3ece2ad762acdbfb73d3ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 zcmV<00VV!NNk%w1VJ!d{0L1?Q|NsB3t*yPiy~f7I*4Eawt*!s(=fU2k zgx-vd)^l_JgoOWNW9L#*=Q%m=F){xsDgOWfz`(%w|Nq|J@066SgoLe1O0_~lwJ9m3 z5D=WsrM=Do7ytkOA^8LW000yKEC2ui04)F*06+!*ASH@IVFqZbt}JU7!YCF&rfr41ei53A3NJ7*GyxbJ ztX^KMus9u6v`}taVwgR04LYQ@IK$PHP83`ow;&_oQ7F@l3844i)3c@umQ z4+{g3SJjeQDO?!q>k diff --git a/gifs/gflag-xx.gif b/gifs/gflag-xx.gif deleted file mode 100644 index 7b318425be38c741ece4edce1c0921ac4b100424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmVCNk%w1VJ!d{0HXf@t*x!KwY9yyy~f7I&d$!(*4EzM-oU`XA^8LW000L7 zEC2ui04)F*06+t(c)ENN5Xea@3@zsef*4>Zj^y}Y+QJ28>yjxWaNYO1rx!0leg7uG zPBFX8fF**VFc1!jr-^4qt$wOKm;+iqZ+N%=7>-r zfVMJ478isU6k&9AQ8i_3IcP(IUU49gk!qAAVQCVLnIT1-0G^+fi4B;gB9Jj0q^hSf fMyerxv4L=ZPYD1!y-{Lw diff --git a/gifs/gflag-za.gif b/gifs/gflag-za.gif deleted file mode 100644 index b857202f196d7001b4aac7271aceb64688f3809b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmZ?wbhEHb)Mb!h_`<;O^XrFu->+S}cKz6~<9qk+-MV$_+O=!;ba!-jw>4gF^!ngY z^uKDxKb9vq894uQGW=%{6XjxJ`v0GS;fIc4Ow6;g{6A~|FFkPJ00R!7_>+Z^fkB)> z2P6-&(}DH>1J%AKt|BWIuFL5bOO=_=cFDkhp8kO+{|_h#s48FNv$*TbxWZ-Lg%u)R zl002*vm6i3_SpAegM^Lc0*)Jj3)wQA^G@xk`RB3V@-ktqi*tT07iD5%F0ZK6WMj8a zPPSub({Ig;;_`~^nURuSkV@AW)jyV8MdQ~i24{b_&9JGN&r6Y24r~Zw*w@zMOB04+MiGe}!pF&V- kN@;Rxih_x$s)B<;d3m{BdS+UAW>sQQie7SlE(3!#0Omrz0ssI2 diff --git a/gifs/kick-bb.gif b/gifs/kick-bb.gif deleted file mode 100644 index 7f4ea30e36f191d591d378553c515df94166c6a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89 zcmZ?wbhEHbz<>^j0aC-jEW)wt&OeAE(%t5~;$V_>V6=Gp#(cDzPX$3`|Tej0}qZ_|h}e$}_7Hi&FHG^K%&( FtN|$T3*G<# diff --git a/gifs/kick-bl.gif b/gifs/kick-bl.gif deleted file mode 100644 index a15937b618014c4bddfcadadbe71797ffe97f6e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79 zcmZ?wbhEHbz<>^j0aC-jEWyF0=)6?t*@Bq2 nM`!A;mu8Fe5})>XxhN-t;y=Fh%(U{%s>Grcz2y8{1_o;Y?OYp( diff --git a/gifs/kick-bt.gif b/gifs/kick-bt.gif deleted file mode 100644 index fa49b42890e9979474f82cdfc9edd08c59988b5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70 zcmZ?wbhEHb*~glY4CA2Lc1h?)S@_m3|5&@SRmClioO&`|;8ZhMiX3AALv&B}zfnS9|@gHA$W?Fe> PRbo+!UUGge1A{dH_*y3} diff --git a/gifs/kick-close.gif b/gifs/kick-close.gif deleted file mode 100644 index 07ad64a3e263c6aa9f3357c1303750dbe2052960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmV-E0m1%9Nk%w1VHE%s0P_F<|Nn&W@LlKUQ{LWE)6-1G#zMWlLbbI*t*tqnoH>$` zF>!GzPfr*kA_@Wm0KmY&A^8LW000jFEC2ui02Kfg06+xU@X3i*Ywj*ICr(0WIHW>4 z#y}iP_8b^<7zJSyg@GhYc1SSC0uTs<1}dDP*Z5%+Ho>TLN);-u&ZBb4G&b6f0`pDO z4hjZYLCFvTEmScuZ5YN51j#lK6ip>X0xJn5dJSfA26J^>c@uaI3=0Yg3JYo(Y+(mI zC!Y>7VSo#70!cVLB@;bE1`7ruMglAgouLmc3r1581px&o2v@Bb1xS9upTC1>UJeHY zeZZj1D<)r|XD7ePc?PNr4?PTb8+}I=3kflhBn%1&2lEFz7OPsfpeLde5db0n4rgg* QcWHWIa%3)JZ*2eoJ3%^UD*ylh diff --git a/gifs/kick-ctl.gif b/gifs/kick-ctl.gif deleted file mode 100644 index edc95710dd63a2ca988772d9bd9a0f593edf6791..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 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 diff --git a/gifs/logo-amerikanclaris.gif b/gifs/logo-amerikanclaris.gif deleted file mode 100644 index 1ce30a34ae847a29d50e10bb63594c940a24741f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2217 zcmV;a2v+w;Nk%w1VZHz`0L1?Q|NsC0|M!%XjHRWV_xI;QN-@30t!r~*F*zys|M$+; z&PrNJ7$G4sLQ?Pd|6_B6oUO)`rPh0ly;5V8z`(#`bFE5JghEPtIYM&?7;^{^N(dN? zT4S{k5EuXe2mk;8A^8LW000yKEC2ui0KNb)06+!*ASI3@Ii07au59bRa4gSsZQuBf zPG#?lDGY|;`52GLq;kn@I-5nOXG*PFshX^I%k63zj7}%pxkjI8XQy#dok|mnkddz2 z@6f7POzwcQ85>(0goTEO8ySj=j9YtVc#(AsZai`rl4wx~0RaXD3IPfq9i0TBrvU&9 z9|WcbADp703JVAd2@VSn000UE1P&O1xDFP-02Ubvy#&3zwEzwd2!0&}0SN>hN1O=; z2(F_azo)t2REUuB$B%qMFuXj9v}!*ySgUyH+2;|}NC4SHtmKqJkRevnN}94~ zjFm2o5HXso$jim7Q`9!0WZ{j7OB~Zi=@6>ZfsY>+0Pqy6QvzXT|03CTpd2(N8GL91O#C7v;ftC*A5;?mDCLw?R%zvxSZ1l^mRxq}C6y7i(U)IN(in#jQw^zRM?s~CmtA&obz+-p z0R$0QPMs-Lj%(hb9Gh6R1=n1F(3JrfduV_coe-{p=aX~vX%B{4)t0DThiX8VA%+r) zXc<{angntbM!AouR#71aO_*k?h-ruv!pMkT0EMa~M~-<3pP3v$oPb6Q08D}g$P)kp ztr&=G0j_{ETz3o>z>5RFF z9|QwPqd*1`FxZSU258`bD)jb}fC3B%0Dv|IM9fJq1}HFq2gP=x?#t|W*U13stkXfn z`2iq+z<6|kj|EX8-RDd-afr|Y2ZY&IL=fpC6`Bo5r9n?KsY(h-w_4Rfl4d=rkJC^f z*0vJd(8M7@Q!jAA0zxqDP?WSz)Du8J72#17Bb_0*NSYAtb`oqq@vn?<>>Xd9EY75p zO&t~h;^sLa;FG0+TTwRus!B7(WRoqq^k-G8Zg{!pJObq-iV!L;lt-f*fxrYzL0%?H zH8zCL@WdBy{PD;qul(}NH}5=|X07ylStzW4^_SRZul@GicW?EW&`$xZPNsuENPT@?r}CL$4wXg~%UpoK3ok#=YFKpWmbKK!NS01(5> z5ehH>1H?-J1~^(e1Q19t1QKG0Nk`4lr2qw(3jzu-00$1m0SI_<0;Z9GCo!Ob21pK7or>%tso)P{6e|P%-z2gO1yz zj{)dY3;Iz1!$bv0&$`_9j%m6AXdfu4JV)^x>I}yd^uXs60EPjXuE+?=eAlr`;R$ur z(-rK9OabUnfM%#70Sm~CG&0r;OiH5y8Q_4(8~_Xe9DqIQijF*1h5&L#G8U1c#|I9; zAb30j9k@uvP7&lBQiQ^2D6CPG{1}r1h~oeYs26t((+UN_!#>99gdrJJ3*vl-KH`~1 z1m-i1_iT)jz0d`GZUGHH;O3+Zs7$jclc0==qXWVrz%Ae*&j3uuG4$jYgcuOL6GY@x zbrOhjURuH@*0UtVK0uPvg-^64j+R8QzN2m!mG%_~Z z3M9J!(DmGOVImNYbbuhrv1t>Kl(r~dfUcR~Q&BWj6N3<>00;?FOIi}8`kJbg6tT!1 zHG+|wx(#XdsK)}+(g3tkh-v55AL9BI;3EX4b(izd)FKjx3QxdPAVNS+o(nh@5$z?8JH zkZCTY99y6k;SO<*a|2;j05c*wesDy*E@Hq^BtSjM4OlI$i<(WI+&S3oNPs77!at-S zWF;_wcfQM$L*&3gy@dH(mn(DZ1h{536$Q(aGNtM2mpTii2`P8xkx%ASL5#$>&1O3$ rQjFp(zShop1<%X0rZ>&$PJ3DeNkW^EEBzEtoBGtKPBp5<7Xkn~lNF>6 diff --git a/gifs/logo-arabnet.gif b/gifs/logo-arabnet.gif deleted file mode 100644 index 19597f654ac455707dd06747eb7a4234f536a6ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5890 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 diff --git a/gifs/logo-belnet.gif b/gifs/logo-belnet.gif deleted file mode 100644 index 6018caee12656bf878087718bef8173c260d0ccd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2967 zcmV;I3uyF5Nk%w1VZHz`0M-8h0002I00E5v0sR64_yPlA0Rrs^4Dw=S{Cs`g5gO?m zB+52OvKK9W7AT%zfKo0^z`($ej+0qdn?pi#XlI}&D0w(Ihe}J3TU?cMcBU8}VqRf_ zlbE-)xy_-d#Kp*|_y7R!007(o06PEx{{;a80Ri`a zfB*mgA^8LW000mGEC2ui0KNb)06+%+K!|Wi9IjR<)M;sII-k&}bV{vSuh^`1dtIKA z$5nAWKAub@(xVX25eBxnd`_?17?ynKlL>iD92pfQCm$g)Gczk5eEFT;m9Ud7L6&$`F6%-vE7Zr>W#T>&O zA03X8E-{y|)YaD4pbTC|swDzB*qeB~8Wk578NeDY77{g#85xWo73R3cyB95pDjzD4 z)4~ZHNH7zDBq+?7Q1KuDj)HR-w5ai6!@3w1c=@S7BSM5g9+Wk+wP%6^3?F8N=+mM@ ziVicT;n2}TM}Pu01PCY~KnJ-0oITm>Xp=){oB%s=+%&plhYlM(aPELeHO>GBEmE8! zazsg!2Miv{5deV32ag|U^oVfQqX-ZzJVxjMVnmG}EJSShF~UWU9yDsy=-}dmU|}38 zbik0IgRc-4JXpBUp+$%mGg|mKT0qB6oj!9U4G^HFj)zU34%Ok*sSch3Y_N$F)yB}y zr&*I0dUGibovV`$bt-T{1P_wu z3=17lz`+L|P*Beaxg^s6*gxyF7f@9smWT-s4V03Q5UL~?z)w{%a7zXkP!K`~wS=Id z1tm1rfdqMU&<6(?6e&RlEF3Ze3>~aDqKQyO8HYBeoS;Gp51dva0~(ZL!7LsWbHRii z@PcEK6KGHoFOji;0R^*g&_W9y4ED&AQs!CJ0x6`hA`;F`(12KV1ONbA0058{03Jk; zXrd#q@F)!+_%*^0B3wEG2tWKF*bf~5z(S`I^il&09sub}WE}8v0dn1WfM-G1=}F=O z99*VVfd(R>#2HM0#XtfE5Wq@VZ>DOgsnOy(Q$U@4o!@>+in+2Q2Ww1Q%@Z!2_$H zVi@z5(Hw#xJRksRIpA^D9No?e{%*hQnDAm9O z3KM9c605Ay#<|!m5FwlyAd`m$w^SfcJsO;_$1o#5qh2)avF!5Ho)C}#DFd!3#KUQ@ zkpmnMEimc_7o3CitF)ZjYDR4G(E`Xbyx;+dlCWn9)p&n000Rp{V5J&8U0l@xw9r!O z&>SV!OPFGgI!qvWwA6wI$eBEA-k8^M!w5?x)MDTzE!93R1rCg$qPLgGogoFrD(q4?Hk}4#uT}AdG+n)D!{?Z~#t& zLDEWq#JU;eYD7J-!E15?n>iQ-I8Ome9CUJn(o9SMJ!pz;SThv?%E15*(3Nt!at0GL zgl9Q9)Cc}z7Z=RsFFh!Wq!L9b5Y#{fROE{YI1mBB3`S9c;eZ4

    c1gL>Y~#M>=Zf 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 Xkt4RhMjbd3l@gX9v<;6H0kGwNqIf7x diff --git a/gifs/logo-borsen.gif b/gifs/logo-borsen.gif deleted file mode 100644 index 854eba81ecd7ba91a3795f448ac6dfb2b3dabe0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2067 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 diff --git a/gifs/logo-calinet.gif b/gifs/logo-calinet.gif deleted file mode 100644 index 7f68efbe8412f334c952b413ef40c13bbed9598e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5448 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 P9TIe&CAdN$fYtv24HROE diff --git a/gifs/logo-chek.gif b/gifs/logo-chek.gif deleted file mode 100644 index b25379c7f85d1b42616d62e6c753670a7f5092ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4175 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 diff --git a/gifs/logo-cl.gif b/gifs/logo-cl.gif deleted file mode 100644 index b693559403f362b097561b1a827807918d0dfd65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2311 zcmV+i3HbI$Nk%w1VZHz`0L1?Qz`(%s^Yqx*+0W0=jg5|$rO7ZvZ%1B`P-&laiMZ+P z^DRMZJ5qv3VU=B8U%|q|uduNH|Ns8}{{8*^`uh6#`1tqt_wVoT=jZ3(;NUtsIvgAv z4-XFr2nYiM0{{R3A^8LW00000EC2ui0KNb)06+!*ARvz9h#*aK98BxJa4gSsZQppV z@A-P9r;<>JVl5U70%Q=FM4r&7bV{vOC6WmxBd}B`0g9ILok*4gb@-I4j&v45Q`2E0+=;CeJ>5<9rQWPpFDt-(P74UP2intFL6tDmcfa;V#4U9y2@Mr6ifB~ow zHc~Yp(+63oGE}+*5f_AhvKDTD1?z#qO%fgdS#YNh&4dC8PV6C3Bo71&Ezzjk$+H?e zbmn?WI%jTZ&z?Yi?#yWg!vmNyhY+dv=ZFCZ1e81&AOORKuVBN99ZR;X*|TWVs$I*r zEm;f?9}vJ}z<@9yQUM?^0!S84riBn8>;U0Gh6~It5D=g-;l~VNv{V!oV4JFk4>4fC zbRob1S&=7L_{f9;+=l@&IPy&3UxsIZ4OvKVccvde5B|nBlqJBZ4ID^nfS`E*C=Uck z4M*q!)(7Me5aRm0Xt^c=B1J*qu;@~T0n!}^2w-8uhUCL_1>F7X!HN_I>K+(CfxQ)e zs4zfE6W1_TU7JBrnHdwvWlJLuY4Xwk0|VAUT4i9MBEW>>85qC?oHdh0CxSFHA%K_+ z$dY|g6mUWVd(_lI0RfO0g#-^s=Ya+^b}(H(6IDmRaf=Bc5sj8CrreIt$?|}C1aL5% zT#Gbve(>YEg}SDOiZ1%kn* ztWMC+aO0h!h6Mpsf*eSVXj#wv-~kNv@P)+?5|m*a-%gg`pin8eqz1yHHF( z+c0%4wkpOif`LH>Bx}~$7Xgf%fo3I-JR!-9d8Kk^7nFQ~$}F!;GZ%~@mNLl~IFqtw znuRf9y9&H_YB9%l3Ti*OV9Oo>x{F?hd~P$$<*(>GW0Y<3iEVO{YO_G~!zx@*kFsGe(N=j4OD)4~-2S~sI8t{M!OrQc6$iN0Vuz~cr zlLX!8zxTnf1&zv}1~n?hD;PYrRi#o4h(%Ub$if!7@P#mpp$un8!y4M~ zhB%y|16Tm4+Kg~al&Ta~3KKnNnBjg%bec0PP&2v2CxkzwNj`uu-jQrU4~zpaTSu+GU^y3S1D$106C>Es--a={$ftwVcQ$f>tk9 zVE_+fER_mSC5wDu3=zt4gs-xpwNL z5)w1O0*(RyLJ;?x1n3eXwNPQ@D+LAE0~V4@g_09t4Q1HEnv$2eJYv z?KZL?dg8`*N#sUw)gsdRb z%ytRjryXk=7P|9nd}_Lb^%m?hY{xrMJ%u6NCM!JMq|6~MRrkE7n#U%OG5y? zARArbI!kW;I7xKGIZ{L-q;Cq6NIEH+31A8!c1}_dNPOfGMR0&_2`2Cr-86vq39n<1 zZ4>8qngs$}XmsIB7lc!%yN5E^ohw!ylP==7!pN$eDMq7WnIZuG%>)G)%w>H6O;7~ z1(W>8%}O;)%@%|SBEkjECgB8J7Btp7WA!^GnNXhl(-qZZMbCbgRi4S(ruF@9Dq5+Styvwztjg hZhQON+@9bBNth>@fcxC&PPe+(&F*jCiG(2l06S)8@^b(H diff --git a/gifs/logo-comnet.gif b/gifs/logo-comnet.gif deleted file mode 100644 index 90daa721a3e2b945fb2f822494c35b9144145380..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2934 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 diff --git a/gifs/logo-cooper8.gif b/gifs/logo-cooper8.gif deleted file mode 100644 index d7f4057ade216b092de75bb4a64a383066f48fc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1562 zcmV+#2IcujNk%w1VZHz`0J8u9z`(#UIa@hGYdJ!5LP~o|QiMucj8a;ZQe%`-W1MDj zt9F37f{ezEm(c(K00000A^8LW00000EC2ui0KNb)000F45Xebsy62d}yZ>M)j$~<` zXsVt@b|qCT&j7X+#Gvnd@BhG{a7Zi~k4PhdP-q=4w5TPa!3_l1tRTtldcWW>kXdj^ zqtwkc8)yd{@VIDyK>3Q&Bt|@ zPiKl)tiHI=b-diTy~(+By0=-vz{2If!QkNEvANLf*?ZmE(wQ>V0@vcM$nMyly(`x2 z+c ze1gOVQmWN+0~2z@%1xe1hiA_ne7R03T9am}%He8(leLp`?XH`-tzAcVLY=-#+@P`J zlrS5j%{rJVS-pB4l)?9P<7LE?(?Z=fy0q!jrr|hV-JoP?m8f4Ubc&Uu9lo0i{B@=k zDY~bzg9{h#fHiB_!;?#-te9Nky%@iS{TY-r+;NGOMT|={E!jJ(RX<)?xHrAH%Yhox ziz-2!q1hqqt+zWv5=7zbege*=am5rG2+xF3Sy?Pt|82MHF`9Gd~) z7fDG8m6>G%0@z_|A2Qfrhax_tIMfxe|p5sL*A4x~CY0eXI0`pNw>fE{G zpl9|;=%r`=H=t0KR!Zqxb2h0cK*un81z?Lo71^Yi>gg$_N2cjxNu9cCD@&^$1EEV! zA>f`4-$AHdJ-;ldV5_wTNync6lIh?7v9CtUB(ZeiWu-8_b}|5)vpG7|RYT5^?5E0d zdS8;^>W6Habz(;Jir#X(dgmnn;DK{Oz|<~b=JR%>pJeRjOOi&_z5SSX9$Yes79$;p zD6#~@)yDptaD`&uGX+rRw9n16RH9G#AB?+UD?t z!{>6TDRp(Aeak#@>cvxEO1s+GWZ_YVq$W{KH3W?UT`kY^jq(#l{-~#Uii?gHpDH~^ zb~OP^W?YB7d~5)G+?&?=u7w`C5DQmrDx3g?r6|cD#!!{9mg;K8wmZ-u4LIn?Tso#C zw$wx`dm~}r&hjXaz37JSLX_Ve)xs4zKmll|0tEN>FiEXRZSbq#$8dy<%-PR*5hUX3 zCU`A508t7kEI8-}KHqc^hGiTT6VpSm4(8DN-$5DOAQzRnb3?TFJG`sYP=u=2S9)}x5>?Jdh?s$45v89NzQVb^PK1e M=L^;u%m@GgJHT@IM*si- diff --git a/gifs/logo-directnet.gif b/gifs/logo-directnet.gif deleted file mode 100644 index 9d67d57140aa5f080c25ac6f5ada0e9d2bf53edc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7673 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 diff --git a/gifs/logo-easydns.gif b/gifs/logo-easydns.gif deleted file mode 100644 index 96f8ccf6bce226714b3ec9490bb190f937dd38cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1465 zcmV;q1xETuNk%w1VZHz`0L1?Qz`($cj*ryV;$Ul~Mo@dVz1QmO^L&fDqpQT>ad#F?6%~&b5|0^@PLdcI7m*hklogPc7j%FFsHje< zsu`>U2d}6F83nSa2T_2FSsV^2Lka{C9lTkMddbSmyT)$K&Qco)u|Fh3g$NPR+}+;a zSqTNy1J*&;zi359M@SG50tp}U^!4`l`1$(#{Qds_00ZJnAmCkq0R$8%C`9HQfOJKU z2-pU$34x0kGiuz(v7^V2AVZ4mSg}cj1BI;rsbc_vVo4{+>WBg*fkG1sGbvSqwDST5 z36gMHny^!+gj2Ut*bRIJkkjxW)g=JolVsQ z!K(tck}iD$t)yEY57R9mfWSl7zkmaWBZt?a4;5nuASfWfK!-MhBTKgOKpX;U2Qs7b zQO2QRy$aVAQAoP9>C>oFt6t5zwd>cgW5;G#*s}?(4TQP-(1FS1-@vnM=2mlLSrV zmlJ(r(Imkp|6Q_&fCIF}%2Kz$1(g7=BoTp2bOB~SRur<=o*p=TNQZ}VOhBX@I8{&< z1wVOclZq?4!ioTKrGfy98N~8d28(TDz$;GW_*Vj)ouNWyt2Ca*!98qTED4m^s)i-~dZ`EED(kGY)@tjmxaO)WXS~*?>N%{kAltCS7HjOW z$gb7`Fv?Y7)@>+QGThAZy4-XfF`Y3HS?YA_Ko2SEZ4 zM9={T8-zOQy~b?7K?f0320;J>EZeLQ+FcaDyN}_kFkl*VkN^UmVkd-|>e;yP#gau} zT)OBmkcKcx5Q_20fpvgDz!G*gVH!t3;8&rD##{%Z?OByTgegDdv3iukEc4GacNMfV z9^gzydWiJw^UpB@0@u@Ug$V`JYGpv>(^4Cd=K+h!SyfjFoM8yd2&DNV9ywXkWE1yo zLX#*MU~%i*>hGjUS4 z9QbKyVt{<0S`Y1FWo8$-7Pi$ijIa&HO0Tkpn;mwLk zbarkfRKlY|AmM;@z&av|oNdPhmShk&lKWNQc84W`LevENePR^n!IREb=i(EefdS;a z;&tj)J;2!^16Zgg(|K%CcYT{D%Hk~t()s0E5m1VrP_aIX0LB)F5mZa&M?bVh;z%>w zpZTzqfdE2ffG;Yb0snFrAHdIbjB8+c3fG4Sm~L->_)DJ3k-#%GFN7il3kfSS!$1f? zGuF_Hr$7jfk@)b3Kn$V~t#U(6Ju4f0BAF6jqBR_W=2Z`TUW5gpsPCC@s4=RqaItunOktiS)1b3 T9tTOtLK<>cz4Dc3LI40eMjxtP diff --git a/gifs/logo-externet.gif b/gifs/logo-externet.gif deleted file mode 100644 index 4c4800b38daa04a7e7e1391b21236b2b2055bba6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4571 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 RSLcn_oj3QZfIxul{{Wx8yYK)2 diff --git a/gifs/logo-fast.gif b/gifs/logo-fast.gif deleted file mode 100644 index 887aaba9f5fdfa1874c84ef587f6b7b9ac13b66d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1901 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 diff --git a/gifs/logo-hurricane.gif b/gifs/logo-hurricane.gif deleted file mode 100644 index cfbb48273af35b4fe50b885cdd2501b04c39c833..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3732 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 X@v1nmQ=(Ur@;eI;UJdi3gXDh$!k5st diff --git a/gifs/logo-inway.gif b/gifs/logo-inway.gif deleted file mode 100644 index df28c354088b334732e2acb049fff37bf4159b60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7044 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 diff --git a/gifs/logo-isternet.gif b/gifs/logo-isternet.gif deleted file mode 100644 index 143a35884d0e317d09c9aee5d4c28464508127a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3006 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 KvN8c+<9`81`v9{5 diff --git a/gifs/logo-kimm.gif b/gifs/logo-kimm.gif deleted file mode 100644 index ad1b7caa31ba9b54bed2af9dc639fc2401bacc94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3241 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 diff --git a/gifs/logo-manawatu.gif b/gifs/logo-manawatu.gif deleted file mode 100644 index 9d154c2f3e671266b72697af17162280f0aac808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4562 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 diff --git a/gifs/logo-montaigne.gif b/gifs/logo-montaigne.gif deleted file mode 100644 index 2d9aa9bd0da666b6b487a6be938d41da04e539f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3728 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 diff --git a/gifs/logo-netlife.gif b/gifs/logo-netlife.gif deleted file mode 100644 index 7c8d48cb98fbba5d1a9e4f40e2b866c58ce79892..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3704 zcmXAodt4LOzQrd`k_cpYY1AkQU=9yO0^t#~8UkV%zz>d~F<1=*F*4eMu>~8g356DS9LACfxk4^zGvZbQX2R7*Ol3e3TqVO07*#+j zScpJ;h1flvSZwGehdtW^_bdb(p!zV*?<`^m0N=!#+5-r6oJ(Ww_zcMK&V2jfcQdpC?Ji` z1tE7LG+@FtY_po(V{B%F!|YbTaJ39m!6*XB#9Vg_dQ63*h&w?P5%ak;RE-GvTtp^x zdzqMU&CE>OY*v?R*laf8IHp#s+;t&{yBS!a_@@f7SQr-OhQi$jjYb39P5*!K!>$Rv z!Kg;DVb`=8#jUns1)?^X9Iyg4nyhNfq&JxL#$h#PR-q;tqK6f@(PV>QM2%Sywb5d+ zKr#$g=*2Ke7C9{`O;s~c^FLWSc- zl?sDlm221q008$5nE(KHfW_`T@XwzR(Pn@%bhe~eeqBjBy0PLyq`s>P42JZQ%V&FP zSTRM9`lik%Du2Ma8OJX*q}6*E)1EnuXO>fa!hsWMS1;T?ouC@m(;K_KkVFT)b9Tu) zZH$~@aGs#A=6EoN)Awj@N5{Q?ORp9Uow{0nW5?)uEw+A_{95tj>jZ^J`*rR`>ic(B zSN*g;WOeQ5Zzrde{pS|LzbVu5Qz@j=rQMt8FY?L{EZEZiyjA>dzYl5W&a)l@^>sv1i}p&J_K+W4=Bg{g6^| z;MSPyTx?!aZM_{2XZSbEfCCwGbLjAn89s>u>#23`?-n_^!c6MILKt)w5i&_6aMSIf z#Pfa1A0)xGam>lyUx=pv@HTu{CkR~~@%QbJj?moVPI?GTj_a*dwU!KK7U}b>)oI;? z^vHdp=qi6*!QH;#6@4R;kOSAQoYE#-|HLbLEM(oWBtRT|NbvJLzr0#WkUjUq?_*gv zY4M{43?hE(3X#Fnv;yQd?$bpZ%w@^7!u!jU2hu1D&SxZyw%)rPXX&d4NZuk&2igBg zi|fn1ub#TjXsF?14e0EmvBuBWa0q1Y_O8Qmqbc)j(v_#kPH1TCoG4?12RR_{8Dv}m$0^pnT+zvW2n`l0%JVl5&C3sb{ zQ`BVt)O0x6po>}l?7@%2@UwwBY>qPsM zHQ|*t+(yir{Z{uNO`~F1YmO zH+|_JZ(I#kk$;VyKmO5QPa9QTnbL7-%={;HO(B`GM`I)=X_NPNeiY`#0d4s6-94+> z692BPGfmxm-$=n5#RWIA`)$Wi4v#;{|Pf3p)KI<73`Q5?p=I%d< z?~0w`^0{?^jO_XkP=Y5q*+p>VeGw_;g4(g8i)uB1-f7v~3zIDw$p?el#rsKn`=gq- zEVX4(P*%eVc{!M#_rn~t7-b5Wz=cUq z<@-O`(V!=T{&mltU1Rf#M4nvbQ|j`;xCBaQbyD^XSqZ0v8rBvBDf_e}Y~Wz1a#VLJ zE2aHQ4aLuXnK!4bi~BySl3#t+^Y#?#gK-!!Ast>uIVFOzmX`WSOL)xGmqcIt6^{@R z0bxH%e5*QkYf4=0by@@ntelYXDW6cMGxL=W#WOoF+jbjJy!PLU#161fP8MvXdMp^T zF!f{FnnA$dfAA*3Thx=0k<`m*tK#_r+xn?ZH3cET+>xxIWsXulou)a?4!+N1OwFX6 z&IY{0ALwRNi>`!lxH<7}lKI;TulVd7EfiMVWqtwDnU^oeKI2%0!)Zs9%_;0orN?|O zr)HVMFnfRdP14>h(jwoggpGaWC7W7fPv7D+=;Wk`LEaZj+Gt2&L^->lPP24#cEod9 zrO?KY=Y%CoM*AuyhaoK$lg}oByiEK_NPF4+ua`;>tO?hhWMJ~WG1t?%P%EK@9UK4b z1XWn8t&Qo4lrTqnqsI2EWn^z9%mb^3#WQ|qt&k+HKVjdo%3{`%2I@!u#kyB-R_9$8yl}=(oh_Z|#RJ?QTjR8kbF9AH03(Q$v4E8IU~x zs~TKT@G{rQ2w7CJcijrmqVdQO?W@T-x`vZQ^v9h6i|rL2aTbDCf`vG>>d0TbNni^t zx&8j>i_fKfbysr3e$BU;C>~sNEos4lp#x6c853KygarEIeFS0bFG;mN_!IOqV zyEOs1G^KAdKw<8_NkrQ^^P?1uh_WQGd`vv2%}xy;O`*T^?c$zZM-`+7&HnI`X;I|Xn!iXCbKs!1NWv6Jf7LLUF7kge9IjaJRceZ3`~+UB=c($ znB{#%yQ)^PVS$~m=!kq@EotTqjbBLPb9hG*e(3sjXNBd*vMx^kv$elyg%yiIs6Oeu zh~VEUVu>32GM49U&ZCJJBjpv^oVUWQ%_rxMUOKSY-bjmX%NzK3lqqvi37M6%$=`3C z`0Cqxn{@V5nOSw(+*^AYcQ$sjz!qBa?o+(_6P>=H#pS%HhGhjDEnyS4M##Ds0CIpO z$`K9m;vND;cV{u!3M9_6keLe`eu*iaKXmu+C%$@tL!L-}_XMREiV7{Q8uH_%!&r{A zXEyJyM%b4TK$U10#&y%<1Qws@(3F{HA4D~sv~1(~i8?;_1ZH`MI*HeFS4Y1;=l!#l z^faAxH0}4%oUWDSzP3ugmMki&jkXq~N*W^LeTcnJ7DOqc!s^K+3jG5M{g9L7pEK+0 zZ%PGIv;M%rQH$4u)+N`Ifq8yO`Rl`1I6sbWWNhQGWUX{wGDR@BV@rWYOnpVkwwQ>s zF)KMqi~F>KDX;sMwKuF@Z^5#=1Hih~Wv_mtk$_KPv>uJck!)gxj6>PH+i$KsDj1F_ z$s$Ulvf_g&vqRU$z_f3J(AYd?U+da}k`KnguJ+7{pUL67;Skm07>#++CBRwJy!&QKy=lpbJlUz5GWp*6yrR2n&h=;{Qwg)Oh!LV$Q6T*raK%XQoIuM4rX6So)_gjkOY8NXmV2rK>WoKu zbZz{I#_M$sN0ipI!oMMOE=XAFsC|3c`&F^mZMkkM^5n6i?Xs;uA4}i9nLq%R{TCzqNZJ4Z diff --git a/gifs/logo-netswamp.gif b/gifs/logo-netswamp.gif deleted file mode 100644 index cae71e3881b3ed184e254dfb7b1dba84b391cbeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4574 zcmWktc|6mPAAkX!TkKf zpFe*kC#QslhHY(qud2EkpK!UY_eY zxf#f8`r11UM5UBQB;<_F0oShIawr8{OGU0ZGw#f1k##^=#au*2!@E!4XXX~SL_ba0 zfGJyKRSH<=uG;0yxmE$L$?d+(p2*S(b}x`zH^*#zUo`}D4bAAY0f#EUyAE(*PMoS( z_AZ@^YzAVRMak`dhE;hd*VPTJHBX4F{xsD6v5A8IsOi_Z}0TnT>roT006&#|K8o*-PzgM-rg38MBl!BTU%ROU0q#XUS3>W{PgLQKp>c# zo12}Tot~b4{rdI9#Kidc_|VW$UtizffB)Uv+uPpW{_x?$=H}+c#>Tq3y7Kb!($dnx z!a_Ei&15oTV`EjfVPMc79Q+^s?-OJc00N^F?V|}eW22#|ikE?zdHW8kIaJxV)DGs! z8b-{HwA>yp-0Pomv869v+#qbM^n(jG#8KI3AZ}FB>KP>E>qy$h(4%`Vs>vA`C5N{9 zm$&V&>YUM$Ry0Kw&U{YLB81_7kG8o1&86X8wNJA|0F6rYy9i>l2Uif{Kwjz zJ0>$XwAbGC9(qfD^U#YCbp9O$#kwEAN*BrxCc3NcFR;%vC_OC6d9Gq+(xh7 zb4Xp9Ft0nPuZ5SFf^G187A|yV5{`+DQ=f3XSoUb*W<6h1 zKCr&VP{KK|CS%5oId@vZmys)@SOe|xxW~zp)VWc8<-7FK%>v6@?elZtm7Zp^0=X)` z26S#ib(U4-VqJoX{Q1P?92MC&U{-D@h{q@P#4 zCRg^1jyzzpE)HqkJ2yr0v^MIO<3qUVXbo%Pi&5Q&kNhs1$M%h;nyXwzS|ry)um(Iq ziFn$Dm9R1O9iwk!{)XQThF{_EQqJbv>{lPOdQwh0SR|bxVX~B*YWtCXhC_~^-E)Bs zhq10DFDwivYI9UsC_qw{o^F`o3+W z08(XydajvQ{Bh*}l#8@__k$O1&zf!dx~i%8>M$}hxWQICW(h-&)aifYtwz?`H!nTc z*io!~_HimY9ci((RD7o-iZDVprlq?cYlPhgA@H&EqwwO7E)sX`>F5)}GYF`hRXt+Snbyu|S44ur}gM~mnDiD@} z0Evq$ce0Dv8XA06iC8>cl0>8I^Cq)|=k8;7s@oRq4UiJ43YkXQyOr6s5@4 z`<~LF@(XkVzCZ18cY1+c_p1Z*_$h^@YuSlE(6pO5HbHkh*$IR%<&!WBDObNlZblMh zNCKnpaB%TIzG(%XMSe|W8Qof6!EBQAb=jd4v*3(9o3w##5cPJKvAql043+v1a7}@g(aau+qyLSC+fxyG zs8Zz5nJ~wdrb43ZFzNT^J(ca5VSl{{`bw&a=MoSu%j!&f{Tyh1V|9$IoV9UYQLVO3*QT`RO*-mxe9y z^O*dj5b%|8-rt-DJ0XO41{`);sa6U*wc$c;LFu#!Goj#gc^yKAUOi7jiWFCC zcV@tD)#jDWe>{W%Ict9#Kj6K*j9iouuE-Tg4BC_N$H$lbGWv0O^;D&lvgZ4+R?Wzz zG+a0>O@4-sxch{GPmhMFdF{NLnds=~9AAw}-gz&O=zKhUGU}XyD%zd~k(yq$q90$M zNi!eWdq|M3S4DvD*GhXT8edD@+4&cQd(1;R3DXsR2~eU-O3R7EQuPA(Aua_TPT!mO zWPz}k3zBsu=;7&Pj7K&PQmZPSTJdW^3vljw<~i~0+LK?Oh=pBaVNS7S&hwx>^?i!0 zB8W7HBc{vc%jra|N9Cl!_k+ON_a|{F15~92*(_2YxZsTF=NA>29ce&cBBuVfLViU* z+6jbcOf1RGs5*|~;KA?_s1kXgdsb>!{32%_lRc?%;KiJz@e~8DUOx(6;Y+x`*cFy2 z4#QR^;WD$ldkh%p#6d2+&<>=sf;ToAlnmxnbUQ0k%{2yH*dzfR?xAmT!n+6(bCRko zF=@^e7fs070!jh337wBk{H4)vuf{Z|2=~zusEv^$~t$3u$OPg`E2J z!2=K+&;(x+Kn!?9G7Wl$43Uint%ELGtIA&>qs*n?9TcZxP)Z;l{LYTlWeCSJQSB?D6_M0LetF&r?T>WqzX?r}rTFB;z=BSRB# z?-|D+0Kwv9Iy}k{Q-N1u@(79XM_PDlRrW`&sDt?Wq;|T~2w8k%?`iv54XwoNSNmv8F8`59fHCt7tL_-d?Cce zfXrF(N7gknzsKSr9Atx+cmvnpS&i=QiZ#&Gd_u#%b}5=*h~FdcXDv!83FtNgsBRHN z4G*>+l>Xx4(_vFC&++Lh!ePkR)!UWrTr^Kg3{~c91)#<9Uiw~Azb=?j?N4%BBI5=G zssS4?U=nwfcU@Nv)$vg$jUtAc#O>nIt6M%SE>51{pXcT;BHY;igxK-G?%HTd3a~nG zT@-BpOc5AN^c(y~N}LB1zl$*8K(vX-BU0?uA|xvsbB~THVp$|{YjxkDk7%C42(gu9 zF;XKslTjYFUu!)YS6YOwqhTteG4CcrkI92BanP;AJFRq7rT`aARXBbZq}^D%P0MrX zs7--hO_lu903ubQb)O+$&{3AR(V^FHH#xQU7??CDSj4N-$@PuoXNe3rbH5FVF+bq%^|0$J9hP!ZK76Rgp4oJ`ubgxDVOo5FrLPZsE zqlB=Kn1^IOIG&9Bg^2_eLBohpItP-?14;OBvkvTQcQBclYO$bz-?Toopr3>3QwKku zD6&@*BgYPFC`saycQlHg910LiI9_cAWwrW1IQaHrnf#rD-GbIQeM;qii)PxH; zNRYfViLA!AQIp$kDBuTlxH}mhC$#=2@FENhGvy${@K8enRF?}mRFt=meBPQ4i!tkr z^XW`T?o7PV`PY-ql=q#fJDm*OP8%9*>28#x0G9n8MuQ!6)a`(`AVMM$MndRbTGz4Y wu46nz<&&5PLiHb@GCCTaJd7i)F`TPOz*X#XyfBXV`U0j9jz#e=BU~zGA?%Ukd z)YSO+_{&#+J$?GLudnapy|!;pyY6&#-)O(t+9y{wWm*>R45er`T138$=wMX zd-f*0-yPFa9RDFZ<=HX$_=PH&;$Fgmi+lF$3y&__zI}U8_@TAjIA>>P1s(&D$(63F zh6(s_Yvaq|KI)C@KXTn>!a^qa7`0jr{*Re`M*`o6Wmp~>?=Hoxh)8UA*SD22f?#ne*sgRpLa~oTP$ffG0 zZSHBRyH`$BRD6N4UaJpIjTX~G?bMZv1eU*YNLPYBU4vjj>;Qo{lcVdV9XX3o16;3f zYZDsww8`6e^NB8$$XTAJ)96Oz#lOL#OnsI&TLo1+fP(D!Pf%ioKP3X!Sb~2Ii9>bI z9(XeMECT6hhe!yh_NiN)M&18Q#yk5?CH5Q5i7ggB2Pi@Sk9~ERfx_vSIPv<^Pe?GR z>6`o29P!jkf|ZuNN-3ViV9*J3c|V5vLpR85zs$*1lbFEZzfY|Ze5u6Ti4D9puK4!C zE1Wp^+i}lKtnC)|!4VZK5+Un8e|)xH08U`qxPneR`UKp8`EX(T6WloW-AE?n%dYa% zdtK^zaBGI=ae8!;YOw=#b7}u+z$}j&&10XbAI)EWZDO>*zKb25|I=(tjSZ{1q7*!{q{RYpe)f*9f+S<0tr&T#Q|YJz}%7h^BghhEcn?` zqq-<{U`#7bgmUb-jtn+U;24HX-;M4}#|20v@M5kib|*d}ptF3Aq!Kx93>d_N;AP@| z0i(h!V0k|2ni^%|e-+`&5b*#yJrB}GG$cSGWbL{)YA2%Rt2*iAx~uQFTgCmlh{LWU zrOCI`Ry+tOtm6WeVax1L#@l{P$B8sYd+|2b_ncQdJ*Cq`)Qga$w+KDuNHzvPbXFPB zGqJEpK~cogXB!wKO9nzqo@Ihg&YM0joNtY#N1YuRL*TQaq%nIbt27c6xEW~IDy)Ed z^=8inPIOQERrNu)-e>BR`e4I;3|*1%8KW<7>V);t0lQOg3xPi#pP|XE6dg*UqHDb% z!{vtd)wx^~nb(u*TN#ntk+6#RC)VRz1_}S)Ba3ik_R9_=&wE;kBjtv2%BF*@MGrd}uLBMvG1EMD3>`SAskzAX+-4N3wC6oF27H!5@fdwvvAfo(ac z*a^?S^}gHv`dvlp-`~fTIkpQEwMP>d-q)ul78M=S3E6%Ga*}gWwV(SfsuB7XNkFP| z>Yw?ko8OQY{?dEzxo**l;w`7FvZg&zB#zD@CLw4OQfo=1NbI#JNB)&)L6^pL5PVQD ze)bfSQ`tHFVZY5MJgkN9Stt)!^T+g=pG;C(6lh0H0PcA#ST{I&c&3Dlm`Kh2g%+b9 zZS8|#Vwc4OwXSnV7mmX}M;@`Ek<+oRqi@_C6t9K4rCFzFnhLDb2$DAcI20+CpuSrM z=8WF0PwTpZ|0^@c-A6YoU*I#PRY_rX%bj1E_n) zmB@7#dgtk*hYM%;8%Cah#`*%_;S|{Z!*^9$Xz-S6-`AOhw}4BoDa?3>g5Q`=?ei+S z?aV_7UjD_-vb+y0)G<syS7<0&@>bHO9cy@B z^@A=l!QbyAuehj!p9-?kk+kkww1cEcor$bH*KN$^Na};?LE^4FXpQ6u&SsAOK4El| zW$KM>54s(nJ0QZ)9mAXowTm@T{0odx&32qII znDZriYrCSvSB=#M8#`7~c=jNF+MIP}fVfE}@u~0eG5awjI?t5&Xea+SgGf)n*S{Ve z{T%u14KX~8jEp2K=2>crMZ}HTdp?_aA7Tc+T6lgmIXHRh;HI-xd%EHsfwoG73mQQh z&a3euDv7?k;ODiXq(J}5EX$zRTASuOjjT*Q8cnu7%M*HdqN;QKf<~z)=QZq*%lRAb zk1n~MhPwOMK4*iv=FJ`3r2bg}}Y6HPAxyHPQ z#KtEtW)I%z!;YS!D>+*0lEi;%`b{tLIHfLu_#$xI!}4FQ*#}xYkB`ySQoR#6Ui0uC zXSm*K$?A9fB>LJ(04l(-GwOlE(vl8oF4mrFWJp?<+?N~!0ObymTN1`3t-Vr9y-agz zwKu_n)VyV^NzxfO!MnZWr!()0%r2#4hfs8v8r+Z{?7M|Ut zto{2_m8BkMb3OI~NVBJd`9Uiam{bO+qm=-_+$K%5DoSA5)>Ft6dS3Y}3*`Oe-!;vX z`FT8r*1M-#aqT!64I|r~KwnvZ}@T4@8t_h>9ac@H>-hc3ShlcOMwOd4? zoF9>~zPKOmA8$T><0`+7*nL*@>A;f)B)_ofK#>x@w`|a>)2Zz8!cK$kD2gYgl2aK4bHrayI^0SmB!&UVdO_UAMu)Q_zjty(~INgzc5QCKJ1hn z5i}S4P8}HjYVBAQ@^*HCxScMnP94~wHxiZTu;8rrN-36C=f8Y0cloE|T$$`(sYT4} zfWs}LxAT@%Jmmd_hNSn0KNe|SX6kJYUy0CjE~Yx)VNs$(d5g7Sp&FR}J#24e2YeyQ zS~ru>DdCtz1Y}lG50z7}4vENE%GR0SvY7OL7!liQZQp44*2M?2Pyy?Jhy|WU2*hY8TCt;D8w?*Bc~@Y)z{_|b-W&ow;9+@Jf`TpFZAxsYDu<`sUHg|RK}U)}6kBJJ}G z5?Olw%8LB`dho*-kWg%Q0$=cQ8-7@{WI{~H?y|2?Qi=ymN^!dlaz!dJR{OVxkNwxYN`pZ8ZVvrYK^EQgY!&+g!>){!^< z!MB6WJy&Kp@VVdpZ%;3Y;9HT9){DDl(;f;yGRCw#;&6Bmu>Bf|f4vl&lg^hQ=bgyf zRS;Fqjd3VsmT=dI8It&em-LUt2%&pbF#C}Kk^|-T7+6*x`8i;^5XV@UfYBne6ozT6 z{?Xs#4wz1W6R|X#6%MI#utQ+_&#a{ffgHWZbS#;f=1lgN?D}_{^k_zVXEId0V%2=+ z$z06d6rpW>ck#QXiuq~Ql#15GIo=!)-Yp8iCiydv%Z$#Q2%M=f5rR)MCNn~9U+3i{ zIQNVN{xk+r6%mQ?WLz^};XC6{A+*}3S>YKTFzdZ?htHC;qD_O5^eKI6xd23lSx-3;TP^w&&UZXwj#R@mlhGp-U;w^ZlClQD)Rh51X8z2oNX8GkRTF7NW z5zi7e;@77H+7QP?u5)6JEC~%Z5%~r#n0Gml#pNVpVDl%du9>x3`kE$%5?W)72F6zU zWLx#wTPb`MJD9`=<>0|KKksu~@gCQieRT!#jLqHqT=&bca-CPVZQe#R+aFu#rW~YH zN81U{$;MV&AY3wgw?b#oKCOxJ4d>5jxsIIMx?+iGRjV6m?!3yNp~=jwe!^j~G5expV_-*D7R-TDQ&VlX$8SrGPZy@d*hcT(1;Fb6 E04i}NoknT4QrcW0X>BrIe-CbA+`@T8vU- zoKj<@l$^a|Ym7NUbMNo>-rncN#@^oE|IW_$wYBe*l;?zm=W}!3V`JV*O5Q0c)*&Iz z006xJ0LH+;zyJUMA^8LW0015UEC2ui0KNb)06+!*peK&xxF||dBy8)xa4gSsZQppV z>nf@&rC{*1au^2!$OFJ^I-gL0rbDe-uh^`1TeU>LObd6b!CWkqblP&kXf|W3226iG z1PuqP@FNu+1OiKSgoTEO01{kYh+-vjaC4G`0((CRMgfDDpkNeJR2me7id&3_ zj#`jklw7A@5*KozgerU~oCFcLz)ZGU6LhIstA?#vuTK?m(6_-*2M7izB}6O^4T95$ z7aYXKTO7%S%UI1&7|<9|5*Bc!!4eeJ1_nSv*}O*o1O@~UARqz+B@YrRT*$DY!-o(f zN}NcsqQ#314@MBcpaFq@n)V6t2Z(`^Z;>Yd6q9r;n#(NjP)^E##nQJ23|e6Gz=@kT znLx>@ij?lkx}Zp(M9|dJSJFmXR?=ETl*`d3^Wv1znpD6wY})iN`1JJ4uq;yHQHA52&AYej451!G7{DncKaviR zK$u1|TGkF_Dx`H{55se0RkhB#G{HI)6+qK^XR3w7AsZ-cEJWoA+VqS0zC}?V1RKAs7!%%P|z9`8(1L0ArHux)C0OO zc*KJcI`P1D^azC=Tl7WoOdK&W(H)A=B?W;GB#l)f6lY;E-4p6vaSkCxS%Dh`Z@~rB z19kmy!ZuFr*hG(4{79XI=ur3sl1Xxb-#67DfPzTcaMHjpJ5p(dl}!X`#gKIrSp{wY zs42@#T6`H?1o+s+Pnj%qvznBI777XkbJ3O0Xrv9{gDx)UBI%@*R%+>`m}aW!rkr-_ zsiruF%4nl^<+XxopQWnms;su^YGixt(io{GKqeUh4GbVq0KE3<>#x8DE9|hu7HjOW z$R?|7u(}fP5l9KhN-JK-ag!SVLWX9m?H36Z7QnOPl`7&t4fI7KBBXSwZWeITA?LbX z>KO?H415%B3CJloD7x@ssDTCsm$Wmy(r zj7v^0H)!?QsH7d|+I2{faM5GO-O0Iz>b-Z~cDsxBmL^xRLCUlo2sKh6_TkO z=uG!J2L%CQi;+jQ^yQBO#`Wnl6Gigudp}JCit-b+p!B=xneTqE%bx5w$At~xZh1Gk zM_pz`ty6JhZi1nn^%4jL?d{JcDO(u?OUEb0jLK1`Vu48lL;;e8%ylMmVaOOqh!)Ba z12k;H1KMyyGq|k+Aj2LZ_=FFAP*4b_a)Ej1#zaC1Crt1YAgvgKf)u{sQ&`NR7PrX7 lE=tM=`3R%)jyNq85m50_UQDAJ*T}|Cg=$P>3_=J106XSVihuwB diff --git a/gifs/logo-none.gif b/gifs/logo-none.gif deleted file mode 100644 index 0e92eca0e649658b675dd8e8b5256cbe17a4ccb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 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 diff --git a/gifs/logo-police.gif b/gifs/logo-police.gif deleted file mode 100644 index 2b65abccbf83717821d0c36dd94397dc14a6922c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4791 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 diff --git a/gifs/logo-pwc.gif b/gifs/logo-pwc.gif deleted file mode 100644 index 558ba2273a76eb1275b8bb6a575d17107b26e5a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2644 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 E0eSd)oB#j- diff --git a/gifs/logo-rcis.gif b/gifs/logo-rcis.gif deleted file mode 100644 index 77b0726f86c059ab2f17240b228c46e5820da5c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2276 zcmb`J|3A}-1IOQEY{q6ZGhf?$-;P>@t<$wFBDNY6i@JuP`SQt@Z`ZlcZN7i)hGLiu z71m@N(H9!Z)tp*=vYg~xI*Plalj2glyZ_3t2@?yb*9^h%)P zodz>E4Ru;TrBVU^r{OliAOLU$-2dhM>qIfssjAb0oM>k&i@75ydzv)u>A{^*T~ms8 zgoF0DyUGo437ue3cF9weGrKyFgLuz$G91S#-U-rBK+m z_YB+^yfvgA+it0lmnCd75sLuK9G!(OVcgg`vy#GigP^LRdyOIeSD)X^UR!!T-rx1}&ETn_Z&1AGD9?oH zC~Y!Lg8EysZ6=%LABO|;c`beqJPNaStV|*6nw@_9+h_our7@$n&@nWQ5 zAD0pt5;nO)fz>f_%HFl>(hjSgK&yPnc$Zyppjq5$sy`VFy!w`e@Yu27trP_ywpNccIF$d07 zGPd!}1RAk_Z1LF100e%nif%sw=m&cgpuh8T=muw=){DOpA!&|63 zN^6-&3%9OhTPG>`Qi7eyd@Ppa)3JD=TuPNV@j5TD4b0NKZ6GVhA^`xrn<&&r`3X@3 z4CiGv*2%i3zBo;ob2>>@&|hPT`{g!ba-?L7xL-D&flS*EFlIf5$%eA=iNe(;bI1 z)kirxioW?pmWm618S|K=74*jDjGCA`+Nskbo?z?#`+;h1y8CfN-!Z(a+R>bHCQz~B zmQ_LTODPrYwF#YBrhF)s7*j_iQ=+l~_*>9E@R2hP>INVD(}vpg^VFKN%2yZ7%3kvBg@fDv==n+AYrQ)>*y@3#&vmW%~ zY=Z0yLg;aGvmB?b)jO7_w%*)x?b`bDN8gpLwXtV?H|BSo<#slnNO}qKM1OQ@DAp zGMpc=-*0fZut*h?-rnjWNEH{Q$yL|Io(+30IRYp*AxL`(Ff!p})(xDWdxa#@Qq(6J zeqx39h7y+CT&O|(07IBY2nJIC6!xF&DX$vl$A%@09@&)*f=6R@A(nRsFy3=%0eRSq z+@^tf|F;;kI6AWIwh_V-o^D4n=={u1L)k&lzXF9}fgGjK#8nGZug6Bd+GVQTgDk5Y zd{s!=Y<=;Cs64c$id(WgVUR8fasieYWugbP-7*n;^>OXsma~TiAEhH1Vru1M?se3L zkjXaM$H$OEl#KEw$>q8a!w>EE)*A0M_0vs^>}6k7ui z|5VbO>fQ>4&-LkvujW=u;!E9q**6)RoLMo$#l#u$~y_$`t*j*v=_royb!95-`F)_GX0pgjJKGgO@Ga9t^AI&RI`|b z^bFs>#S++ExAf-tvk(2WBa4e^va;`HUzGYg2QN1mZAIv9Be{Vcpf+|}0nu@GTy|b~ z<$QaLX%5}Vf7^XXX#%z4QQGC?QRZ_3?Z-Irtim!$-fqKN$#f?31K`RJ(GmXqqgAvC zGzmXLSl**X^4wWrcPCl51&+EQ5iYp#(Sjb`3<0bv+{lvQx2rnaS`q9QjZJEh?LrOa8s#WIuUU>d9E^o4iy zq`v}VpBxKVwGH3acl}NC#DuE#L`-sfU_w*k#qvOAp-=QpM&u1fWSMVBCL^qj5me?D zl<(=waiw$I7#!u~bh5*sv1^BpagmZCAE((at=uB7Rf58lNXT7BNaR7qSfq*XJ!(@_ zdZJBgV-%Z16mz|BRX$SLE{6aR9Pwj(VltB%?d^Bg!TpMjV=Be|JBocgiOdv3CK#Fo zn%jh$Qi2iU45SnTe(o3$YKU>sSJ$;gV~(RGvB3W!jn8lh0C)k0|JnaNp&}1KFLpYI zW13}QVM)m^C@kU@mz0*3S5#J2*Hl{OWSM5v)q9y*Q2hLYgN)HoSf}mX?(WXMd;R=@ zK2*Pvf8%>j;*3+@7T5X6~5L;Nk!-jr6v8 zx7cP%%Gmq5$QY{~*S`IvFQEfP64dk8>I}2|C0wqFH2l_)k)em z4H?Mte%u5;pY#}~kM5?>?&e=8e$3U1^b|DaC_b$ip)O4h^t_&?2`k?5M(iM+t={cZ zsXPk^boP8X%KB-#k(gFMzJX6Xy-+#lg6S4`j_Hh0Pd{w0u;?nMG=s^EPXG3VP}B2>$Ba`He=|7j9xqz)1nJv+?@Y)g5>SeFqm0 zmz%MBBQG{0`g02#m^X?A*{^={bu`+a_whfs z|198a$NoadrFZ*_!Re*xN8GX^>L|gnTTu9^Z*M=!CmE3rUZgCZJ6K8UU$vZpQ@bFT zKRA1`8E0GS#}H-j>!bSe+sTe8Il;#_#Pj{nUtYIPl*hjawbI^vJxMKf?@tISUF?CU zr9XQ9i}>YS`5@j=540^g=7)Fuy*`*&O^f9QhIeX%RnNM-M5!9FhS~Q%3Q1`WK2NzY zi`2U@RSqaj>bXdHH|~!9h@%fL9#a2QjQZxKDv1@qG`KM9u4j!2vR zt0bz|KeoI3#?iro!z-jufW$cVR34967@x~b9yQC8Oh}|;dI=X^rOfP6z)VD) z93PN2jS4SqES{1X0y4iJlwK15iV4QVdJxy9j)?L zkpDe_QlW!F0ClQnfUy4SR$o`axx5eKN9**!SY?u^UZWnvAvo!fRh}_-w0(?C?x8rC%FmafEF@ zy9O0hEF576{eC=S^oI=B;>#Y()gXsEm+Oz=g6IGcN+h$oD-Wfh5>zGx&2w$SCFxq! z@d(Z_Oc%!n-FQ5`Z4jikhn3jrB{Tq>mvV|-Ge?|$`C;~imA#mkm2^l;vzTtzT0<^Y zkD#DvkthLWE#5BXCf0qZ}Cdi42cdDgi&gKb5YnvQM3%U*w@V&d#5icd)g$CP{%hE*-*1w zOy!g7zjUV?xMiRM-`2nELm||+7?n|@gTlV^d57jx{hCUY4g8!BG!mzj{d>g3wejKf z_|HV>s;)C};4DV2a~$s7mb;b8jDetUt-za*1c{Rz67FxJ3-`t$d|*+I&(-YyAy~hylyHV_BOhVqHo{ogGr`~cRg!{6lFV?z|rpG2wWr**oe&diAOzE~d`U6~3qy_mbT}`Z%9L87OoCUsVm_nj`S4=ZI$;$dY#6Naf zmf_}+W1iltp6QuCUg2jwuM`UuU1^Ys?VN!;d+mkVRF?wOCVMh-0y4ffs^wa#T`{NY z(}|scTD{q6#Y8o|lTlR(A5wDdpV@)vh#K2>U3J!;5xfPtsMVZQx5wSF2g+67qD$dQE6!B_dX zb=B2yG?GiVVTPT+*#Rb{%6U!_3If!zE(n^KWr8n~A^{LCz|1IoGogHRT{$MhFMX#7 zP~t)95i}U1Bfc5_X DEency diff --git a/gifs/logo-squid.gif b/gifs/logo-squid.gif deleted file mode 100644 index bc0905d223ad73df697fd12586adc746ab658c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2242 zcmb`?i9eM21Hkd`^UPr|#$b$LCT18{$xgZy)q^m^66!aVYA|FrWjY+G^cZJIjv+_o z$Q>FDu~GZTnWLlwZAmHV*w`-1Zf0NmKm0y_!29+3xVpL6ZV0#yc;FiVN~QAq{QT_f z?99}=-(O5lKAadE9J@6!akpn^yzOE8E$m)ZZ(~#Y)w=qQ^S@?QcV_kURNWh%msNa> zJlhyqbs;Z5H7%niG&fXI8xeKJH&Ev8n`n`k28oZ@IUU_>gJ_Vc@vQKBbh})a1h3rU zGwHvD*2pmo1OKNu3wQ_sb71wK_umsjRAM<2KKGZ5-g8IqhHWe!u0HNwzx&$Q3LoE( zF^O*H59Ej$FxnI|bXZ|jq&f3t=J;lvme~8Ve=E^AX)L6sAH;NZHed!CXu$D@4GfJ8 zHO*L&QN|Q57t+i+t--Ej6G@eX?0PZ%7`{PqQ2!WCL3U3)XGp&yh0KZ~sdxgNMW@iz zVLd$)6Lr8bGSX{3Sz%PCTXnrjDu4c}>4wo$#hw5r3B?t1yEIA5SU4PksQLq^PDBfs ze0hn(CQU2ht>6% zmjf4gfvn)_xvbX!l1%kq+SbzWye<06`{x5K*IwMjk=Wke9H*bQrVf@p_I^2t*p4#p zPYGdW+{to}Av`A3?b#%^t#oA1DGVA&>!jX@jUaI^+3Rb62@<#h)=G+qF1dRzIaXaz zqcu6{C>?w*D})cmc!m;tAFU0K|M?~tFFz@cHs`NjWye+H3aF<#P&{pfsX{%J5Wg93 zg%k=(rGLB=Qw7!cmE72Mi)+~#u)1l|PTYL`_U%ALlzrELWj{9#bo*31Al;*SKCTNK zXC;t|$7DuPq`$sCJOxV_Xo@(RTfEWo7d~gtH|NhB-s0Ly7l>79s|I}&&-4Pay?5R& z7j{Pik^aaDkt&@ngB>7A1ty@2&UR$+BTq=3#EF*E`Jz1WbU|ok&2(Ydjdvjh^6u$3 z)X)={2v@FEjuJ)%b9ZGZ@n#ZOJPR?i)5~`xMJQ;9D#?(CIEEYX=YZ_s@$U|{YF#$L zJFDu?chku5<`aCDf8gGHVTch{fwk3COlOEH1JaetpS zwG@g|#i^Ho%Qp%pfFR`jbuWVi_ofjE8CkFN9|ujBlOUckdVt$_raoX!KD89_$9swM z_G!Dvm9CJp*`tMv8XT6n-PnO^KfXVUn*A|9nf%kzUr&9vRAsxj*DNi5Y?)p9J7{0{ z(&OT^0zOe+RHIz_XMR?x1mqH+!pC5PITRj5%0{%S7EX)fGBPz`A{9*|z>w)MhAUgw zOo7X!{*AztYGU4vNLK1_NjA$%9X!Fkcpfd;)#6CC!YY$|RUu^KB`JM#Jrv_fA)f~5 zj$(~1)eflk>iJ@>bymt5UQum!b4sTS5;h>%m6&eG-IEQo`pA8lZk>h!HGcx#qyY7yq{SbUqOXY{GshGdWImbhUvPcxt%n9_{NXYCc{8W#Q4nU*XiVrU}gMA-5+9?@Zd>7#LD1q`qzL zXM*CVsH2upjnrZkEt+Wm24Q>S%}$tnV&!Y^2NoAJF4dwt9t{^%g|^V1S$4bO+qIw{ z4`}8CebaT*rpXqiFh&9+H#aQ1d+E*{(qCgL-ejApSSLDeW_C34_q|)5h*sE4xNklE zrnTK}c@xe7chQkZT3%;ocmg#jT& zk>A^1VH58#aG9wn937lqcWpe*0RYYt+b38Q5fm(9uU>D;M%YnNQPu~IjNuhKA diff --git a/gifs/logo-sst.gif b/gifs/logo-sst.gif deleted file mode 100644 index 00b08657dc1344b5da7237a75c97efdfcc797189..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3511 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 diff --git a/gifs/logo-sts.gif b/gifs/logo-sts.gif deleted file mode 100644 index ceea5254cf2dfc1dadb8ced4c0652fb347eacc54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4622 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 G!v6u^b=z0~ diff --git a/gifs/logo-sunsite.gif b/gifs/logo-sunsite.gif deleted file mode 100644 index 6c9fce11a490845555aabe0087075090fd90a125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7888 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 vv=x@Wk#G1qo$207x4R8H^@z1ZCsJP diff --git a/gifs/logo-technion.gif b/gifs/logo-technion.gif deleted file mode 100644 index c2ad429d7c9fea82976ccde956513d68c4338e81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2744 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 )a$(_m_b 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 b*0`><2*$)GSQjbRzz(*shdpcqh5!IN!5P;f diff --git a/gifs/logo-urbano.gif b/gifs/logo-urbano.gif deleted file mode 100644 index 51506c15a273f82cc1f9312a40966f77df0b1612..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5060 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 I1RP-df6(W+SO5S3 diff --git a/gifs/logo-utilina.gif b/gifs/logo-utilina.gif deleted file mode 100644 index 579ba1894fbea486f66860535217142764c44b5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4440 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 Gw*3z!ugih} diff --git a/gifs/logo-webtic.gif b/gifs/logo-webtic.gif deleted file mode 100644 index 940e3de3cb1ad437e43391da7dfcf251567141af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1666 zcmb`C`#02i7{@2gnQWt2Q*NV_Ta2t^T)s@mkZ}t;B^n|O(iB1( zGf^mq!fFr|Q%O;Zno6xpA`RJ=o&EO1{s;R$@8^Ba^FGgco%6W4yHe~J-GBs^0g!)_ zL;??-|Bak4k@NWyK3@*Oh9nTghxoAIfcWqxA;Sfk4?z$aHknT*!$}4JNMMs;ljU#= z17L&%&Tn*>0U!MDGW-jT0Kga!zmdQFM8(L(#Vi_8ukdbN!o8Sn7lwt2fu%tf+Jn=+ zAmx^{d39)pH5f@wyK=bx)v1>By-hC`R@46=bG(})sd^{5xp}AZPsTG;@dvVj zjw(>q#RFXh1-#CIGY2abD*5Lx=^j+j;gvQgZPL`>82f9gv?S*$10#UZLl_}IL@)*y z8LWf>xYK3lfIwGuti1EZ#AHglvwzb|M#1|(xrHwURipI{g0oLc@Vv^h@~iV#LA3&Z zoh0)eeK6#Z5MoaaKni=g?l|LJ6|`a=2erwbR!r?do>2^RrHFsI6VP8`?wj^W7KhGO z$`EfZChaK7La0BQ37^`1>7o2Wuzo;w$Zl>KQO(q77AW(zRl1c~ppCGHq*~bQ!{QkB z35!dNVmtZ@=fu{~r{b^emtT&j9CSrY8h@Vd%ga*>8Wr~_p;R`CX)4#HMNJ;TzjKRrks8dzKPdwlY{ENZIAzKlm_Hae@(8fn8htopgcBVlxW(dM0asz#J| zinN9U#>H84>R#YPuey>*ACV}_`>aGKQXOYM9hWJNtW%pZ9k#QHll5^}g9BacrDyk# z{M@wO#a?;!sy^;kX6D+W?9ow!g>HvCwLfH(x}bt^kv&R+OHE3~{Mk?2PXi)5tLy+_{f35}RFaJg9%1gHT*tt|eoh2m#i1Os8NAo_OXM zy*d5euEMB{u~FNKL{l~TvJe^0G|@9fYiSobdmE)$sofzfhmUK6K$|czGR>tAfeJDe zJTr64^f$_J+0W=fJq*gdi(zXC=p;^RPmkfjLyKI-V_d7i_H9>gHE#PuHFvoDrr$h4)bDOtPI9liw8PuUJK=ReJiU%rMXs%F&16)>x`%w4J<(F- z#JpmX!>Z7b^lU*Iip`Yt5d*25hJ;~P%lXzP{?YTX?Go%{+eFgbe7iKq^5c!EGtnP! zPV|{>HWkMAh`uWMk0_f2_W5Sm<6`nOnF8uw8K|Yj$bXp?$-x^IiTHbEI8z zX(-~zZD?zp&xXiG9!lxjkk{e;`9%QHwetLKqaOB-n;YCU5&s$0yp3IkvDY zyq>P-YtGuzLZ91GlS-x${To*%+A$A_q)==;K2y0meZ|xRaQ9Ru%_S37a%;YXY?Bv^ z*5*5RMioUT8D4bRk-T+$L}!sP6O=igzceiN?+MMTcaVAdbnkoTo=aj=rtht0q+RGu z|0_~o+bfJJ+vn-&pia-{lvHx{rRCKxeoqBRzl|>))+=*rSE-J@PG*#MWxJc5tlWAr z&=Nx|>W?MvkA4CAM|AVd?`pkS47>+SJDg%T2)}qVuHhQO>e!;^h;V>**;~y+IZl}= zk_ye7E_+0wtgAx{pmR^MZx&eOxNqY+Z%NofJ&X2_Fvi=3p4IYPUx=lImoU5EXc9*I z^sXyqsTuolB6TkrYo~xU9?kKDeJtT3XUJAfLoro2OKSk50b@6|gS|&XPfZax*i9_- z2MXFb+@t2}@r!Q13I_c2@?8jJ6x#T7v7hLt=g-<|0Gd$E`%XAzY9->JW0rVTx9iM0 zr}A9~TmzhAhH>^r-}`phXr-YMCUGc@lXwEuB#F>bEKv(=P9B_t;&TSqdXWMA>2AFE*608{{oJ@*?0f| diff --git a/gifs/p-cap-left.gif b/gifs/p-cap-left.gif deleted file mode 100644 index dc0b2f40e1a79afc243219a5bace55e29f02a6ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmZ?wbhEHblwdGm_{_lY|NsAY@4r2G{QlzAXWRGPSi0t1_tb;M^_x=)S06ZVfB^$2 z{$ycfVBloX0m*>OaA27yaKdx7$dVb&L8`GzeJL*`(^jcHeAUJ9ai5sQg&t@GDj=Z4H;N3AF0yF)U!nPnnR;nLUkja(bUbx7&Q@n3Uv##a?l9O;%21 vU|e1z66qYVu*t`IV?{_`otT7_45uK2;y=Fh%(U{%s>Grcz2y8{1_o;Y?@?iH diff --git a/gifs/p-cap-right.gif b/gifs/p-cap-right.gif deleted file mode 100644 index f918550f73e4348529d0e9a9fb3b7ccd9e9882df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmZ?wbhEHblwdGm_{_lY|NsAY@4r2G{QlzAXWRGPSi0t1_tb;M^_x=)S06ZVfB^$2 z{$ycfVBloX0m*>OaA28jurQfRP~r92;$I0GbsPtKGiFINylOk~dzMkoyiJBBQN40A zrs=0jEaN(M!FPp~0MnkhR{ud}O&c8;nqE-iBNE|}nHl989q>5 Date: Tue, 6 Feb 2001 20:37:12 +0000 Subject: [PATCH 09/49] Better (?) spacing on main page --- include/layout.inc | 47 +++++++++++- include/shared.inc | 7 -- index.php | 187 +++++++++++++++++++++++++++++++++------------ style.css | 17 +++-- 4 files changed, 192 insertions(+), 66 deletions(-) diff --git a/include/layout.inc b/include/layout.inc index 44b89751dc..a7a05afc0d 100644 --- a/include/layout.inc +++ b/include/layout.inc @@ -2,7 +2,7 @@ /* $Id$ */ -# spc() +# spacer() # print a IMG tag for a sized spacer GIF # @@ -16,12 +16,26 @@ function spacer($width=1, $height=1, $align=false) { +# resize_image() +# tag the output of make_image() and resize it manually +# + +function resize_image($img, $width=1, $height=1) { + $str = preg_replace('/width=\"([0-9]+?)\"/i', '', $img ); + $str = preg_replace('/height=\"([0-9]+?)\"/i', '', $str ); + $str = substr($str,0,-1) . sprintf(' height="%s" width="%s">', $height, $width ); + return $str; +} + + + # make_image() # return an IMG tag for a given file (relative to the images dir) # function make_image($file, $alt=false, $align=false, $extras=false, $dir='/gifs', $border=0) { - if ($size = @getimagesize($GLOBALS[BASE_DIR].$dir.'/'.$file)) { + global $HTTP_SERVER_VARS; + if ($size = @getimagesize($HTTP_SERVER_VARS['DOCUMENT_ROOT'].$dir.'/'.$file)) { $image = sprintf('%s', $dir, $file, @@ -84,6 +98,19 @@ function delim($color=false) { +# hdelim() +# print a horizontal delimiter (just a wide line); +# + +function hdelim($color="#000000") { + if (!$color) { + return '


    '; + } + return sprintf('
    ', $color ); +} + + + # make_link() # return a hyperlink to something, within the site # @@ -203,7 +230,20 @@ function commonHeader($title="",$dont_enclose=0) { - - - +

    +Other Languages +

    + +
    + +
    +
    +
    + + +
    +
    diff --git a/include/shared.inc b/include/shared.inc index e44cbd044f..d06a11e661 100644 --- a/include/shared.inc +++ b/include/shared.inc @@ -5,13 +5,6 @@ require_once 'site.inc'; require_once 'layout.inc'; -# figure out the directory root - -if (!$BASE_DIR) { - $BASE_DIR = ereg_replace("/[^/]+/[^/]+$", "", $INCLUDE_DIR); -} - - if($SCRIPT_NAME=="/bugs.php" || $SCRIPT_NAME=="/bugstats.php") { # $my_logo="/jpgs/logo-bug.jpg"; $my_logo="/gifs/logo-bug.gif"; diff --git a/index.php b/index.php index 04c4cdbaf5..f8d8555cd8 100644 --- a/index.php +++ b/index.php @@ -3,84 +3,171 @@ echo "\n\n"; ?> -

    Patch Level 1 released for PHP 4.0.4

    +

    +Patch Level 1 Released For PHP 4.0.4 +

    +

    Due to two security issues found in the Apache module version of PHP 4.0, PHP 4.0.4pl1 has been released. This bug-fix release also fixes a few party-crashing bugs that were discovered in PHP 4.0.4. +
    +

    + + + -

    New usage stats for January available

    + +

    + +New Usage Stats For January Available +

    -PHP Usage Stats -Netcraft and E-Soft have + and + have published the January results for their Web Server surveys - both -of which continue to show impressive growth for PHP. Check out the usage page. +of which continue to show impressive growth for PHP. Check out the +. +
    +

    + + + + + +

    + +PHP Conference - Call For Participation +

    +

    +The conference will be part of the alongside the 5th annual Perl Conference at the +, San Diego, California, July 23-27, 2001. +All the details on submitting talks are in the full .
    +

    + + + + - -

    PHP Conference - Call for Participation

    -The conference will be part of the O'Reilly Open Source -Convention alongside the 5th annual Perl Conference at the Sheraton San -Diego Hotel and Marina, San Diego, California, July 23-27, 2001. All the -details on submitting talks are in the full CFP. - -

    PHP 4.0.4 Released

    -Dec 19, 2000. This release includes -improvements for a large number of defects -and numerous enhancements in the PHP core, -the language implementation and -extensions. Download, -ChangeLog. - -

    PHP 3.0.18 released

    -October 21, 2000. PHP 3.0.18 was released. This is a bug-fix release, including +

    +PHP 4.0.4 Released +

    +

    +19-Dec-2000 -- This release includes improvements for a large number of defects +and numerous enhancements in the PHP core, the language implementation and +extensions. and +. +
    +

    + + + + + +

    +PHP 3.0.18 Released +

    +

    +21-Oct-2000 -- PHP 3.0.18 was released. This is a bug-fix release, including fixes for file uploads and a backported imagetypes() function from PHP 4.0. The -ChangeLog + contains a full list of changes. +
    +

    + + + -

    Improve your PHP skills

    + +

    +Improve Your PHP Skills +

    +

    Looking for clear and useful guides to build dynamic web-sites using -PHP? Our Books Resource Center lists now +PHP? Our lists now more than a dozen books in eight different languages. If you know about more PHP-related books, tell us about them! +
    +

    -

    Manual Search Tip

    + + + + +

    +Manual Search Tip +

    +

    You can go directly to PHP manual pages with a URL such as -php.net/strlen. +. +
    +

    + + + + + +

    +Tips and Tricks Section +

    +

    +Check out our page for some "neat" things, +PHP-related. It's a little sparse right now, but feel free to make suggestions! +
    +

    + + + -

    Tips and Tricks Section

    -Check out our tips page for some "neat" things, PHP-related. -It's a little sparse right now, but feel free to make suggestions! - -

    Zend Optimizer Released!

    -Zend Technologies has announced the availability of -the Zend Optimizer for PHP 4.0. The optimizer is available for -free download. +

    + +Zend Optimizer Released +

    +

    + has announced the +availability of the Zend Optimizer for PHP 4.0. The optimizer is available for +. +
    +

    + + + -

    What is PHP?

    -

    + +

    +What Is PHP? +

    +

    PHP is a server-side, cross-platform, HTML embedded scripting language. If you are completely new to PHP and want to get some idea of how it works, -have a look at the Introductory Tutorial. Once you get -beyond that have a look at the example archive sites and some of the other -resources available in the Links section. -

    +have a look at the . +Once you get beyond that, have a look at the example archive sites and some +of the other resources available in the section. +
    +

    -

    So, how much does it cost?

    -

    + + + + +

    +So, How Much Does It Cost? +

    +

    This may sound a little foreign to all you folks coming from a non-Unix background, but PHP doesn't cost anything. You can use it for commercial and/or non-commercial use all you want. You can give it to your friends, print it out and hang it on your wall or eat it for lunch. Welcome to -the world of Open Source software! +the world of software! Smile, be happy, the world is good. For the full legalese, see the -official license. -

    +official . +
    +

    diff --git a/style.css b/style.css index 6a2077dd53..3b4c011ec5 100644 --- a/style.css +++ b/style.css @@ -1,6 +1,6 @@ body, td, th { font-family: arial,helvetica,sans-serif; - font-size: 12px; + font-size: 13px; } p { @@ -36,7 +36,8 @@ h1 { font-size: 18px; font-weight: bold; color: #000066; - margin-bottom: 5px; + margin-top: 8px; + margin-bottom: 8px; } h2 { @@ -44,7 +45,8 @@ h2 { font-size: 16px; font-weight: bold; color: #000066; - margin-bottom: 5px; + margin-top: 8px; + margin-bottom: 8px; } h3 { @@ -52,6 +54,8 @@ h3 { font-size: 14px; font-weight: bold; color: #000066; + margin-top: 8px; + margin-bottom: 8px; } small { @@ -67,7 +71,7 @@ a.small { .tableTitle { font-family: arial,helvetica,sans-serif; - font-size: 12px; + font-size: 13px; font-weight: bold; } @@ -80,12 +84,12 @@ a.small { input { font-family: arial,helvetica,sans-serif; - font-size: 11px; + font-size: 13px; } textarea { font-family: "andale mono", "monotype.com", "courier new", monospace; - font-size: 11px; + font-size: 13px; } input.small, select.small { @@ -104,3 +108,4 @@ dt { // manual stuff + From ada68d130ba98498ad4b52e45c93895d1acd8a35 Mon Sep 17 00:00:00 2001 From: Colin Viebrock Date: Tue, 6 Feb 2001 20:38:26 +0000 Subject: [PATCH 10/49] Forgot to add this --- manual/phpfi2.php | 5440 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 5440 insertions(+) create mode 100644 manual/phpfi2.php diff --git a/manual/phpfi2.php b/manual/phpfi2.php new file mode 100644 index 0000000000..b53e42c612 --- /dev/null +++ b/manual/phpfi2.php @@ -0,0 +1,5440 @@ + + + + +

    PHP/FI Version 2.0

    +

    Table of Contents

    +
      +
    1. Brief History +
    2. Installation Instructions +
    3. So, what can I do with PHP/FI? +
    4. CGI Redirection +
    5. Security Issues +
    6. Safe Mode +
    7. Running PHP/FI from the Command Line +
    8. HTTP Authentication +
    9. Apache Request Variables +
    10. Apache Module Notes +
    11. Apache Module Configuration Directives +
    12. FastCGI Support +
    13. Access Control +
    14. Access Logging +
    15. Relative vs. Absolute URL's - or, Why do my Images Break? +
    16. How PHP/FI handles GET and POST method data + +
    17. GD (a graphics library for GIF creation) Support in PHP +
    18. PHP/FI and Virtual Hosts +
    19. File Upload Support +
    20. Cookie Support +
    21. mSQL Support +
    22. Postgres95/PostgreSQL Support +
    23. mysql Support +
    24. Solid Support +
    25. Sybase Support +
    26. Oracle Support +
    27. Illustra Support +
    28. Adabas Support +
    29. Regular Expressions +
    30. Escape Characters +
    31. Octal notation of Unix file permissions +
    32. PHP/FI Script Language + +
    33. Adding your own functions to PHP/FI +
    34. Notes for Code Hacks +
    + +
    +

    Brief History

    +

    +PHP began life as a simple little cgi wrapper written in Perl. I +wrote it in an afternoon during a period between contracts when +I needed a quick tool to get an idea of who was reading +my online resume. It was never intended to go beyond my own +private use. The web server where I had my resume was extremely +overloaded and had constant problems forking processes. I rewrote +the Perl wrapper in C to get rid of the considerable overhead of +having to fork Perl each time my resume was accessed.

    + +

    +Eventually other people on the same web server came across my +wrapper and asked if they could use it. Then, as inevitably +happens, they started asking for more features. I added more +features and finally put together a semi-complete distribution +along with documentation, a mailing-list and a FAQ. The name +of this first package was Personal Home Page Tools, which +later became Personal Home Page Construction Kit.

    + +

    +At the same time I started playing with databases and wrote a +tool to easily embed SQL queries into web pages. It was +basically another CGI wrapper that parsed SQL queries and made +it easy to create forms and tables based on these queries. This +tool was named FI (Form Interpreter).

    + +

    +PHP/FI version 2.0 is a complete rewrite of these two packages +combined into a single program. It has now evolved to +the point where it is a simple programming language embedded +inside HTML files. The original acronym, PHP, has stuck. It +isn't really appropriate any longer. PHP/FI is used more for +entire web sites today than for small Personal Home Page +setups. By whatever name, it eliminates the need for numerous small Perl +cgi programs by allowing you to place simple scripts directly in your +HTML files. This speeds up the overall performance of your web pages +since the overhead of forking Perl several times has been eliminated. +It also makes it easier to manage large web sites by placing all +components of a web page in a single html file. By including support +for various databases, it also makes it trivial to develop database +enabled web pages. Many people find the embedded nature much easier +to deal with than trying to create separate HTML and CGI files.

    + +

    +PHP Version 3.0 is yet another rewrite. If you are just starting out +with PHP, I suggest that you start with Version 3.0 instead of +continuing with 2.0 at this point. PHP3 is quickly going to replace +PHP/FI 2.0 and all development efforts are now focused on PHP3. Any +remaining bugs in PHP/FI 2.0 are unlikely to be fixed unless they +are straightforward. More information on PHP3 can be found at +http://www.lerdorf.on.ca/php3. + +

    +Throughout this documentation any references to PHP, FI or PHP/FI +all refer to the same thing. The difference between PHP and FI +is only a conceptual one. Both are built from the same source +distribution. When I build the package without any access logging +or access restriction support, I call my binary FI. When I build +with these options, I call it PHP.

    + +


    +

    Installation Instructions

    + +
    +
    Before You Begin + +

    If you have absolutely no Unix experience, you may want to ask around +for someone with a little bit of Unix knowledge to help you through +this installation. Every attempt has been made to make it as simple +as possible, but since the software is quite involved and relies on a +number of different components, it is not realistic to assume it will +go smoothly on all systems. You will probably need someone around who +knows the particulars of the destination system well.

    + +
    Things You Need To Know Before Installing + +

    - Can you run both get and post method cgi programs on your server?
    +This is not relevant if you installing the Apache module version. + + If not, you can not use this package. On many public ISP's CGI + programs are either disallowed or severely restricted. If this is + the case on your system, talk to your system administrator and ask + him/her to have a look at this package and see if they will install + it for you.

    + +

    - If you have mSQL installed on your system, you need to know the + base directory of this installation.

    + +

    - If you have Postgres95 or PostgreSQL installed on your system, you need to + know the base directory of this installation.

    + +

    - If you are going to be storing log and access configuration files +in an NFS-mounted directory and your system does not provide NFS file locking +then you will need to define the NFS_HACK variable manually in the src/Makefile +and you may want to use a slightly modified version of the gdbm library. See +the nfs_hack.txt file in the doc directory for more information +on this.

    + +

    - Note that if you are not interested in using PHP to track accesses to your +pages, do not compile this option into the binary. You should also leave out +the access restriction code. There is considerable overhead in including these +options.

    + +

    - If you are installing the Apache module version, you will need to know +the Apache src code directory location.

    + +
    Installation Steps + +
    +

    Step 1. +

    +

    + Run the install program: ./install +

    +

    + You will be asked a number of questions. If you do not understand + what is being asked, simply hit return. The default choice should + be safe on most systems. This doesn't apply for the questions + asking you to specify a directory for your configuration and log + files however. Choose any directory to which the httpd (usually "nobody") + has write privileges. You may create this directory manually + somewhere and simply chown nobody directory.

    +

    +Step 2.

    +

    + Go into the src directory: cd src

    + Have a look at the php.h file. There are a number of compile-time + options that can be set here. +

    +Step 3.

    +

    + type: make +

    +

    + This will create the actual executable program file named php.cgi + by default, or if you are installing the Apache module, it will create + a libphp.a file.

    + +

    +Step 4. (if you are not installing the Apache module +version)

    + +

    + Copy the php.cgi binary to your system's cgi-bin directory. If you + do not have access to do this and wish to install it in your own + personal directory, you may do so, but you should set the setuid + bit on the executable with: chmod u+s /path/php.cgi

    +

    + If you do not make set the setuid bit on the binary then any files + created by the binary will be owned by the user id under which the + web server runs. If this is acceptable, then you can safely leave + the setuid bit off.

    + +

    +Step 4. (if you are installing the Apache module version)
    + Change to your Apache src directory where the mod_php.c and mod_php.h + files should have been copied to. If they weren't which usually happens + because of permission problems, copy these two files there manually. + Edit your Apache Configuration file and add the EXTRA_LIBS line which was + produced at the end of Step 3. And add:

    +

    +Module php_module mod_php.o

    +

    + to the very end of the file. Then type: ./Configure and then +make + to rebuild your Apache httpd binary. Install this binary.

    + +

    + Next you need to edit your Apache conf/srm.conf file and add a line like:

    +

    +AddType application/x-httpd-php .phtml

    +

    + This defines a new MIME, application/x-httpd-php, which will trigger the PHP + module to parse any file ending with the .phtml extension. You can + pick any extension you like for this.

    +

    You may not want to enable everyone + to run PHP parsed files. You can place the above AddType line within + <Location /path>....</Location> directives in the access.conf + file to only allow PHP-parsed documents in certain directories on your server.

    +

    + Now you are ready to restart your httpd server. See the Apache + Module Notes for more details on configuring the PHP Module.

    + +

    Testing the software + +
    +

    Once installed you can test to see if your executable works by + entering a URL similar to the following in your browser:

    +

    + http://your.site.domain/cgi-bin/php.cgi

    +

    + This should show you a page which contains the version number along + with various other useful information.

    +

    + To test the Apache module version, create any file with a .phtml + extension and put a tag like: <?phpinfo()> in the file and see if + it gets parsed.

    + +

    Using the software + +
    +

    To actually use the software on an existing HTML file, you can + simply append the path to your file to the above URL. ie.

    +

    + http://your.site.domain/cgi-bin/php.cgi/path/file.html

    +

    +You should have a look at the CGI Redirection +section of this documentation. Running PHP/FI through a redirect +means you can automatically have a URL like http://your.site.domain/file.phtml +be parsed by PHP/FI.

    +

    +This does not apply to Apace module users.

    +

    + +
    +

    So, what can I do with PHP/FI?

    +

    +The first thing you will notice if you run a page through PHP/FI is that +it adds a footer with information about the number of times your page +has been accessed (if you have compiled access logging into the binary). +This is just a very small part of what PHP/FI can +do for you. It serves another very important role as a form interpreter +cgi, hence the FI part of the name. For example, if you create a form +on one of your web pages, you need something to process the information +on that form. Even if you just want to pass the information to another +web page, you will have to have a cgi program do this for you. PHP/FI +makes it extremely easy to take form data and do things with it.

    +

    +A simple example

    +

    +Suppose you have a form:

    +

    +<FORM ACTION="/cgi-bin/php.cgi/~userid/display.html" METHOD=POST>
    +<INPUT TYPE="text" name="name">
    +<INPUT TYPE="text" name="age">
    +<INPUT TYPE="submit">
    +</FORM>

    +

    +Your display.html file could then contain something like:

    +

    +<?echo "Hi $name, you are $age years old!<p>">

    +

    +It's that simple! PHP/FI automatically creates a variable for each +form input field in your form. You can then use these variables in +the ACTION URL file.

    +

    +The next step once you have figured out how to use variables is to start +playing with some logical flow tags in your pages. For example, if you wanted +to display different messages based on something the user inputs, you would +use if/else logic. In our above example, we can display different things +based on the age the user entered by changing our display.html to:

    +

    +

    <?
    +    if($age>50);
    +        echo "Hi $name, you are ancient!<p>";
    +    elseif($age>30);
    +        echo "Hi $name, you are very old!<p>";
    +    else;
    +        echo "Hi $name.";
    +    endif;
    +>

    +

    +PHP/FI provides a very powerful scripting language which will do much more +than what the above simple example demonstrates. See the section on the +PHP/FI Script Language for more information.

    +

    +You can also use PHP/FI to configure who is allowed to access your pages. +This is done using a built-in configuration screen. With this you could +for example specify that only people from certain domains would be allowed +to see your pages, or you could create a rule which would password protect +certain pages. See the Access Control section for more +details.

    +

    +PHP/FI is also capable of receiving file uploads from any RFC-1867 +compliant web browser. This feature lets people upload both text and binary +files. With PHP/FI's access control and logical functions, you have full +control over who is allowed to upload and what is to be done with the +file once it has been uploaded. See the File Upload +section for more details.

    +

    +PHP/FI has support for a database package called mSQL. This allows you to put +information into a database and access this information through simple embedded +SQL queries right in your .HTML files. Adding a database back-end to a web page +has never been easier. See the section on mSQL Support +for more information.

    +

    +PHP/FI has support for the Postgres95/PostgreSQL database package. It supports +embedded SQL queries in your .HTML files. See the section on +Postgres95/PostgreSQL Support for more information.

    +

    +PHP/FI also has support for the mysql database package. It supports +embedded SQL queries in your .HTML files. See the section on +mysql Support for more information.

    +


    +

    CGI Redirection

    + +
    +
    Apache 1.0.x Notes +
    +

    A good way to run PHP/FI is by using a cgi redirection module +with the Apache server. Please note that you do not need to worry +about redirection modules if you are using the Apache module version +of PHP/FI. There are two of these redirection modules available. One +is developed by Dave Andersen <angio@aros.net> and it is available at +ftp://ftp.aros.net/pub/util/apache/mod_cgi_redirect.c +and the other comes bundled with Apache and is called +mod_actions.c. The modules are extremely similar. They differ slightly in their +usage. Both have been tested and both work with PHP/FI.

    +

    +One large caveat at the time of this writing (Apr.20/96) is that the current +official Apache release (1.0.5) has a severe limitation which prevents +cgi redirected requests from having any post-method data associated with +them. I have tracked this down and fixed it in my version of Apache, and there +is an official patch available in the +File Archives on the PHP Home Page.

    +

    A second rather large caveat with Apache 1.0.x is that it does not align +double types correctly on most architectures. You may find yourself getting +strange bus errors from your httpd when using mod_php, either upgrade to +Apache 1.1 or edit the alloc.c Apache source file. In this file you will +find the following piece of code:

    +

      union align
    +  {
    +    /* Types which are likely to have the longest RELEVANT alignment
    +     * restrictions... we don't do much with doubles.
    +     */
    +
    +    char *cp;
    +    void (*f)();
    +    long l;
    +    FILE *fp;
    +  };
    +

    You will need to add a double to this line and recompile your Apache server. +The correct block of code is:

    +

      union align
    +  {
    +    /* Types which are likely to have the longest RELEVANT alignment
    +     * restrictions... we don't do much with doubles.
    +     */
    +
    +    char *cp;
    +    void (*f)();
    +    long l;
    +    FILE *fp;
    +    double d;
    +  };
    +

    These problems have all been fixed in later versions of Apache. + +

    Check the Apache documentation on how to add a module. Generally you +add the module name to a file called Configuration. +The line to be added if you want to use the mod_actions module is:

    +

    +Module action_module mod_actions.o

    +

    +If you are using the mod_cgi_redirect.c module add this line:

    +

    +Module cgi_redirect_module mod_cgi_redirect.o

    +

    +Then compile your httpd and install it. To configure the cgi redirection +you need to either create a new mime type in your mime.types file +or you can use the AddType command in your srm.conf +file to add the mime type. The mime type to be added should be something +like this:

    +

    +application/x-httpd-php phtml

    +

    +If you are using the mod_actions.c module you need to add the following +line to your srm.conf file:

    +

    +Action application/x-httpd-php /cgi-bin/php.cgi

    +

    +If you are using mod_cgi_redirect.c you should add this line to +srm.conf:

    +

    +CgiRedirect application/x-httpd-php /cgi-bin/php.cgi

    +

    +Don't try to use both mod_actions.c and mod_cgi_redirect.c at the same +time.

    +

    +Once you have one of these cgi redirection modules installed and +configured correctly, you will be able to specify that you want a +file parsed by php/fi simply by making the file's extension +.phtml. Furthermore, if you add index.phtml +to your DirectoryIndex configuration line in your +srm.conf file then the top-level page in a directory will be +automatically parsed by php if your index file is called index.phtml.

    + +

    Netscape HTTPD +
    +

    +You can automatically redirect requests for files with a given +extension to be handled by PHP/FI by using the Netscape Server +CGI Redirection module. This module is available in the +File Archives on the +PHP/FI Home Page. The README +in the package explicitly explains how to configure it for use with +PHP/FI.

    + +

    NCSA HTTPD +
    +

    +NCSA does not currently support modules, so in order to do cgi +redirection with this server you need to modify your server source +code. A patch to do this with NCSA 1.5 is available in the +PHP/FI file archives. +

    +

    +

    Security Issues

    +

    +The CGI version of PHP/FI does not read any +.htaccess files which may be present in a directory. This +means that if you have files that are protected using the standard .htaccess +server-based access control feature, people could potentially circumvent +this security by loading the page through PHP/FI. Note that this is not +an issue for the Apache module version of PHP/FI.

    +

    +A second problem with the CGI version is that if it is placed in the system's +cgi-bin directory it can be used to view any file on your system as long as +the user id it runs as has access to it. +

    +There are a couple of different solutions to this problem. The easiest +is probably to use the PATTERN_RESTRICT feature found +in php.h. This lets you define an extension (or a pattern of +extensions) which are allowed to be parsed by PHP/FI. If a file does +not have this extension and someone tries to load it with PHP/FI, an +access denied message will appear.

    +

    +Another solution is to use the PHP/FI access control mechanism to mimic the +access control setup you have in your .htaccess file. Keeping this information +in two places can be tedious though, and the two systems don't share all +of the same features.

    +

    +The problem can also be solved using file permissions. PHP/FI can be set +up to run setuid as any user you wish. Then files that are to be read +by PHP/FI can be given appropriate permissions and files not to be read +by PHP/FI should be owned by another user id and have their permissions +changed accordingly.

    +

    +For additional security options related to sites which provide shared access +to PHP, see the Safe Mode section.

    +


    +

    Safe Mode

    +

    +PHP's Safe Mode tries to solve the common problem faced by many ISP's regarding +letting all their users run CGI programs. The common mechanism for making +shared CGI access more secure is to use a cgi wrapper like the su_exec +utility that comes with Apache. This will not work for PHP when it is running +as a module because it is not a separate process that can be setuid'ed. +

    +It is based on a file permission scheme. Simply put, if a file is either owned +by the same user id as the script that is trying to access it, or if the file is +in a directory that is owned by the same user as the script that is trying to +access it, then the access is allowed. One caveat here is that you must make sure +that your OS does not allow non-root user to chown away the ownership on one of their +files. Many older SysV systems allow this. The most common one is Irix. It is +possible to change this behaviour at the OS level on Irix. +

    +Safe Mode applies to each function which could possibly be a security risk. +Below is the current list of checks applied to each relevant function. In +the following list, PHP UID refers to the user id of the owner of the current +file being parsed by PHP, and HTTP UID refers to the user id the httpd process +is running as (usually nobody). +

    +
    Include, ReadFile, Fopen, File, Link, Unlink, Symlink, Rename, RmDir, ChMod, ChOwn, ChGrp +
    Owner of file to be included must either be the PHP UID or the directory in which the +file resides must be owned by the PHP UID. +
    Exec, System, PassThru and Popen +
    Executables to be forked and executed must reside in the directory +defined by the PHP_SAFE_MODE_EXEC_DIR #define in php.h when PHP is compiled. +
    Mysql_Connect +
    This function takes an optional username to use to connect to an MySQL +database. When in safe mode, this username must either be the username of +the owner of the current file being parsed, or the name of the httpd user +(usually nobody). +
    HTTP Authentication +
    The numerical user id of the owner of the script containing the HTTP Authentication +code will be prepended to the authentication realm. This is to prevent someone from +writing a password grabbing script which spoofs another authenticated page on the +same server. +

    + +


    +

    Running PHP/FI from the command line

    +

    +If you build the CGI version of PHP/FI, you can use it from the command line +simply typing: php.cgi filename where filename is the file you want +to parse. You can also create standalone PHP/FI scripts by making the first +line of your script look something like: +

        #!/usr/local/bin/php.cgi -q
    +The "-q" suppresses the printing of the HTTP headers. You can leave +off this option if you like. +

    +


    +

    HTTP Authentication

    +

    +The HTTP Authentication hooks in PHP/FI are only available when it is running +as an Apache module. In an Apache module PHP/FI script, it is possible to +use the Header() command to send an "Authentication Required" message +to the client browser causing it to pop up a Username/Password input window. +Once the user has filled in a username and a password, the URL containing +the PHP/FI script will be called again with the variables, $PHP_AUTH_USER, +$PHP_AUTH_PW and $PHP_AUTH_TYPE set to the user name, password and +authentication type respectively. Only "Basic" authentication is +supported at this point.

    +

    An example script fragment which would force client authentication on a +page would be the following:

    +

        <?
    +        if(!$PHP_AUTH_USER) {
    +            Header("WWW-authenticate: basic realm=\"My Realm\"");
    +            Header("HTTP/1.0 401 Unauthorized");
    +			echo "Text to send if user hits Cancel button\n"
    +            exit;
    +        } else {
    +            echo "Hello $PHP_AUTH_USER.<P>";
    +            echo "You entered $PHP_AUTH_PW as your password.<P>";
    +        }
    +    >
    +

    +Instead of simply printing out the $PHP_AUTH_USER and $PHP_AUTH_PW, you would +probably want to check the username and password for validity. Perhaps by +sending a query to a database, or by looking up the user in a dbm file.

    +

    +Watch out for buggy Internet Explorer browsers out there. They seem very +picky about the order of the headers. Sending the WWW-authenticate +header before the HTTP/1.0 401 header seems to do the trick for now.

    +

    +In order to prevent someone from writing a script which reveals the password for +a page that was authenticated through a traditional external mechanism, the +PHP_AUTH variables will not be set if external authentication is enabled for +that particular page.

    +

    +Note however that the above does not prevent someone who controls a +non-authenticated URL from stealing passwords from authenticated URL's on the +same server. The PHP_AUTH_VARS define in php.h can be undefined to +make sure that these variables will never be set and thus disable anybody +from using mod_php to try to steal passwords.

    +


    +

    Apache Request Variables

    +

    +When running PHP as an Apache module, you may access the request header +variables sent by the remote browser by prepending $req_ to the +beginning of the header value you would like to use. If the request name +contains a - character such as User-Agent, then you need to map the +- to _ (an underscore). ie. reference it as $req_User_Agent. +The +phpinfo() function can be used to display all the request headers.

    +eg. +

        <
    +        echo "$req_connection<br>";
    +        echo "$req_host<br>";
    +    >
    +The above simple script might output: +
        Keep-Alive
    +    www.host.com
    + +
    +

    Apache Module Notes

    +

    +Running PHP/FI as an Apache module is the most efficient way of using the +package. Running it as a module means that the PHP/FI functionality is +combined with the Apache server's functionality in a single program. There +are a number of advantages to running it as a module:

    +

    +
    Performance +
    +

    Performance-wise it is a lot faster than traditional CGI programs. In fact, +when running PHP/FI as a module, there is no CGI involved. The script code +in the HTML files is executed directly by the Apache web server process.

    + +

    Security +
    +

    When running as a module, the normal httpd-based access restriction rules +defined either in the Apache conf files or in private .htaccess files are first +applied before the module is allowed to parse the file. Alternatively, you +can also create PHP/FI scripts that control the normal httpd-based +authentication. See HTTP Authentication.

    + +

    Configurability +
    +

    Since the parser is always active inside the httpd process, it can be configured +on startup using the same configuration files used to configure the httpd process. +The module can even be configured on a per-directory basis by placing the +PHP configuration directives in the .htaccess files.

    + +

    Basis for custom server-based function +
    +

    For C programmers interested in accessing their functions from within +Apache, the PHP/FI framework provides a very simple interface to Apache +and to PHP itself. It is much easier to add a function to PHP and call that +from a parsed page than it is to write an entire Apache module from scratch. +See the Adding your own internal functions to PHP/FI +sections at the end of this document for further details. +

    + +

    Apache Module Configuration Directives

    +

    +The following directives can be placed either in the srm.conf file, or +within <Directory>...</Directory> tags in access.conf or in +<Location /path>...</Location> tags in access.conf or in +individual .htaccess files. In order for the directives to work in +.htaccess files, the Options override must be set on the AllowOverride Apache +directive, with the exception of the phpEngine directive which is only +available in the *.conf files.

    +

    +
    phpShowInfo on|off +
    Turn the PHP info footers on or off. Default is on.

    +

    phpLogging on|off +
    Turn logging on or off. Default is on.

    +

    phpDebug on|off +
    Turn automatic ?info debug screen on or off. Default is off.

    +

    phpUploadTmpDir directory +
    Set the directory where form-uploaded files will be placed.

    +

    phpDbmLogDir directory +
    Set the directory where dbm-based logging files will be written.

    +

    phpSQLLogDB database +
    Set name of SQL database to use for logging. Default is "phpfi"

    +

    phpSQLLogHost hostname +
    Set hostname where SQL database to use for logging is found. Default is localhost.

    +

    phpAccessDir directory +
    Set the directory where PHP-internal access control files are stored.

    +

    phpMaxDataSpace KiloBytes +
    Max size a sub-pool can grow to within the PHP module. Setting this value +to a low number will minimize the impact that mod_php will have on your system, +but it may also limit people from writing complex scripts. The default is 8K.

    +

    phpIncludePath colon-separated path +
    A colon-separated list of directories where php will look for +files in when running include(). The default +is to look only in the current directory. +

    +

    phpAutoPrependFile file name
    Before +the actual PHP/FI file is parsed, you may give a file name here that +is parsed before the "main file", using PHP's Include() function +(which means phpIncludePath applies for the file name). Keep in mind +that you can make it difficult for yourself to use the Header() +function in the main file if you write HTML from an auto-prepended +file. +

    +

    phpAutoAppendFile file name +
    The name of a file parsed (using PHP's Include() function)after +the actual PHP/FI file has been parsed, similar to phpAutoPrependFile. +

    +

    phpAdaDefDB database +
    Default Adabas database to use. No default value +

    +

    phpAdaUser username +
    Default Adabas database user. No default value +

    +

    phpAdaPW password +
    Default Adabas database password. No default value +

    +

    phpEngine on|off +
    Turn the PHP parsing engine on or off. The default is on and +this directive is only useful for sites that wish to allow directives from the AllowOverride Options +list of directives to function in .htaccess files while at the same time restricting mod_php access. +The common way to handle per-virtual host php installs is to enable the PHP mime type with an AddType +directive on a per virtual host basis and then put "e;phpEngine off" in the non-PHP virtual +host blocks. If a non PHP customer tries to circumvent things by placing the PHP mime type in +their .htaccess, the phpEngine off setting restricts the PHP parser from functioning. +
    phpLastModified on|off +
    Since php pages are dynamic, they are processed and sent to the browser each +time you access them. +But sometimes, when you use php for basic includes, the parsed page does not +change as long as the source doesn't. It that case, you may want to avoid page +regeneration/reloading. +If phpLastModified is turned on Apache will send the Last-Modified tag to the browser, so that +the page will only be reloaded when it changes. +(not that if you are using page logging, multiple accesses will not be logged!) +
    +

    +All of these directives are optional. If a directive is not specified anywhere, +the compile-time default will be used.

    + +


    +

    FastCGI Support

    +

    +PHP/FI can be compiled with FastCGI support. +You will need fetch and compile +FCGI Development Kit for your platform before +compiling PHP/FI. You will also need to get CGI Redirection working. +Then follow the instructions in the FastCGI documentation for configuring FastCGI +for your platform. If you are using the mod_fastcgi module with the Apache server, here +are the step-by-step instructions:

    +

      +
    • Edit your Apache Configuration file and add the mod_fastcgi module, then recompile Apache. +
    • Edit your srm.conf file and add lines similar to:
      + +AddType application/x-httpd-fcgi .fcgi
      +AppClass /usr/local/etc/httpd/fcgi-bin/php.fcgi -processes 4
      +AddType application/x-httpd-fphp .fhtml
      +Action application/x-httpd-fphp /fcgi-bin/php.fcgi
      +
      +
    • Copy your php.cgi binary to /usr/local/etc/httpd/fcgi-bin/php.fcgi +

    +

    +Now, any pages with the .fhtml extension will be handed off to the FastCGI php.fcgi +process which is already running. The php.fcgi binary will still work as a normal +CGI binary, so you could just create a symbolic link from php.cgi to php.fcgi.

    +

    If you are not using Apache, the above steps will be similar, but not identical. +CGI Redirection mechanisms are available for NCSA and Netscape servers at the +PHP/FI File Archive.

    +


    +

    Access Control

    +

    +Note that the built-in PHP/FI based access control is likely to be discontinued +in future versions. You should seriously consider using the security mechanism +that comes with your web server instead. +

    +If you chose to include access control when you compiled the package, you +may append ?config to any URL to edit the access control file. ie.

    +

    +http://your.machine.domain/cgi-bin/php.cgi/path/file.html?config

    +

    +Your configuration password will initially be set to your user id. If your user +id does not work as your password, it probably means that PHP could not read +the /etc/passwd file to locate your user id. If this is the case, the initial +password will be set to "php". It is a good idea to change this password. +Note that multiple users may maintain their own personal configuration files +through a single PHP/FI binary.

    +

    +Access Control can be quite confusing initially. The ?config screen is divided up +into a number of sections. The top section is for changing the password used to +make sure that only people who know this password can change access control +characteristics. In a system-wide installation, each user has his or her own +configuration screen with his or her own password.

    +

    +The second section of the ?config screen consists of a number of tables. Each +table defines a rule-set. The first rule-set is always the default rule-set. +This default rule-set is used if a page does not have a rule-set defined specifically +for it. After the default rule-set, any number of specific rule-set tables will +follow.

    +

    +To add a rule-set for a specific file, enter the URL of the file in your browser and +add ?config to the end of the URL. On the ?config screen that comes +up you will see that a rule-set has been added for this page, if it wasn't already +there. When a new rule-set is added, it is initially set to be the same as the +default rule-set. The following picture shows two simple rule-sets. First a +default rule-set which just indicates that hits from all domains should be +logged, and second, for the file /~rasmus/test.html and only that file, any +users coming from a ".edu" domain will not be granted access.

    +

    +[Image of ?config screen]

    +

    +To edit a rule-set modify the fields until the desired configuration is +reached within a rule-set and then hit the "Submit Changes" +button. If more rules are needed, hit the "Add Rule" +button and then edit the added rule.

    +

    +To delete a rule, select the checkbox to the right of the rule and +hit the "Submit Changes" button. The screen will +redraw and the rule should disappear.

    +

    +Note that you need to enter a regular expression in the pattern field. +See the section on regular expressions in this documentation for more +details.

    +


    +

    Access Logging

    +

    +Access Logging is another optional feature which can be enabled at compile-time +by answering Yes to the question in the install script. You may either +store your access log data in dbm files, in an mSQL database, or in an mysql +database. The latter two are more powerful, but is also a bit more difficult +to set up.

    +

    +To use dbm files for storing your access logs, you will need to specify a +directory in which log files can be written. PHP will try to create this +directory if it doesn't exist, but to make sure it has the proper +permissions, you may want to create this directory yourself before running +PHP for the first time. The permissions on the directory should be such +that the user id under which the PHP cgi program will run can write to the +directory.

    +

    +To use an mSQL or mysql database for storing your access log data, you need +to first make sure you have mSQL or mysql installed and running on your +system. Then you need to create a database. The default name is +"phpfi" although this can be changed in src/php.h. +To create this database for mSQL, type:

    +

    +

        msqladmin create phpfi

    +or for mysql type: +

        mysqladmin create phpfi

    +

    +Then for mSQL, edit your msql.acl file and make sure the permissions +on the database are correct. Something like the following should suffice:

    +

    +

        database=phpfi
    +    read=*
    +    write=nobody,<your user id>
    +    access=local

    +

    +For mysql, you need to make sure the httpd user (usually "nobody") +has access to the database. Unlike mSQL, mysql stores access control data +in a database. Assuming default permissions, you should be able to simply +execute the following command:

    +

        echo "INSERT INTO user VALUES ('localhost','nobody','','Y','Y','Y','Y','Y','Y','Y','Y','Y');" | mysql mysql

    +Don't forget to load this new configuration with:

    +

        mysqladmin reload

    +For each user id for whom you want to store log data, you need to create two +tables. The msqllog shell script in the scripts directory will do +this for you. Simply type:

    +

    +

        msqllog <user id> 

    +or for mysql, type: +

        mysqllog <user id> 

    +

    +and the script will create the appropriate tables. You may need to edit the +script to make it reflect where things are stored on your system.

    +

    +You may want to have a look at this script. It defines the field sizes of your +log tables. If, for example, you know that your file paths exceed 64 +characters, you need to bump up the filename size in both the logN +and the lastN tables in this msqllog or mysqllog +file.

    +

    +Access logging stores information about each "hit" on a page. This +information can then be summarized by examining these log files. An example +log file summarizing script is included in the package. It is the +log.html file in the examples directory. This is the dbm +log file analyzer. The mSQL log file analyzer is called mlog.html. +And the mysql log file analyzer is called mylog.html. +To run it, copy it and the other mlog.* files to a directory accessible from +your web server and type:

    +

        http://your.machine.domain/cgi-bin/php.cgi/path/mlog.html

    +Or, if you are using the Apache module version, you can give the script +a ".phtml" extension and call it with:

    +

        http://your.machine.domain/path/mlog.phtml
    +

    +By default, if you have compiled PHP with access logging enabled, then your +pages will appear with a footer containing some access information. +You may not want to see this footer, but still log hits. You can turn off this +footer with a "phpShowInfo off" line in your Apache httpd.conf or +.htaccess files if you are running Apache. If you are not running Apache, +you may turn these log footers off either by creating a rule in the +?config section for the page, or by adding a tag like this +to your page:

    <?setshowinfo(0)>

    + +


    Relative vs. Absolute URL's - or, Why do my Images Break?

    +

    A problem common to all CGI wrappers is that the HTTPD program changes the current +directory to the directory where whatever it is loading is stored. In the case +of a CGI program, the current directory is set to the directory where the CGI +program resides. This is normally not a problem, except when it comes to relative +URL's.

    +

    +A relative URL is a URL which relies upon the current directory being the same +as the directory where the current HTML file is located. So, for example, if +I had the URL:

    +

    +

        http://my.machine/~rasmus/file.html

    +

    +the actual HTML file might be:

    +

    +

        ~rasmus/public_html/file.html

    +

    +If within the file.html file I had the tag:

    +

    +

        <IMG SRC="pic.gif">

    +

    +when loaded normally this file gif file is expected to be in +~rasmus/public_html/pic.gif. However, when loaded through a CGI +wrapper with a URL like:

    +

    +

        http://my.machine/cgi-bin/php.cgi/~rasmus/file.html

    +

    +then HTTPD sets the current directory to /cgi-bin +(or wherever the ScriptAlias might point) +and subsequently when the page is loaded the pic.gif file is expected to be +in: /cgi-bin/pic.gif which is usually not the desired effect.

    +

    +The quick way around this problem is to use absolute URL's. In the above example +if the image tag had been:

    +

        <IMG SRC="/~rasmus/pic.gif">
    +

    +then there would have been no problem. Using absolute URL's is not always +desirable as it makes pages less portable. An obvious question you may have at +this point is, "Why doesn't PHP just change the current directory to the right +place?". The answer is that PHP actually does change the current directory +to the location of the HTML file it is displaying. Any file paths used inside +PHP Script tags, can be relative. The problem is that tags outside of PHP's +control such as <img > and <a href > will not be passed through +PHP. When they are parsed, PHP is no longer active and the current working +directory has been set back to the directory specified by the HTTP Daemon.

    +

    +The Solution is a compromise. PHP provides a variable called +PATH_DIR. +It contains the directory portion of the current HTML file at all times. If this +PATH_DIR variable is used in the <img > and <a href > tags then the +effect of a relative URL can be achieved, although to the server it will look like +an absolute URL when parsed. From our above example, the only change we +would need to make would be to change the img tag to: +

        <IMG SRC="<?echo $PATH_DIR>/pic.gif">
    +By using the above, you can move the file containing this tag around, and the +tag will always refer to a pic.gif file in the same directory as +the source HTML file.

    +

    +Another way to handle this is to use the traditional <BASE HREF=...> in +the HTML file.

    +


    +

    How PHP handles GET and POST method data

    +

    +PHP will detect both GET and POST method data coming from HTML forms. +One important point to understand is that POST method data is always +treated first if both are present. If a PHP variable is defined by the POST +method data, or if the variable is defined by the HTTP daemon in the Unix +environment, then GET method data cannot overwrite it. This is to prevent +somebody from adding ?REMOTE_HOST=some.bogus.host to their URL's +and thus tricking the PHP logging mechanism into recording this alternate +data. POST method data is however allowed to overwrite these variables.

    +

    +Any component of the GET data (the data following a '?' in the URL) which is +of the form, word=something will define the variable $word to +contain the value something. Even if the data is not of this form, +it can be accessed with the $argv built-in array. For example, in a URL like:

    +

        /cgi-bin/php.cgi/file.html?abc+def+EMAIL_ADDR=rasmus@lerdorf.on.ca&var=value
    +The relevant components of the PHP symbol table will be:

    +

        $argc       = 4
    +    $argv[0]    = abc
    +    $argv[1]    = def
    +    $argv[2]    = EMAIL_ADDR=rasmus@lerdorf.on.ca&var=value
    +    $EMAIL_ADDR = rasmus@lerdorf.on.ca
    +    $var        = value
    +

    +Notice how the EMAIL_ADDR part of the data shows up both as $argv[2] where it is +unparsed, and the $EMAIL_ADDR variable is created to contain rasmus@lerdorf.on.ca.

    +

    +The $EMAIL_ADDR variable was used as an example in the above because it +is a useful variable if you are using the logging features of PHP. By adding:

    +

        ?EMAIL_ADDR=
    +

    +to any links on a page where the user's email address is known, you may propagate +it to the next page. The PHP logging system will automatically look for this +variable and record its value as the user's e-mail address in the logs. For +any users of PHP1, the above serves the same function as adding +?<!--$email--> to the URL used to do in PHP1. It looks a little +bit more complex now, but it is also completely general allowing you to +build your own complex pages.

    +

    +In the above example you can also see how multiple variables can be defined +right in the GET method data by separating each with the "&" character. This +"&" separated list of variables must be the last (or only) component of the +GET method data for it to be valid.

    +

    +SELECT MULTIPLE and PHP

    +

    +The SELECT MULTIPLE tag in an HTML construct allows users to select +multiple items from a list. These items are then passed to the action +handler for the form. The problem is that they are all passed with the +same widget name. ie.

    +

        <SELECT NAME="var" MULTIPLE>
    +

    +Each selected option will arrive at the action handler as:

    +

    +var=option1
    +var=option2
    +var=option3

    +

    +Each option will overwrite the contents of the previous $var variable. +The solution is to use PHP/FI's non-indexed array feature. The following +should be used:

    +

    +

        <SELECT NAME="var[]" MULTIPLE>

    +

    +This tells PHP/FI to treat var as an array an each assignment of +a value to var[] adds an item to the array. The first item becomes $var[0], +the next $var[1], etc. The count() function can be +used to determine how many options were selected, and the +sort() function can be used to sort the option array if necessary.

    +


    +IMAGE SUBMIT and PHP

    +

    +When submitting a form, it is possible to use an image instead of the standard +submit button with a tag like:

    +

    +

        <input type=image src=image.gif name=sub>

    +

    +When the user clicks somewhere on the image, the accompanying form will be +transmitted to the server with two additional variables, sub_x and +sub_y. These contain the coordinates of the user click within the +image. The experienced may note that the actual variable names sent by the +browser contains a period rather than an underscore, but PHP converts the +period to an underscore automatically. +

    +


    +

    +

    GD (a graphics library for GIF creation) Support in PHP

    +PHP supports the GD library version 1.2 written by Thomas Boutell. There is no GD +code in PHP itself. If you wish to use the GD support in PHP/FI, you must obtain the +GD library from +http://www.boutell.com/gd/http/gd1.3.tar.gz, install it, and then re-install PHP.

    +Not all of the GD features are supported by PHP. For a list of supported functions see +the Alphabetical List of Functions. All the GD functions +start with the word, Image.

    More information on the GD package is available at: +http://www.boutell.com/gd/.

    +

    +GD 1.2 is copyright 1994, 1995 Quest Protein Database Center, Cold Springs Harbor Labs.

    +


    +

    +

    PHP/FI and Virtual Hosts

    +PHP works fine on virtual host setups supported by some http daemons. The one +problem that may occur on such a setup is related to an inconsistency in the +way httpd sets the SCRIPT_NAME environment variable. Normally it is set to the +path of the current CGI program in relation to the top-level ROOT_DIR on the +httpd server. However, when a virtual domain is used, some httpd's do not +correctly set the SCRIPT_NAME variable as the relative path from the virtual +domain's top level directory as it should. If the ?config screen gives you +an invalid URL error message, you know that this problem exists on your setup. +You will need to edit the php.h file and set the VIRTUAL_PATH #define to +the path to your php.cgi binary relative to your top-level directory.

    +


    +

    File Upload Support

    +

    +PHP/FI will automatically detect a file upload from a browser which supports the +form-based file upload features as proposed by +E. Nebel +and L. Masinter from Xerox and described in +RFC 1867.

    +A file upload screen can be built by creating a special form which looks +something like this:

    +

    +

    + + <FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST> + +
    <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000"> + +
    Send this file: <INPUT NAME="userfile" TYPE="file"> + +
    <INPUT TYPE="submit" VALUE="Send File"> + +
    </FORM> + +
    +

    +

    +The _URL_ should point to a php html file. The MAX_FILE_SIZE hidden +field must precede the file input field and its value is the maximum filesize +accepted. The value is in bytes. In this destination file, the following +variables will be defined upon a successful upload:

    + +

    +
    $userfile +
    +

    The temporary filename in which the uploaded file was stored on the server machine.

    +

    $userfile_name +
    +

    The original name of the file on the sender's system.

    +

    $userfile_size +
    +

    The size of the uploaded file in bytes.

    +

    $userfile_type +
    +

    The mime type of the file if the browser provided this information. An example would +be "image/gif".

    +

    +

    The $userfile basename of the above variables will match the +NAME field in the upload form.

    +

    +Files will by default be stored in the server's default temporary directory. This +can be changed by setting the environment variable TMPDIR in the environment in which +PHP/FI runs. Setting it using a PutEnv() call from within a PHP/FI script will not +work though. Alternatively, you may hard-code in a temporary directory by editing +php.h and defining the UPLOAD_TMPDIR variable.

    +

    +The PHP/FI script which receives the uploaded file should implement whatever +logic is necessary for determining what should be done with the uploaded file. +You can for example use the $file_size variable to throw away any files that are +either too small or too big. You could use the $file_type variable to throw away +any files that didn't match a certain type criteria. Whatever the logic, you should +either delete the file from the temporary directory or move it elsewhere.

    +

    +Please note that the CERN httpd seems to strip off everything starting at +the first whitespace in the content-type mime header it gets from the +client. As long as this is the case, CERN httpd will not support the +file upload feature.

    + +


    +

    Cookie Support

    +

    PHP/FI transparently supports HTTP cookies as defined by +Netscape's Spec. +Cookies are a mechanism for storing data in the remote browser and thus tracking +or identifying return users. +You can set cookies using the SetCookie() function. Cookies are part of the HTTP header, so the SetCookie() function must be +called before any output is sent to the browser. This is the same +restriction as for the Header() function.

    +Any cookies sent to you from the client will automatically be turned into a PHP/FI +variable just like GET and POST method data.

    +

    If you wish to assign multiple values to a single cookie, just add [] +to the cookie name. For example:

    +

        SetCookie("MyCookie[]","Rasmus Lerdorf", time()+3600);
    +Note that a cookie will replace a previous cookie by the same name in your browser +unless the path or domain is different. So, for a shopping cart application you may +want to keep a counter and pass this along. ie.

    +

        
    +    $Count++;
    +    SetCookie("Count",$Count, time()+3600);
    +    SetCookie("Cart[$Count]",$item, time()+3600);
    +
    +

    mSQL Support

    +

    mSQL stands for mini-SQL and is a small and simple SQL database engine written +by David Hughes. It is available from +ftp://ftp.bond.edu.au/pub/Minerva/msql

    +

    +PHP/FI supports has a rich set of mSQL support functions: +

    +

    +
    msql() +
    msql_Close() +
    msql_Connect() +
    msql_CreateDB() +
    msql_dbName() +
    msql_DropDB() +
    msql_FieldFlags() +
    msql_FieldLen() +
    msql_FieldName() +
    msql_FieldType() +
    msql_FreeResult() +
    msql_ListDBs() +
    msql_Listfields() +
    msql_ListTables() +
    msql_NumFields() +
    msql_NumRows() +
    msql_RegCase() +
    msql_Result() +
    msql_TableName() +
    +

    +In addition to these functions, PHP/FI can also be compiled to automatically +escape any forward single quote ( ' ) characters found in GET or POST data. +If the MAGIC_QUOTES variable is defined in the php.h file then +these quotes will be automatically escaped making it easier to pass +form data directly to msql queries.

    +


    +

    Postgres95/PostgreSQL Support

    +

    +Postgres95/PostgreSQL is a powerful public domain database that implements a significant +subset of the SQL language. It supports many datatypes and commands that +are not available in mSQL. More information about Postgres and the software +itself can be found at this URL: + +http://www.postgreSQL.org/.

    +

    +The following PHP functions are available for Postgres95:

    +

    +
    pg_Connect() +
    pg_Close() +
    pg_Host() +
    pg_Port() +
    pg_Options() +
    pg_tty() +
    pg_DBname() +
    pg_Exec() +
    pg_Result() +
    pg_FreeResult() +
    pg_GetLastOid() +
    pg_NumRows() +
    pg_NumFields() +
    pg_FieldNum() +
    pg_FieldName() +
    pg_FieldType() +
    pg_FieldSize() +
    pg_FieldPrtLen() +
    pg_errorMessage() +
    +

    +Note: Binary cursors are not supported. +

    +

    +In addition to these functions, PHP/FI can also be compiled to automatically +escape any forward single quote ( ' ) and double quote ( " ) characters +found in GET or POST data. If the MAGIC_QUOTES variable is defined in the +php.h file then these quotes will be automatically escaped making +it easier to pass form data directly to Postgres queries.

    +

    +Here is a sample script that connects to Postgres database on localhost +called 'mydb' and retrieves the names and ages of people in a table:

    +

    +

    +<?
    +   $conn = pg_Connect("localhost", "5432", "", "", "mydb");
    +   if (!$conn) {
    +      echo "An error occured.\n";
    +      exit;
    +   }
    +
    +   $result = pg_Exec($conn, "select * from table1");
    +   if (!$result) {
    +      echo "An error occured.\n";
    +      exit;
    +   }
    +
    +   $num = pg_NumRows($result);
    +   $i = 0;
    +
    +   while ($i < $num) {
    +      echo "name: ";
    +      echo pg_Result($result, $i, "name");
    +      echo "  age: ";
    +      echo pg_Result($result, $i, "age");
    +      echo "<BR>";
    +      $i++;
    +   }
    +
    +   pg_FreeResult($result);
    +   pg_Close($conn);
    +>
    +

    + +


    +

    mysql Support

    +

    mysql is an clone of the mSQL package. You can get a copy from +http://www.tcx.se/

    +

    +PHP/FI supports has a rich set of mysql support functions: +

    +

    +
    mysql() +
    mysql_Close() +
    mysql_Connect() +
    mysql_CreateDB() +
    mysql_dbName() +
    mysql_DropDB() +
    mysql_FieldFlags() +
    mysql_FieldLen() +
    mysql_FieldName() +
    mysql_FieldType() +
    mysql_FreeResult() +
    mysql_ListDBs() +
    mysql_Listfields() +
    mysql_ListTables() +
    mysql_NumFields() +
    mysql_NumRows() +
    mysql_Result() +
    mysql_TableName() +
    +

    +In addition to these functions, PHP/FI can also be compiled to automatically +escape any forward single quote ( ' ) characters found in GET or POST data. +If the MAGIC_QUOTES variable is defined in the php.h file then +these quotes will be automatically escaped making it easier to pass +form data directly to mysql queries.

    +


    +

    Solid Support

    +

    +The Solid server is a high-volume SQL server. It supports the ANSI SQL2, ODBC, +SAG CLI and X/Open SQL standards. More information about the Solid server is +available at www.solidtech.com. +The Solid interface to PHP was developed by +DigiFace Internet Services. +

    +The following PHP functions are available for the Solid Server:

    +

    +
    Solid_Connect() +
    Solid_Close() +
    Solid_Exec() +
    Solid_Result() +
    Solid_FreeResult() +
    Solid_NumRows() +
    Solid_NumFields() +
    Solid_FieldNum() +
    Solid_FieldName() +
    +

    +In addition to these functions, PHP/FI can also be compiled to automatically +escape any forward single quote ( ' ) characters found in GET or POST data. +If the MAGIC_QUOTES variable is defined in the php.h file then +these quotes will be automatically escaped making it easier to pass +form data directly to Solid queries.

    +

    +Here is the same script that was shown in the Postgres section, adapted for +the Solid server. +

    +

    +<?
    +   $conn = Solid_Connect("", "username", "password");
    +   if (!$conn) {
    +      echo "An error occured.\n";
    +      exit;
    +   }
    +
    +   $result = Solid_Exec($conn, "select * from table1");
    +   if (!$result) {
    +      echo "An error occured.\n";
    +      exit;
    +   }
    +
    +   while (Solid_FetchRow($result)) {
    +      echo "name: ";
    +      echo Solid_Result($result, "name");
    +      echo "  age: ";
    +      echo Solid_Result($result, "age");
    +      echo "<BR>";
    +   }
    +
    +   Solid_FreeResult($result);
    +   Solid_Close($conn);
    +>
    +

    + +


    +

    Sybase Support

    +The supporting functions uses Sybase DB library API calls. Therefore +you must have sybase API libraries and headers files installed in your +system in order to compile PHP/FI with sybase support. +

    +The following PHP/FI functions are available for Sybase.

    +

    +
    SybSQL_CheckConnect() +
    SybSQL_Connect() +
    SybSQL_DBuse() +
    SybSQL_Exit() +
    SybSQL_Fieldname() +
    SybSQL_GetField() +
    SybSQL_IsRow() +
    SybSQL_NextRow() +
    SybSQL_NumFields() +
    SybSQL_NumRows() +
    SybSQL_Query() +
    SybSQL_Result() +
    SybSQL_Result_All() +
    SybSQL_Seek() +

    +For a complete example, see the example following the +sybSQL_Result() function.

    + +


    +

    Oracle Support

    +The PHP/FI interface to Oracle uses the Oracle Call Interface (OCI). +You need the OCI libraries on your system to compile PHP/FI with +Oracle support. +

    +The following PHP/FI functions are available for Oracle:

    +

    +
    Ora_Bind() +
    Ora_Close() +
    Ora_Commit() +
    Ora_CommitOff() +
    Ora_CommitOn() +
    Ora_Exec() +
    Ora_Fetch() +
    Ora_GetColumn() +
    Ora_Logoff() +
    Ora_Logon() +
    Ora_Open() +
    Ora_Parse() +
    Ora_Rollback() +

    +An example PHP/FI Oracle application: +

    +<?
    +PutEnv("ORACLE_HOME=path_to_your_oracle_home"
    +PutEnv("ORACLE_SID=database"
    +
    +/* Establish a connection between PHP and Oracle. */
    +$conn = Ora_Logon("username" "password"
    +
    +if ($conn < 0) {
    +    echo("Could not connect to Oracle.\n"
    +    exit;
    +}
    +
    +/* Open a cursor in Oracle. */
    +$cursor = Ora_Open($conn);
    +
    +if ($cursor < 0) {
    +    echo("Could not open a cursor.\n"
    +    Ora_Logoff($conn);
    +    exit;
    +}
    +
    +/* Turn off autocommit. */
    +Ora_CommitOff($conn);
    +
    +/* This is the SQL query. */
    +$query = "SELECT * FROM some_table"
    +
    +if (Ora_Parse($cursor, $query) < 0) {
    +    echo("Parse failed!\n"
    +    Ora_Logoff($conn);
    +    exit;
    +}
    +
    +/* Execute the SQL statement associated with $cursor and
    +   prepare storage for select-list items. */
    +$ncols = Ora_Exec($cursor);
    +
    +echo "lt;P>\n"
    +echo "lt;TABLE BORDER=1 CELLSPACING=0>\n"
    +
    +/*  Retrieve all rows from the database one after another. */
    +while (Ora_Fetch($cursor) == 1) {
    +    $i = 0;
    +    echo "lt;TR>\n"
    +    while ($i < $ncols) {
    +     /* Get data for a single column of currently fetched row. */
    +     $col = Ora_GetColumn($cursor, $i);
    +        echo("lt;TD>$col</TD>\n"
    +     $i++;
    +    }
    +    echo("lt;/TR>\n"
    +}
    +
    +echo "</TABLE>\n";
    +
    +/* Close the Oracle connection. */
    +Ora_Close($cursor);
    + 
    +/* Disconnect the logon data area. */
    +Ora_Logoff($conn);
    +>
    +
    +

    +


    +

    Informix Illustra Support

    +

    +Illustra is a commercial database sold by Informix. It has several features that +are not fully supported by this interface (yet). The main claim to fame for +Illustra is that it is an object-relational database capable of being extended +in an object-orientated fashion. For example, it is possible to have an Image +as a base type within the database. More information can be obtained from +The illustra home page.

    +

    +The following PHP functions are available for Illustra:

    +

    +
    mi_Connect() +
    mi_Close() +
    mi_DBname() +
    mi_Exec() +
    mi_Result() +
    mi_NumRows() +
    mi_NumFields() +
    mi_FieldNum() +
    mi_FieldName() +
    +

    +Note: Type operations are not yet supported. +

    +

    +Here is a sample script that connects to the illustra database on localhost +called 'mydb' and retrieves the names and ages of people in a table:

    +

    +

    +<?
    +   $conn = mi_Connect("mydb", "username", "password");
    +   if ($conn<0) {
    +      echo "An error occured on connection.\n";
    +      exit;
    +   }
    +
    +   $result = mi_Exec($conn, "select * from table1");
    +   if ($result < 0) {
    +      echo "An error occured.\n";
    +      exit;
    +   }
    +
    +   $num = mi_NumRows($result);
    +   $i = 0;
    +
    +   while ($i < $num) {
    +      echo "name: ";
    +      echo mi_Result($result, $i, "name");
    +      echo "  age: ";
    +      echo mi_Result($result, $i, "age");
    +      echo "<BR>";
    +      $i++;
    +   }
    +
    +   mi_Close($conn);
    +>
    +

    +


    +

    Adabas Support

    +

    +Adabas D is an advanced RDBMS that is available on many platforms. A special version, +the so called Personal Edition is available for Linux and Win32 at no cost. +It is resticted to 5 simulataneous users and 100 MB of data. +For more information on Adabas D refer to +http://www.softwareag.com. +

    +The following PHP functions are available for accessing Adabas databases:

    +

    +
    Ada_Connect() +
    Ada_Close() +
    Ada_Exec() +
    Ada_Result() +
    Ada_ResultAll() +
    Ada_FreeResult() +
    Ada_NumRows() +
    Ada_NumFields() +
    Ada_NumRows() +
    Ada_NumFields() +
    Ada_FieldNum() +
    Ada_FieldName() +
    Ada_FieldType() +
    +Here is the same script that was shown in the Postgres and Solid sections, adapted for +Adabas D. +

    +

    +<?
    +   $conn = Ada_Connect("node:db", "username", "password");
    +   if (!$conn) {
    +      echo "An error occured.\n";
    +      exit;
    +   }
    +
    +   $result = Ada_Exec($conn, "select * from table1");
    +   if (!$result) {
    +      echo "An error occured.\n";
    +      exit;
    +   }
    +
    +   while (Ada_FetchRow($result)) {
    +      echo "name: ";
    +      echo Ada_Result($result, "name");
    +      echo "  age: ";
    +      echo Ada_Result($result, "age");
    +      echo "<BR>";
    +   }
    +
    +   Ada_FreeResult($result);
    +   Ada_Close($conn);
    +>
    +

    + +


    +

    Regular Expressions

    +

    +Regular expressions are used for complex string manipulation in PHP/FI. +The script interface to the regular expression support is through the following +functions: +EReg(), +ERegi(), +EReg_Replace(), +ERegi_Replace(), +Reg_Match(), +Reg_Replace(), and +Reg_Search(). +The first argument to all three functions is a regular expression string. +The EReg functions use the Posix Extended regular expressions as defined +by POSIX 1003.2, while the Reg functions implement Basic regular +expressions. For a complete description of regular expressions see your +regex(7) man page. If you do not have this page, the regex(7) man page +written by Henry Spencer can be found in the src/regex directory in the +PHP/FI distribution. Ask your system administrator to install this +man page for you.

    +Some examples of regular expressions and what they do:

    +

    +
    +
    ereg("abc",$string); +
    Returns true if "abc" is found anywhere in $string.

    +

    ereg("^abc",$string); +
    Returns true if "abc" is found at the beginning of $string.

    +

    ereg("abc$",$string); +
    Returns true if "abc" is found at the end of $string.

    +

    eregi("(ozilla.[23]|MSIE.3)",$HTTP_USER_AGENT); +
    Returns true if client browser is Netscape 2, 3 or MSIE 3.

    +

    ereg("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)",$string,$regs);
    +
    Places three space separated words into $regs[1], $regs[2] and $regs[3].

    +

    ereg_replace("^","<BR>",$string) +
    Put a <BR> tag at the beginning of $string.

    +

    ereg_replace("$","<BR>",$string) +
    Put a <BR> tag at the end of $string.

    +

    ereg_replace(10,"",$string); +
    Get rid of any linefeed characters in $string.

    +

    ereg_replace(13,"<BR>",$string); +
    Replace all carriage returns with a <BR> tag in $string.

    +

    +
    +
    +

    Escape Characters

    +

    +The following escape sequences are supported in most places where a +quoted string argument is used: +

    +
    	\a --> bell
    +	\b --> backspace
    +	\n --> linefeed
    +	\r --> carriage return
    +	\t --> tab
    +	\nnn --> octal char
    +	\xXX --> hex char
    +

    +


    +

    Octal Notation of Unix file permissions

    +

    +A couple of functions in the PHP/FI script language epxect octal arguments +to denote Unix-style permission parameters. +In this octal notation 3 bits are used to represent the values 0-7. Each bit of +the three represents a specific permission. Octal is traditionally noted +in some contexts by a leading 0, such as 0755. You do not need to use this +leading 0 in PHP since the functions that expect octal parameters are will +simplyassume that the parameter is octal. Using the leading 0 is however good +practise to remind yourself that you are no longer dealing with a base 10 value. +

    Bit Description +

        xxx
    +    ^^^
    +    ||+----1 bit (execute permission)
    +    |+-----2 bit (write permission)
    +    +------4 bit (read permission)
    + +These three bits are repeated three times for owner, group, and world. +Thus 0755 means: + +
        owner: r,w,x
    +    group: r, ,x
    +    world: r, ,x
    + +Note that the execute bit on a directory means 'access', not 'execute'. +There are also the extended bits in the fourth octal nibble, like 0?755: +
        4: suid bit   (set userid)
    +    2: sgid bit   (set group id)
    +    1: sticky bit (on a directory, only the owner can delete a file)
    +

    +


    +

    PHP/FI Script Language

    +

    +The PHP script language is similar in syntax to the C language in many ways. +It supports variables, arrays, function calls, different variable types +and most things you might need to write complex cgi programs.

    +

    +Each PHP/FI function is described in the following section and can be quickly +found by simply appending #function_name to the url for this document since +each function description has been tagged with its name.

    + +

    Syntax

    +

    +Each PHP instruction starts with <? and ends with a +>. Or, instructions may be grouped inside a single +<? > pair and separated by ; characters.

    +

    +Variables are supported and are indicated by preceding the +variable name with a $. So, for example, to set a +variable to 5 and then display this variable, the following +is valid:

    +

    +

    	<?$a = 5>
    +	<?echo $a>

    +

    +This is the same as writing:

    +

    +

    	<?; $a = 5; echo $a >
    +

    +Or even:

    +

    +

    	<?;
    +	$a = 5;
    +	echo $a;
    +	>

    +

    +Extra white space characters such as spaces, tabs and new-lines +are ignored. This fact should be used to format the PHP script +blocks to make them easier to read. Case is relevant in variable +names, but not in function calls. In the functional overview later +on in this documentation, case is only used to make the function +names easier to read. In the actual script language you can use +any case you wish. +

    +

    +Comments are supported. A comment is written just like comments in +the C language. /* starts a comment and */ ends a +comment. Comments can be placed anywhere within the <? ... > +block.

    +


    +

    Variables

    +

    +Three types of variables are supported. Long integer, +Double precision floating point and character strings. +They are automatically detected. For example:

    +

    +

    	<?$a = 5>

    +

    +causes $a to become a variable of type INTEGER.

    +

    +

    	<?$a = 5.0>

    +causes $a to become a variable of type DOUBLE.

    +

    +

    	<?$a = "5">

    +

    +causes $a to become a variable of type STRING.

    +

    +The type of the variable is not generally important. Every variable +regardless of its type is converted to all three types internally and +the various functions will try to use the correct type. There are +only a few functions affected by the type of the variable.

    +

    +All three variable types may also be treated as arrays by appending +[value] to their names. Unlike C, these are actually +associative arrays similar to those used in Perl. The following would +be valid:

    +

    +

    	<?
    +	  $a[0] = 5;
    +	  $a["hello"] = 6;
    +	  echo $a[0];
    +	  echo $a["hello"];
    +	>

    +

    +Note that if a variable is used both as an array and as a normal variable, +the normal variable is synonymous with the index "0" entry in +the array. ie.

    +

    +

        $a = 1;

    +

    +Is the same as writing:

    +

    +

        $a[0] = 1;

    +

    +PHP/FI also supports non-indexed arrays. A non-indexed array will generate +its own index as items are added to it. For example:

    +

    +

        $a[] = "Hello";
    +    $a[] = "There";

    +

    +The first item inserted into a non-indexed array always gets assigned +index 0, the second index 1, etc. Therefore the above items may be +printed out with:

    +

    +

        echo $a[0];
    +    echo $a[1];
    +	

    +Arrays can be copied by a simple assignment. If $b is an array, then +all the values can be copied to a new array named $a with:

    +

        $a = $b;

    +

    Please not that if PHP does not force you to define variables before +using them. If in the above statement, $b was undefined, then $a would +be set to an empty string ("").

    +

    +The [] notation is also used to indicate that arrays are to be appended. +If $a and $b are both arrays, then $b can be appended to $a by:

    +

        $a[] = $b;

    +

    +In the above, there will be a difference between associative arrays and +normal numbered arrays. Numbered arrays will be renumbered such that all +elements from $b will come after the original elements from $a. While with +associative arrays, elements in $b will be merged with elements in $a. +Any elements (items with the same index name) which already exist in $a +will be overwritten by $b elements.

    +You can use the count() function to determine the +number of items in any array.

    +

    +Also inherent to the language is the fact that the type of the variable +determines how certain basic operations will be carried out. For example:

    +

    +

        $a = $b + $c;

    +

    +can do a couple of different things. If $b is a number, the numerical +value of $c is added to $b and the sum is stored in $a. In this case +the type of $c is irrelevant. The operation is guided by the type of +the first variable. If $b is a string, then the string value of +$c is appended to $b and the resultant string is placed in $a. +This also leads to some caveats. You should read the +section on overloaded operators to get a +better understanding of how to deal with them.

    +


    +

    Associative Arrays

    +

    +The previous section introduced associative arrays. An associative array is an +array in which the index need not be a numerically sequential value. The array +index can be any number or string. PHP/FI provides a set of functions to +manipulate these associative arrays. These include, Next(), +Prev(),Reset(),End(), +and Key().

    +


    +

    Variable Variables

    +

    +Sometimes it is convenient to be able to have variable variable names. +That is, a variable name which can be set and used dynamically. +A normal variable is set with a statement such as:

    +

    +

        $a = "hello";

    +

    +A variable variable takes the value of a variable and treats that as the +name of a variable. In the above example, hello, can +be used as the name of a variable by using two dollar signs. ie.

    +

    +

        $$a = "world";

    +

    +At this point two variables have been defined and stored in the PHP/FI +symbol tree:

    +

    +

        Variable Name        Variable Content
    +         a                   hello
    +         hello               world

    +

    +Therefore, this statement:

    +

    +

        echo "$a $$a";

    +

    +produces the exact same output as:

    +

    +

        echo "$a $hello";

    +

    +ie. they both produce: hello world

    +


    +

    Language Constructs

    +

    +As far as language constructs are concerned, the PHP language is +quite simple. The following commands are used to guide the control +flow through a file:

    +

    +

      +
    • if (condition) +
    • else +
    • elseif (condition) +
    • endif +
    • switch(expression) +
    • case expression +
    • default +
    • break +
    • endswitch +
    • while +
    • endwhile +
    • include +
    • exit +

    +

    +The syntax of conditions are similar to that of the C language. +== tests for equality. != means not equal. Also +supported are: >, <, >=, +<=. +Conditional AND is &&, conditional OR is ||.

    + +Examples: +

    +

        <?
    +      if($a==5 &&  $b!=0 );
    +        $c = 100 + $a / $b;
    +      endif;
    +    >

    +

    The above may also be written in standard C syntax:
    +In this case, there is no need for a semicolon after the closing curly brace. +

    +

        <?
    +      if($a==5 && $b!=0) {
    +          $c = 100 + $a / $b;
    +      }
    +    >

    +

    +There is no difference between the two syntaxes. I personally like to +use endif, endswitch and endwhile so I explicitly know which construct +I am ending. However, these ending constructs can always be replaced with +a closing curly brace.

    +It is important to note that the flow of the language is not dependent +on the organization of the script blocks within the code. You can +start an if expression in one block and have the end of the expression +in another. For example:

    +

    +

    	<?if($a==5 &&  $b!=0)>
    +		  <b>Normal html text</b>
    +	<?endif>

    +

    In this example it is easy to see why it is sometimes more desirable to use +the endif keyword as opposed to a closing brace. The above is much more readable +than the following:

    +

    +

    	<?if($a==5 &&  $b!=0) {>
    +		  <b>Normal html text</b>
    +	<? } >

    +

    Both version are valid and they will do exactly the same thing.

    +


    +

    User-Defined Functions

    +

    You may define a function within a PHP script with the following syntax:

    +

        <?
    +      Function Test (
    +        echo "This is a test\n";
    +      );
    +    >

    +

    +This function can now be called from anywhere in the script as long as +the call comes after the function definition. A sample call might be:

    +

    +

        <?
    +      Test();
    +    >

    +

    +User defined functions like this act exactly like PHP's internal functions +in that you can pass arguments to them and have them return a value. Here +is the syntax for a function definition of a function which takes 3 arguments +and returns the sum of these arguments:

    +

    +

        <?
    +      Function Sum $a,$b,$c (
    +        return($a+$b+$c);
    +      );
    +
    +      echo Sum($a,$b,$c);
    +    >

    +

    +The return statement is used to return a value from the function. Only +a single value can be returned using this mechanism, however, if more values +need to be communicated back and forth between the main code and functions, +global variables can be used. This brings us to the section on the scope of +variables.

    + +


    +

    Scope of Variables

    +

    +The scope of a variable is the context within which it is defined. For the +most part all PHP/FI variables only have a single scope. However, within +user-defined functions a local function scope is introduced. Any variable +used inside a function is by default limited to the local function scope. +For example:

    +

    +

        $a=1; /* global scope */
    +    Function Test (
    +      echo $a; /* reference to local scope variable */
    +    );
    +    Test();

    +

    +This script will not produce any output because the echo +statement refers to a local version of the $a variable, and it has +not been assigned a value within this scope. You may notice that this is +a little bit different from the C language in that global variables in C +are automatically available to functions unless specifically overridden by a local +definition. This can cause some problems in that people may inadvertently +change a global variable. In PHP/FI global variables must be declared global +inside a function if they are going to be used in that function. An example:

    +

    +

        $a=1;
    +    $b=2;
    +    Function Sum $first,$second (
    +      global $a,$b;
    +
    +      $b = $a + $b;
    +    );
    +    Sum();
    +    echo $b;

    +

    +The above script will output "3". By declaring $a and $b global within +the function, all references to either variable will refer to the global version. +There is no limit to the number of global variables that can be manipulated by a +function. However, the variable must exist in the global scope prior to the +function being called. You cannot create new global variables from within a function.

    +

    +Another important feature of variable scoping is the static variable. +A static variable exists only in a local function scope, but it does not lose +its value when program execution leaves this scope. Consider the following +example:

    +

    +

        Function Test (
    +      $a=0;
    +      echo $a;
    +      $a++;
    +    );

    +

    +This function is quite useless since every time it is called it sets $a to 0 and +prints "0". The $a++ which increments the variable serves no purpose +since as soon as the function exits the $a variable disappears. To make a useful +counting function which will not lose track of the current count, the $a variable +is declared static:

    +

    +

        Function Test (
    +      static $a=0;
    +      echo $a;
    +      $a++;
    +    );

    +

    +Now, every time the Test() function is called it will print the value of $a and +increment it.

    +

    +Static variables are also essential when functions are called recursively. +A recursive function is one which calls itself. Care must be taken when writing +a recursive function because it is possible to make it recurse indefinitely. You +must make sure you have an adequate way of terminating the recursion. The +following simple function recursively counts to 10:

    +

        Function Test (
    +      static $count=0;
    +
    +      $count++;
    +      echo $count;
    +      if($count <  10) {
    +        Test();
    +      } 
    +    );

    + +


    +

    Mathematical Expressions

    +

    +PHP supports full mathematical operations anywhere an expression is +expected. Order of operations are taken into account. The following +are the valid operators:

    +

    +

    	<? $a = 2 + 1 > Addition
    +	<? $a = 2 - 1 > Subtraction
    +	<? $a = 2 * 1 > Multiplication
    +	<? $a = 2 / 1 > Division
    +	<? $a = 2 % 1 > Modulus
    +	<? $a = 2 ^ 1 > Bit-wise Exclusive OR

    +

    +Both bracketing and order of operations is supported, so the following +is valid:

    +

    +

    	<?$a = (2+1)*3+6/3>

    +

    +The C-like incremental operators += and -= are +supported. ie.

    +

    +

        <? $a += $b>

    +

    +This is equivalent to:

    +

    +

        <? $a = $a + $b>

    +

    +The C-like bit-wise operators &=, |= and ^= are +supported. ie.

    +

    +

        <? $a &= 4>
    +This is equivalent to:

    +

    +

        <? $a = $a &  4>

    +


    +

    While Loops

    +

    +You can loop within a PHP script by using the while(); endwhile; construct.

    +

    +

    	<?
    +	  $a=0;
    +	  while($a<100) {
    +		  $a++;
    +		  echo $list[$a];	
    +	  } 
    +	>

    +

    +The above example shows the use of a while loop to display the contents of +an array. WARNING although the PHP language supports incremental +operators such as ++ and -- to increment and decrement +a variable, they are not treated exactly like they would be in the +C language. The variable is incremented right away. There is no +concept of incrementing the variable before or after the operation +as there is in C. +

    As explained in the Language Constructs section above, +the same can be obtained with while(); endwhile;. +

    +


    +

    Switch Construct

    +

    +PHP supports a switch construct very similar to the C equivalent.

    +

    +

    	<?
    +	  $a=0;
    +	  switch($a) {
    +		case 1;
    +		  echo "a is 1";
    +		  break;
    +		case "hello";
    +		  echo "a is hello";
    +		  break;
    +		default;
    +		  echo "a is unknown";
    +		  break;
    +	  } 
    +	>

    +

    +The above is an example of a switch construct. It is similar to a +series of if/elseif/else constructs but easier to read. The only +difference between the PHP switch construct and that of the C +language is that semi-colons are used to terminate every line. There +are no colons.

    +As explained in the Language Constructs section above, +the same can be obtained with switch(); endswitch;. +

    +All of these constructs can of course be nested and used +inside each other just like C. The various files in the examples +directory of the PHP distribution should provide a good starting point +for learning the language.

    +


    +

    Secure Variables - Defeating GET method hacks

    +

    +A previous section talked about GET and POST method data and variables. +If you think about it, you may be able to envision a security issue. For example, +if on a web page I have obtained some data from a database and I pass this +data along in a variable called "data" in a POST method form. In the +ensuing page I can access this variable and do something with it. However, if +someone accessed this second page directly and put a "?data=something" + +right in the URL thereby doing a GET method variable set, they have effectively +circumvented the original POST method form.

    +

    +PHP provides a SecureVar() function which is used to mark variables +names as being secure variables. These secure variables can only be set +directly in a PHP script, or they can come from a POST method form. They +cannot be set using the GET method variable definition mechanism. From our +above scenario, if we placed the line:

    +

    +

        <?SecureVar("data")>

    +

    +Near the beginning of our second page, then the GET method trick would +not work. The "data" variable would appear to be empty unless +it came directly from the POST method form on the first page.

    +

    +The SecureVar() actually takes a regular expression as its +argument, so you can mark patterns of variable names that should be +treated in this secure manner. For example,

    +

    +

        <?SecureVar(".*data.*")>

    +Would mark any variable with the word "data" anywhere in their +name as being secure.

    +Please note that POST-method forms are not intrinsically secure. People can +emulate the posting of any data to a form by simply telnetting to the HTTP +port on your system. You need to take appropriate security measures to +stop people from doing this if in fact security is a concern.

    + +


    +

    Overloaded Operators and dealing with variable types

    + +An overloaded operator is an operator like '+' for example which can do different things +based on the types of the expressions it is asked to operate on.

    + +The problem is that PHP understands 3 variable types. Integer, +Double and String. When a variable is first assigned, PHP +automatically figures out the variable type.

    +

    +ie. +

    +

    +

        $a = 1;     Type would be integer
    +    $b = 1.5;   Type would be double
    +    $c = "1";   Type would be string

    +

    +Now, what happens when you do something like:

    +

    +

        $d = $a + $c;

    +

    +The parser looks at the first part of the +arithmetic expression and uses that to type the result and thus +also the nature of the arithmetic that is to be done. In the +above case since $a is an integer, $d will be an integer and +an integer addition is done giving the result:

    +

    +

        $d = 2      Type is integer

    +

    +Therefore:

    +

    +

        $d = $c + $a

    +

    +Results in:

    +

    +

        $d = "11"   Type is string

    +

    +The above makes sense to me, and once you understand it, it is probably +workable. However, when more complex expressions are used it can +get extremely confusing.

    +

    +The solution is a simple type casting mechanism. + +In reality all variables are automatically converted to all +3 types, and an internal flag just marks what type the variable +actually is. So, when I say:

    + +

        $a = 1;

    +

    +Internally in the symbol table I store 3 versions. +

    +

    +

        Integer:  1    <-- flag
    +    Double :  1.0
    +    String :  "1"

    +

    +The SetType() function can move this flag indicating the type of the variable. +

    +

    +

        SetType($a,"double");

    +

    +This would force $a to be treated as a double from then on.

    +

    +The GetType() function returns the type. + +GetType($a) would return "double" in this case.

    +

    +Functions also exist to return the 3 various types without moving the type flag. +

    +

    +

        IntVal($a)     returns  1
    +    DoubleVal($a)  returns  1.0
    +    StrVal($a)     returns  "1"

    +

    +This doesn't change the overloaded operator nature of the PHP variables, +but it does give you some tools to better deal with them. PHP is not +not a full-fledged Perl look-alike. It +has to be small and fast. Perl deals with the overloaded operator +pitfall by forcing something like the '+' operator to only +work on numbers. If you want to add strings, you must use the +'.' operator. Once you start having separate operators for each type +you start making the language much more complex. ie. you can't use +'==' for stings, you now would use 'eq'. I don't see the point, +especially for something like PHP where most of the scripts will +be rather simple and in most cases written by non-programmers who +want a language with a basic logical syntax that doesn't have too +high a learning curve.

    +


    +

    Suppressing Errors from function calls

    +

    +It may be desirable in certain circumstances to ignore fatal +errors which may be reported by specific PHP functions. For example, +you may want to ignore errors from a dbmopen() call and simply +check the return value of the call without having error messages +appear on the web screen. This can be done by putting the "@" +character in front of the function call. ie.

    +

    +

        $err_code = @dbmopen($filename,"w");

    +

    +The actual error message that would have been printed can be checked +by looking at the PHP internal variable, $phperrmsg.

    +

    +A more general approach to suppress error message printing is to use the +SetErrorReporting() function. With +this function error printing can be disabled for entire blocks of code +by preceding the block with a call like:

    +

    +

        SetErrorReporting(0);

    +

    +This turns off all errors. They can then be re-enabled later with:

    +

    +

        SetErrorReporting(1);

    +


    +

    Internal Functions

    +

    +PHP has a number of built-in functions. Functions are called in +the same manner as they are called in the C language. Some take +one or more arguments, and some return values which can then be +assigned to a variable or used as an argument to another function. +For example:

    +

    +

    	<?$t=time()>

    +

    +This assigns the return value of the time() function to the +t variable.

    +

    Alphabetical List of Functions

    +
    + +
    Abs(arg) +
    +

    Abs returns the absolute value of arg.

    + +

    Ada_Close(connection_id) +
    +

    Ada_Close will close down the connection to the Adabas server associated +with the given connection identifier.

    +This function is only available if Adabas support has been enabled in PHP.

    + +

    $connection = Ada_Connect(data source name, username, password) +
    +

    Ada_Connect opens a connection to a Adabas server. Each of the arguments +should be a quoted string. The first parameter (data source name) is a string +in the form "servername:databasename". The servername (but not the colon) can be omitted if you want to +access a local database. This function returns a connection_id. This identifier is needed by other +Adabas functions. You can have multiple connections open at once. This function +will return 0 on error. +

    +This function is only available if Adabas support has been enabled in PHP.

    + +

    $result = Ada_Exec(connection_id, query_string) +
    +

    Ada_Exec will send an SQL statement to the Adabas server specified by +the connection_id. The connection_id must be a valid identifier +that was returned by Ada_Connect or the special value 0. +If connection_id is 0, ada_exec tries to establish or to use a connection +with the parameters given with the configuration directives +phpAdaDefDB, phpAdaUser and phpAdaPW.
    +The return value of this function +is an identifier to be used to access the results by other Adabas functions. +This function will return 0 on error. It will return +1 when the command executed correctly but is not expected to +return data (insert or update commands, for example). Note that selects which +return no data will still return a valid result greater than 1. +

    +This function is only available if Adabas support has been enabled in PHP.

    + +

    Ada_FetchRow(result_id [,row_number]) +
    +

    Ada_FetchRow fetches a row of the data that was returned by Ada_Exec. +After Ada_FetchRow is called, the fields of that row can be access with +Ada_Result. If no rownumber is given, Ada_FetchRow will try to fetch the next +row in the result set. Every time Ada_FetchRow is called a new row can be accessed by +Ada_Result. If Ada_FetchRow was succesful (there was a row), +1 is returned, if there are no more rows, Ada_FetchRow will +return 0. The return value of Ada_FetchRow can be used as +the condition of a while loop. Calls to Ada_FetchRow() with and without rownumber +can be mixed. To step through the result more than once, you can call Ada_FetchRow() +with rownumber 1 and then continue with Ada_FetchRow() without rownumber to review the +result. +

    +This function is only available if Adabas support has been enabled in PHP.

    + +

    Ada_FieldName(result_id, field_number) +
    +

    Ada_FieldName will return the name of the field occupying the given column +number in the given Adabas result identifier. Field numbering starts from 0. +

    +This function is only available if Adabas support has been enabled in PHP.

    + +

    Ada_FieldNum(result_id, field_name) +
    +

    Ada_FieldNum will return the number of the column slot that corresponds to +the named field in the given Adabas result identifier. Field numbering starts at +0. This function will return -1 on error. +

    +This function is only available if Adabas support has been enabled in PHP.

    + +

    Ada_FieldType(result_id, field_name|field_number) +
    +

    Ada_FieldType will return the SQL type of the field referecend by name or number +in the given Adabas result identifier. Note: Field numbering starts from 0. +

    +This function is only available if Adabas support has been enabled in PHP.

    + +

    Ada_FreeResult(result_id) +
    +

    Ada_FreeResult only needs to be called if you are worried about using too +much memory while your script is running. All result memory will automatically +be freed when the script is finished. But, if you are sure you are not going to +need the result data anymore in a script, you may call Ada_FreeResult with +the result identifier as an argument and the associated result memory will be +freed. +

    +This function is only available if Adabas support has been enabled in PHP.

    + +

    Ada_NumFields(result_id) +
    +

    Ada_NumFields will return the number of fields (columns) in a Adabas +result. The argument is a valid result identifier returned by Ada_Exec. +This function will return -1 on error.

    +

    +This function is only available if Adabas support has been enabled in PHP.

    + +

    Ada_NumRows(result_id) +
    +

    Ada_NumRows will return the number of rows in a Adabas result. The argument +is a valid result identifier returned by Ada_Exec. This function will return +-1 on error. For INSERT, UPDATE, DELETE statements Ada_NumRows() +returns the number of rows affected. For a SELECT clause this is the number of +rows available. +

    +This function is only available if Adabas support has been enabled in PHP.

    + +

    Ada_Result(result_id, field name | index) +
    +

    Ada_Result will return values from a result identifier produced by +Ada_Exec. The field name specify what cell in the row to return. Instead of +naming the field, you may use the field index as an unquoted number. Field +indices start from 0. If the requested field is of code type BYTE (binary) +or is longer than 4096 bytes, the contents is sent directly to the client. +Hint: [VAR]CHAR BYTE fields can be returned into a php variable by using +the HEX() db function; e. g. SELECT HEX(SYSKEY) SYSKEY FROM MYTABLE. +

    +This function is only available if Adabas support has been enabled in PHP.

    + +

    Ada_ResultAll(result_id [,format]) +
    +

    Ada_ResultAll will print all rows from a result identifier produced by +Ada_Exec. The result is printed in HTML table format. With the optional formatstring +additional overall table formatting can be done (e. g. bgcolor= will set background +color, >caption> </caption to set caption). Note: The contents of "format" will +be inserted into the HTML table tag like this <table format >... +

    +This function is only available if Adabas support has been enabled in PHP.

    + +

    AddSlashes(arg) +
    +

    Escapes any $ \ or ' (if MAGIC_QUOTES is set) with a backslash. See +also StripSlashes().

    + +

    ASort(array) +
    +

    Sort is used to sort a PHP associative array in ascending order. Use ARSort() +for descending order. Unlike the +Sort() function, ASort() maintains index-value pairings. +It understands the three variable types and will sort alphabetically if the array +contains strings, and numerically if the array contains numbers. In +the case of an array which contains a mixture of types, the first type +in the array will specify the sort method. Note that if you are going to +sort a non-associative array, you should use the Sort() +function.

    + +

    BinDec(binary_string) +
    +

    BinDec returns the decimal equivalent of the binary number +represented by the binary_string argument. +The largest number that can be converted is +31 bits long or 4294967295 in decimal. See also the +DecBin() function.

    + +

    Ceil(value) +
    +

    Ceil() rounds a floating point value up to the next integer. +The return value is of type double (floating point) such that +it can be used properly in complex equations. To get an integer +type back, use: $new = IntVal(Ceil($value));
    +See also Floor().

    + +

    ChDir(dir) +
    +

    ChDir changes the current working directory to the directory +specified in the argument.

    + +

    ChGrp(file,group) +
    +

    ChGrp changes the group id of the specified file.

    + +

    ChMod(file,perms) +
    +

    ChMod changes the file permissions of the specified file. The +perms parameter must be specified in octal +notation. eg. ChMod($filename,0755)

    + +

    ChOwn(file,owner) +
    +

    ChOwn changes the specified file to be owned by the specified owner. Note +that this will only work if the PHP/FI binary is running as root (which is not +generally a good idea).

    + +

    Chop(string) +
    +

    Chop removes all trailing whitespaces including new-lines, tabs and +spaces and returns the new string.

    + +

    Chr(arg) +
    +

    Chr returns the ASCII character represented by the integer argument.

    + +

    ClearStack() +
    +

    The ClearStack() function is a hack/workaround for a deficiency in the +PHP parser. This dificiency is that PHP only has a single expression stack. +When inside a user-defined function this expression stack is never cleared +because its contents may be needed within a complex expression in the +context from which the user-defined function was called. This means that +if you have a while loop with a lot of iterations inside a user-defined +function, you may be chewing up a lot of stack space. You may even be +hitting the max data space limit. You can put a call to ClearStack() inside +your while loop to prevent this memory consumption, but the trade-off is that +you cannot use your function within any sort of context. ie. you have to +assign the output of the function to a temporary variable and then use this +temporary variable in whatever context you need.

    + +

    ClearStatCache() +
    +

    The stat() system call is normally an expensive operation on most +operating systems. In order to make sure that repeated calls to the +various File* functions like FilePerms(), +FileInode(), etc. the result of the last stat() +call is always cached. If one of the File* functions is called again +with the same argument, the cached stat() result will be used. In order +to force a new stat() system call this ClearStatCache() function may be +called to clear the cached stat() result.

    + +

    closeDir() +
    +

    closeDir closes a directory opened using the +openDir function.

    + +

    CloseLog() +
    +

    +CloseLog() closes the descriptor Syslog() uses to write to the system +logger. See the closelog(3) UNIX man page for more details. See also Syslog(), OpenLog() and InitSyslog(). +

    + +

    Cos(arg) +
    +

    Cos returns the cosine of arg in radians. See also Sin() +and Tan()

    + +

    Count(array) +
    +

    Count returns the number of items in an array variable. If the +variable is not an array, the return value will be 1 (because a normal +variable is similar to an array with only one item). If the variable +is not defined, the return value will be 0.

    + +

    Crypt(string,[salt]) +
    +

    Crypt will encrypt a string using the standard Unix DES +encryption method. Arguments are a string to be encrypted and an optional +two-character salt string to base the encryption on. See the Unix man page for +your crypt function for more information. If you do not have a crypt function +on your Unix system, you can use Michael Glad's public domain UFC-Crypt package +which was developed in Denmark and hence not restricted by US export laws as long +as you ftp it from an non-US site.

    + +

    Date(format,time) +
    +

    The Date function is used to display times and dates in various +ways. The function takes a format string and a time as arguments. If the +time argument is left off, the current time and date will be used. The time +argument is specified as an integer in number of seconds since the Unix +Epoch on Jan.1 1970. The format string is used to indicate which date/time +components should be displayed and how they should be formatted. The following +characters are recognized within the format string. Any unrecognized +character is printed verbosely:

    + +

      +
    • Y - Year eg. 1995 +
    • y - Year eg. 95 +
    • M - Month eg. Oct +
    • m - Month eg. 10 +
    • F - Month eg. October +
    • D - Day eg. Fri +
    • l - Day eg. Friday +
    • d - Day eg. 27 +
    • z - Day of the year eg. 299 +
    • H - Hours in 24 hour format eg. 13 +
    • h - Hours in 12 hour format eg. 1 +
    • i - Minutes eg. 5 +
    • s - Seconds eg. 40 +
    • U - Seconds since epoch eg. 814807830 +
    • A - AM/PM +
    • a - am/pm +

    +See also the MkTime() function. +

    + +

    dbList() +
    +

    dbList outputs information about the db support compiled into PHP.

    + +

    dbmClose(filename) +
    +

    dbmClose simply closes the specified dbm file. It will also +unlock any lock files, so it is important to close any dbm files that +have been opened.

    + +

    dbmDelete(filename,key) +
    +

    dbmDelete will delete the key/content pair specified by the given key argument.

    + +

    dbmExists(filename,key) +
    +

    dbmExists will return 1 if the key exists and 0 otherwise.

    + +

    dbmFetch(filename,key) +
    +

    dbmFetch will return the content string associated with the given key.

    + +

    dbmFirstKey(filename) +
    +

    dbmFirstKey returns the first key in the dbm file. Note that no particular +order is guaranteed since the order depends on hash table values calculated within the +dbm implementation. You may use the Sort function to sort arrays of data +from the dbm file if necessary.

    + +

    dbmInsert(filename,key,content) +
    +

    dbmInsert inserts a new key/content data pair into a dbm file. If the +key already exists, the insert will fail.

    + +

    dbmNextKey(filename,key) +
    +

    dbmNextKey returns the next key after the specified key. By calling +dbmfirstkey() +followed by successive calls to dbmnextkey() it is possible to visit every +key/content +pair in the dbm file.

    + +

    dbmOpen(filename,mode) +
    +

    dbmOpen() opens a dbm file. The first argument is the full-path filename +of the dbm file to be opened and the second is the file open mode which is one +of "r", "n" or "w" for +read, new (implies write) and write respectively. If ndbm support is used, ndbm +will actually create filename.dir and filename.pag files. gdbm +only uses one file, as does the internal flat ascii file support, and +Berkeley's libdb create a filename.db file. Note that +PHP does its own file locking in addition to any file locking that may be +done by the dbm library itself. PHP does not delete the .lck +files it creates. It uses these files simply as fixed inodes on which +to do the file locking. For more information on dbm files, see your +Unix man pages, or obtain GNU's gdbm from +ftp://prep.ai.mit.edu/pub/gnu.

    + +

    dbmReplace(filename,key,content) +
    +

    dbmReplace is similar to the dbminsert() function, the only +difference being that if the key already exists, the old content string will +be replaced with the new.

    + +

    DecBin(number) +
    +

    DecBin returns a string containing a binary representation of the +given number argument. The largest number that can be converted is +31 bits long or 4294967295 in decimal. See also the +BinDec() function.

    + +

    DecHex(number) +
    +

    DecHex converts a decimal number to a hexadecimal string. See also +the HexDec() function.

    + +

    DecOct(number) +
    +

    DecOct converts a decimal number to an octal number. See also +OctDec().

    + +

    doubleval(variable) +
    +

    doubleval returns the double (floating point) value of the variable. +See also the strval() and intval() +functions.

    + +

    Echo [format_string] expression [, expression [,...]] +
    +

    Echo is not a function. ie. you do not put brackets around the +arguments to it. It is used to display results of +PHP functions or PHP variables. See the Escape Character Section for a list of special characters supported. +The format_string is +optional and if not present, no output formatting will be done. +The format string is similar to the format string of the C printf +function. See the man page for printf for more details. +Up to 5 expressions can be printed with a single echo command. If you try +to print more you will get a parser error. Note that the types of the +expressions are not relevant. The expressions are automagically converted to +the appropriate types as specified by the format string if one is present. +If you want to format something and assign +the formatted string to a variable instead of displaying it, use the +sprintf() function.

    +

    The following conversions are supported,

    +

    +

    +

    +
    %d %i
    +
    Print a signed decimal number.
    +
    %o
    +
    Print an octal number.
    +
    %u
    +
    Print an unsigned decimal number.
    +
    %x %X
    +
    Print a hexadecimal number.
    +
    %f
    +
    Print a floating-point number.
    +
    %e %E
    +
    Print a floating-point number in scientific notation.
    +
    %g %G
    +
    Print a floating-point number in scientific notation or normal notation, +as appropriate.
    +
    %c
    +
    Print a single character.
    +
    %s
    +
    Print a string of characters.
    +
    %%
    +
    Print a literal percent-sign.
    +
    +

    +The following flags are accepted. +

    +
    '-'
    +
    Left-justify the output within the field-width.
    +
    '+'
    +
    Ensure that all integers are signed (with a plus/minus sign).
    +
    ' '
    +
    Similar to '+', but uses a space instead of a plus-sign.
    +
    '#'
    +
    Print prefixes in front of hex and octal numbers designating them as +such.
    +
    '''
    +
    Separate the digits into groups (usually comma-separated groups of +three).
    +
    '0'
    +
    Pad the field-width with zeros.
    +
    +

    +All of these flags are dependent upon whether or not your C library's printf +function supports them (the ''', for example, is a GNU extension).

    +

    +Most conversions will accept a field width and a precision, as shown in +the demo_echo.html file in the directory /examples. It is not +necessary to specify any type modifiers, and, in fact, PHP will complain +if the type modifier does not make sense (which is almost always the +case). PHP will complain about (and refuse to accept) anything that it +does not recognize. Any extra arguments given that are not required +by the format-string are ignored.

    +

    + +
    End(variable) +
    +

    End moves the internal array pointer for the given variable to the +last item of the array and returns the value of this item. +This is useful for traversing an associative +array in reverse order. See also Reset() and +Prev(). The following example would traverse an +associative array in reverse order:

    +

    +

        <?
    +      Reset($array);
    +      $first_key = key($array);
    +      End($array);
    +      $k = key($array);
    +      while($k != $first_key);
    +        echo $array[$k];
    +        prev($array);
    +        $k = key($array);
    +      endwhile;
    +      echo $array[$k];
    +    >

    + +

    ereg(expr,arg[,regs]) +
    +

    ereg returns non-zero if the regular expression is matched +in the argument string. For example, the condition, <?if (ereg("^This.*", +"This is an example string")> would be true since the "^This.*" +expression says to match the word This at the beginning of the string and then +match any characters afterwards. If the regs argument is present, then match +registers are filled into positions 0-10 in the array named by the regs +argument. Register 0 will always contain the full matched string. +For more information on regular expressions, see +the regular expression section of this document.

    + +

    eregi(expr,arg[,regs]) +
    +

    eregi is identical to the ereg() function except +for the fact that the regular expression is applied such that upper/lower +case is ignored.

    + +

    ereg_replace(expr,replace,arg) +
    +

    ereg_Replace scans the entire argument string and replaces any portions +of the string matched by the given expression with the replacement string. For +example, in the string, "This is an example string" we could +very easily replace every space with a dash with the command: +ereg_replace(" ","-","This is an example string").For more information on regular +expressions, see the regular expression section +of this document.

    + +

    eregi_replace(expr,replace,arg) +
    +

    eregi_replace is identical to the ereg_replace() +function except for the fact that the regular expression is applied such that +upper/lower case is ignored.

    + +

    EscapeShellCmd(string) +

    EscapeShellCmd escapes any characters in a string that might be used to +trick a shell command into executing arbitrary commands. This function should +be used to make sure that any data coming from user input is escaped before +this data is passed to the Exec() or System() +functions. A standard use would be:

    +

    +

        <?system(EscapeShellCmd($cmd))>

    + +

    Eval(string) +
    +

    Eval takes the contents of the string argument and treats it like a mini +PHP/FI script. It will execute it as a separate PHP/FI script. Any variables +set or accessed from inside the eval will be from the global reference frame +in the current context of the eval statement in the script. Variable substitution +is done on the string arguments, so if variables are to be used in the string +expression they should be escaped. Some examples:

    +

    +

        $a = "echo phpversion();";
    +    eval($a);
    +
    +    eval("echo phpversion();");
    +
    +    eval("\$a=1; echo \$a;");

    + +

    Exec(command_string [, array [,return_var]]) +
    +

    Exec executes the given unix command, however it does not +output anything. It simply returns the last line from the result of the command. +If you need to execute a command and have all the data from the command passed +directly back without any interference, use the PassThru() +function. +If the array argument is present, then the specified array will be filled +with every line of output from the unix command starting at the end of the +array. Make sure you UnSet the array before the call if +your array already contains elements and you want to start filling it at +array element 0. If the return_var argument is present along with the array +argument, then the return status of the executed unix command will be written to this +variable. Note that if you are going to allow data coming from user input to be +passed to this Exec function, then you should be using the +EscapeShellCmd() function +to make sure that users cannot trick the system into executing arbitrary commands. +See also the system() function.

    + +

    Exit +
    +

    The Exit command is used to terminate parsing right away as soon +as this tag is parsed.

    + +

    Exp(arg) +
    +

    Exp returns e raised to the power of arg. See also pow()

    + +

    fclose($fd) +
    +

    fclose() closes a file opened by fopen(). +The argument is a file pointer index as returned by the fopen() +call.

    + +

    feof($fd) +
    +

    Feof returns true if the file referred to by the file pointer index +argument has hit end-of-file.

    + +

    fgets($fd,bytes) +
    +

    fgets() reads a line from a file opened by fopen(). +Arguments are a file pointer index as returned by fopen() and the max number of +bytes to read. Reading ends when max number of bytes have been read, +or on an end of line. This is similar to the C fgets() call. +See also fputs().

    + +

    fgetss($fd,bytes) +
    +

    Identical to the fgets() function, except this one tries to strip +off any HTML tags or PHP/FI script tags as it is reading the file.

    + +

    $array = File(filename) +
    +

    File reads the entire file and returns an array with each array element +containing a line of the file starting with array index 0.

    + +

    fileAtime(filename) +
    +

    fileAtime returns the time of last data access. If the file does +not exist, or if it for some other reason could not be accessed, +this function returns -1. If repeated calls to fileAtime and the rest +ofthe file* functions are to be made and the file being accessed might +change or disappear, the ClearStatCache() +should be called before the call to the file* function.

    + +

    fileCtime(filename) +
    +

    fileCtime returns the time of last status change. If the file does +not exist, or if it for some other reason could not be accessed, +this function returns -1. If repeated calls to fileCtime and the rest +ofthe file* functions are to be made and the file being accessed might +change or disappear, the ClearStatCache() +should be called before the call to the file* function.

    + +

    fileGroup(filename) +
    +

    fileGroup returns the group id of the owner of the file. If the file does +not exist, or if it for some other reason could not be accessed, +this function returns -1. If repeated calls to fileGroup and the rest +ofthe file* functions are to be made and the file being accessed might +change or disappear, the ClearStatCache() +should be called before the call to the file* function.

    + +

    fileInode(filename) +
    +

    fileInode returns the file's inode. If the file does +not exist, or if it for some other reason could not be accessed, +this function returns -1. If repeated calls to fileInode and the rest +ofthe file* functions are to be made and the file being accessed might +change or disappear, the ClearStatCache() +should be called before the call to the file* function.

    + +

    fileMtime(filename) +
    +

    fileMtime returns the time of last data modification. If the file does +not exist, or if it for some other reason could not be accessed, +this function returns -1. If repeated calls to fileMtime and the rest +ofthe file* functions are to be made and the file being accessed might +change or disappear, the ClearStatCache() +should be called before the call to the file* function.

    + +

    fileOwner(filename) +
    +

    fileOwner returns the uid of the owner of the file. If the file does +not exist, or if it for some other reason could not be accessed, +this function returns -1. If repeated calls to fileOwner and the rest +ofthe file* functions are to be made and the file being accessed might +change or disappear, the ClearStatCache() +should be called before the call to the file* function.

    + +

    filePerms(filename) +
    +

    filePerms returns the permission bits of the file. This is the +st_mode field of the Unix C stat structure. If the file does +not exist, or if it for some other reason could not be accessed, +this function returns -1. If repeated calls to filePerms and the rest +ofthe file* functions are to be made and the file being accessed might +change or disappear, the ClearStatCache() +should be called before the call to the file* function.

    + +

    fileSize(filename) +
    +

    fileSize returns the size of the file in bytes. If the file does +not exist, or if it for some other reason could not be accessed, +this function returns -1. If repeated calls to fileSize and the rest +ofthe file* functions are to be made and the file being accessed might +change or disappear, the ClearStatCache() +should be called before the call to the file* function.

    + +

    fileType(filename) +
    +

    fileType returns the type of the file. The return values are one of: +"dir", "file","fifo","char", +"block", or "link". These are for, directory, +regular file, fifo special, character special, block special and symbolic +link, respectively.

    + +

    Floor(value) +
    +

    Floor() rounds a floating point value down to the previous integer. +The return value is of type double (floating point) such that +it can be used properly in complex equations. To get an integer +type back, use: $new = IntVal(Floor($value));
    +See also Ceil().

    + +

    Flush() +
    +

    The Flush() function is used to Flush the output buffer. For the Apache module, +it flushes Apache's output buffer, and for the CGI version it simply flushes stdout. +When running as a CGI under Apache, the server will buffer the CGI script's output, so +this Flush() function won't help much there. Look at running your script as an nph- script +if you are running the CGI version of PHP under the Apache web server. Or, alternatively, +run the Apache module version of PHP.

    + +

    $fp = fopen(filename,mode) +
    +

    fopen() opens a file and returns a file pointer index. If the file +could not be opened the function returns -1. It is +similar to the C fopen() call. The filename argument is the +relative or absolute path to the file to be opened, and the mode +argument is one of, "r", "r+", "w", "w+", "a", "a+". See the +Unix man page on the fopen() call for more information. See also +the popen() function description. See also the + fclose() function description.

    +

    Example:

    +

        $fp = fopen("/home/rasmus/file.txt","r");
    + +
    fputs(fp,string) +
    +

    fputs() writes a line to a file opened by fopen(). +Arguments are a file pointer index as returned by fopen() and the string to +write. Note that the string argument may contain the special escape characters, +\n, \r and \t to output newlines, carriage returns +and tabs +respectively. See also fgets().

    + +

    FPassThru(fp) +
    +

    FPassThru() outputs all remaining data on fp directly. It +is different from ReadFile() in that it can +also handle files opened with fsockopen(). +It differs from PassThru() in that it does not +handle commands, but opened files. FPassThru() returns the number of +bytes read and written.

    + +

    fseek(fp,pos) +
    +

    fseek() positions a file pointer identified by the +$fd argument which is the return value of the fopen() +call. The file pointer is positioned at the beginning of the file plus +the offset specified by the pos argument. See also +ftell() and rewind().

    + +

    fp = fsockopen(hostname,port) +
    +

    fsockopen() opens a socket connection and returns a file +pointer index. This file pointer index can be used by +fgets, fputs and +fclose. Arguments are a hostname and a port number. +Return values are: -3 if the socket couldn't be created, -4 if the dns +lookup on the hostname failed, -5 if the connection was refused or it timed +out, -6 if the actual fdopen() call failed or -7 if the setvbuf() call failed. +If the port number is 0, then the hostname argument will be treated as a filename +of a Unix domain socket if your operating system support Unix domain sockets.

    + +

    pos = ftell(fp) +
    +

    ftell() returns the position of a file pointer identified by the +fp argument which is the return value of the fopen() +call. The position can later be used as an argument to fseek(). +See also fseek() and rewind().

    + +

    getAccDir() +
    +

    getAccDir returns the directory where PHP access configuration files +are kept. The access configuration filenames come from the numerical user +id of the user whose access configurations they represent.

    + +

    GetEnv(string) +
    +

    GetEnv returns the value of the environment value specified by string. +Normally this function is not used because environment variables are available +to PHP/FI directly. If a reference is made to a variable which is not found in +the internal symbol table, then the environment space is automatically searched. +GetEnv should be used when it is necessary to ensure that an environment variable +has not been overwritten by normal PHP/FI variable. Security mechanisms that +rely on http server-defined variables like REMOTE_ADDR and REMOTE_HOST should load +these variables using GetEnv as opposed to referencing them directly as $REMOTE_ADDR +to avoid someone making up a fake form and posting the data to your server and +thereby bypassing whatever security mechanism you might have.

    + +

    getHostByName(domain_name) +
    +

    getHostByName converts the given domain name into an IP address +in nnn.nnn.nnn.nnn format.

    + +

    getHostByAddr(ip_address) +
    +

    getHostByAddr converts the given IP address in nnn.nnn.nnn.nnn +format into a fully qualified domain name.

    + +

    GetImageSize(filename) +
    +

    The GetImageSize() function takes either a full path filename, or a +relative path relative to the location of the calling script. It returns a +3 element array consisting of width, height and type. Width and height are +in pixels, and a type of 1 means GIF, a 2 indicates a JPG file and a 3 +indicates a PNG file. Other file types are not supported. The fourth element +in the returned array is a string containing, "width=x height=y" that +is suitable for using directly in an IMG tag. It is important to +note that the GD image library is not needed to use this function. An example +follows:

    +

        <?
    +        $result = GetImageSize("img/flag.jpg");
    +    >
    +    <IMG SRC="img/flag.jpg" ?echo $result[3]> >

    + +
    getLastAccess() +
    +

    getLastAccess returns the date and time in unix time format of +the last time the current page was access. This value can be passed to +the Date() function for formatting.
    This function is +only available if PHP was compiled with Access Logging enabled.

    + +

    getLastbrowser() +
    +

    getLastBrowser returns the identification string of browser the +last user to access the current page used.
    This function is only +available if PHP was compiled with Access Logging enabled.

    + +

    getLastEmail() +
    +

    getLastEmail returns the E-Mail address of the last user to access the +current page.
    This function is only available if PHP was compiled +with Access Logging enabled.

    + +

    getLastHost() +
    +

    getLastHost returns the hostname of the last user to access the +current page.
    This function is only available if PHP was compiled +with Access Logging enabled.

    + +

    getLastMod() +
    +

    getLastMod returns the date and time in unix time format of +the last time the current page was modified. This value can be passed to +the Date() function for formatting.
    This function is +only available if PHP was compiled with Access Logging enabled.

    + +

    getLastref() +
    +

    getLastRef returns the URL of the referring document of the +last user to access the current page.
    This function is only available if +PHP was compiled with Access Logging enabled.

    + +

    getLogDir() +
    +

    getLogDir returns the top-level directory under which PHP log +files can be found. The actual log files are in directories +under this directory. Each subdirectory is the numerical user id +of the user to whom the log files belong. Then within each directory +a series of dbm log files are found, each with the numerical inode +of the file they represent as the primary component of the filename.

    + +

    getMyInode() +
    +

    getMyInode returns the numerical inode of the current HTML file.

    + +

    getMyPid() +
    +

    getMyPid() returns the current process id of the PHP parsing +process.

    + +

    getMyUid() +
    +

    getMyUid returns the numerical user id of the owner of the current +HTML file.

    + +

    getRandMax() +
    +

    getRandMax returns the maximum random number the Rand +function will return. If the value returned does not seem to be accurate, +have a look in the php.h source file in the PHP distribution for more information.

    + +

    getStartLogging() +
    +

    getStartLogging returns the time and date in Unix time format when +logging commenced on the current page. This is more accurate when mSQL-based +logging is used since a timestamp is kept in each log file. For dbm-logging +the time returned is the time the user's log directory was created.

    + +

    getToday() +
    +

    getToday returns the total number of hits the current page has +had since 12 midnight local time.
    This function is only available if +PHP was compiled with Access Logging enabled.

    + +

    getTotal() +
    +

    getTotal returns the total number of hits the current page has +had since access logging was started on the page.
    This function is +only available if PHP was compiled with Access Logging enabled.

    + +

    GetType(variable) +
    +

    GetType returns the type of the variable. The return value is a string +and it is one of, "integer", "double" or "string". +See also the SetType() function

    + +

    gmDate(format,time) +
    +

    gmDate is identical to the Date function +except for the fact that it uses Greenwich Mean Time instead of the current +local time.

    + +

    Header(header_string) +
    +

    The Header command is used at the top of an HTML file to send +raw HTTP header strings. See the + +HTTP Specification for more information on raw http headers. Remember that the +Header() command must be used before any actual output is sent either by normal +HTML tags or by PHP echo commands.
    +Usage examples can be found in the HTTP Authentication +section.

    + +

    HexDec(hex_string) +
    +

    HexDec converts a hexadecimal string to a decimal number. See also +the DecHex() function.

    + +

    HtmlSpecialChars(string) +
    +

    HtmlSpecialChars converts any characters with ascii codes in the string +argument between 160 and 255 inclusive to their corresponding HTML Entity names. +The function returns the converted string. The <, >, +& and " are also converted.

    + +

    ImageArc(im, cx, cy, w, h, s, e, col) +
    +

    ImageArc draws a partial ellipse centered at cx,cy (top left is 0,0) in the +image represented by im. +w and h specifies the ellipse's width and height respectively +while the start and end points are specified in degrees indicated by the s and e arguments. +
    This function is only available if GD support has been enabled in PHP.

    + +

    ImageChar(im, size, x, y, c, col) +
    +

    ImageChar draws the character c in the image identified by +im at coordinates x,y (top left is 0,0) in colour col. The +size argument can be 1, 2, 3, 4 or 5 indicating the size of the font to be used. 1 is +the smallest and 5 is the largest.
    This function is only available if GD support +has been enabled in PHP.

    + +

    ImageCharUp(im, size, x, y, c, col) +
    +

    ImageCharUp draws the character c vertically in the image identified by +im at coordinates x,y (top left is 0,0) in colour col. The +size argument can be 1, 2, 3, 4 or 5 indicating the size of the font to be used. 1 is +the smallest and 5 is the largest.
    This function is only available if GD support +has been enabled in PHP.

    + +

    col = ImageColorAllocate(im, red, green, +blue) +
    +

    ImageColorAllocate returns a colour identifier representing the colour composed of the +given RGB components. The im argument is the return from the +ImageCreate function. ImageColorAllocate must be called to create each colour that +is to be used in the image represented by im.
    This function is only available if +GD support has been enabled in PHP.

    + +

    ImageColorTransparent(im, col) +
    +

    ImageColorTransparent sets the transparent colour in the im image to col. im is +the image identifier returned by ImageCreate and col is the +colour identifier returned by ImageColorAllocate. This +function is only available if GD support has been enabled in PHP.

    + +

    ImageCopyResized(dst_im, src_im, dstX, +dstY, srcX, srcY, dstW, dstH, srcW, srcH ) +
    +

    ImageCopyResized copies a rectangular portion of one image to another image. +dst_im is the destination image, src_im is the source image identifier. +If the source and destination coordinates and width and heights differ, appropriate +stretching or shrinking of the image fragment will be performed. The coordinates +refer to the upper left corner. This function can be used to copy regions within the +same image (if dst_im is the same as src_im) but if the regions +overlap the results will be unpredictable.
    This function is only available if +GD support has been enabled in PHP.

    + +

    im = ImageCreate(x_size, y_size) +
    +

    ImageCreate returns an image identifier representing a blank image of size +x_size by y_size.
    This function is only available if GD support has been +enabled in PHP.

    + +

    im = ImageCreateFromGif(filename) +
    +

    ImageCreateFromGif returns an image identifier representing the image obtained +from the given filename.
    This function is only available if GD support +has been enabled in PHP.

    + +

    ImageDestroy(im) +
    +

    ImageDestroy frees any memory associated with image im. im is the image +identifier returned by the ImageCreate function. This +function is only available if GD support has been enabled in PHP.

    + +

    ImageFill(im, x, y, col) +
    +

    ImageFill performs a flood fill starting at coordinate x,y (top left is 0,0) with +colour col in image im.
    This function is only available if GD support has been +enabled in PHP.

    + +

    ImageFilledPolygon(im, points, num_points, +col) +
    +

    ImageFilledPolygon creates a filled polygon in image +im. points is a +PHP array containing the polygon's vertices. ie. points[0] = x0, points[1] = y0, points[2] = +x1, points[3] = y1, etc. num_points is the total number of vertices.
    This function is +only available if GD support has been enabled in PHP.

    + +

    ImageFilledRectangle(im, x1, y1, x2, y2, +col) +
    +

    ImageFilledRectangle creates a filled rectangle of colour col in image im starting at upper left +coordinate x1,y1 and ending at bottom right coordinate x2,y2. 0,0 is the top left +corner of the image.
    This function is only available if GD support has been +enabled in PHP.

    + +

    ImageFillToBorder(im, x, y, border, col) +
    +

    ImageFillToBorder performs a flood fill whose border colour is defined by border. The +starting point for the fill is x,y (top left is 0,0) and the region is filled with colour +col.
    This function is only available if GD support has been enabled in PHP.

    + +

    ImageGif(im [,filename]) +
    +

    ImageGif creates the GIF file in filename from the image im. The im argument is +the return from the ImageCreate function. The filename +argument is optional, and if left off, the raw image stream will be returned directly. +By sending an image/gif content-type using the Header() +function, you can create a PHP/FI script which returns GIF images directly using this +function.
    This function is only available if GD support has been enabled in PHP.

    + +

    ImageInterlace(im, interlace) +
    +

    ImageInterlace turns the interlace bit on or off. If interlace is 1 the im image +will be interlaced, and if interlace is 0 the interlace bit is turned off. This functions +is only available if GD support has been enabled in PHP.

    + +

    ImageLine(im, x1, y1, x2, y2, col) +
    +

    ImageLine draws a line from x1,y1 to x2,y2 (top left is 0,0) in image +im of colour col. +
    This function is only available if GD support has been enabled in PHP.

    + +

    ImagePolygon(im, points, num_points, col) +
    +

    ImagePolygon creates a polygon in image im. points is a +PHP array containing the polygon's vertices. ie. points[0] = x0, points[1] = y0, points[2] = +x1, points[3] = y1, etc. num_points is the total number of vertices.
    This function is +only available if GD support has been enabled in PHP.

    + +

    ImageRectangle(im, x1, y1, x2, y2, col) +
    +

    ImageRectangle creates a rectangle of colour col in image im starting at upper left coordinate +x1,y1 and ending at bottom right coordinate x2,y2. 0,0 is the top left +corner of the image.
    This function is only available if GD support has been +enabled in PHP.

    + +

    ImageSetPixel(im, x, y, col) +
    +

    ImageSetPixel draws a pixel at x,y (top left is 0,0) in image +im of colour col. +
    This function is only available if GD support has been enabled in PHP.

    + +

    ImageString(im, size, x, y, s, col) +
    +

    ImageString draws the string s in the image identified by +im at coordinates x,y (top left is 0,0) in colour col. The +size argument can be 1, 2, 3, 4 or 5 indicating the size of the font to be used. 1 is +the smallest and 5 is the largest.
    This function is only available if GD support +has been enabled in PHP.

    + +

    ImageStringUp(im, size, x, y, s, col) +
    +

    ImageStringUp draws the string s vertically in the image identified by +im at coordinates x,y (top left is 0,0) in colour col. The +size argument can be 1, 2, 3, 4 or 5 indicating the size of the font to be used. 1 is +the smallest and 5 is the largest.
    This function is only available if GD support +has been enabled in PHP.

    + +

    ImageSX(im) +
    +

    ImageSX returns the width of the image identified by im.

    + +

    ImageSY(im) +
    +

    ImageSY returns the height of the image identified by im.

    + +

    Include(filename) +
    +

    The Include command can be used to insert other files into the current +html file. This is extremely handy for headers and footers which may need +to be included in hundreds of HTML files. By using an include command you then +only need to modify the header or footer file in one place when it needs to be +changed. Since full PHP parsing is done on the included file, you can also +use the include command to include common PHP scripts you may have +written. Sort of like having a primitive shared library of scripts +you can call from your HTML file. You can place such common library +files in one directory and set PHP's include path and not have to +refer to the files with pathnames. For Apache module users this can be +configured with the phpIncludePath directive, for CGI +users with the PHP_INCLUDE_PATH environment variable. This path is +colon-separated just like $PATH is in your UNIX shell. +eg.

        <?include("/path/filename.txt")>
    +

    + +

    InitSyslog() +
    +

    +InitSyslog() defines some PHP variables that you need when using +OpenLog() and Syslog(). These variables are not defined by default +for efficiency reasons. The variables are named in the same way as in +the <syslog.h> C include file (such as $LOG_LOCAL0). See your +syslog(3) UNIX manual page for more details. See also InitSyslog(), Syslog() +and CloseLog(). +

    + +

    intval(variable) +
    +

    intval returns the long integer value of the variable. See also +the strval() and doubleval() +functions.

    + +

    IsSet(variable) +
    +

    The IsSet function returns 1 if the given variable is defined, +and 0 if it isn't.

    + +

    Key(variable) +
    +

    Key returns the key of the current array item. The current item is +determined by the position of the array pointer for the given variable. +This array pointer may be manipulated with the Reset(), +End(), Next(), and Prev() +functions. This function is mainly used for determining the key value for +an item in an associative array, although it will work for normal array as well.

    + +

    Link(target,link) +
    +

    Link() creates a hard link. See the Symlink() +function for creating symbolic links (soft) links. See also +ReadLink and LinkInfo functions.

    + +

    LinkInfo(path) +
    +

    LinkInfo returns the st_dev field of the UNIX C +stat structure returned by the lstat system call. This +function is used to verify if a link (pointed to by path) really exists +(using the same method as the S_ISLNK macro defined in stat.h). +Returns -1 in case of error.

    + +

    Log(arg) +
    +

    Log returns the natural logarithm of arg.

    + +

    Log10(arg) +
    +

    Log10 returns the base-10 logarithm of arg.

    + +

    LogAs(filename) +
    +

    The LogAs() function will treat the hit on the current page as if it +as actually received on the argument filename.

    + +

    Mail(to,subject,message[,headers]) +
    +

    Mail automatically mails the message specified in the message argument +to the receiver specified in the to argument. Multiple recipients can +be specified by spaces between them in the to argument.

    +eg.

       mail("rasmus@lerdorf.on.ca", 
    +        "My Subject", 
    +        "Line 1\nLine 2\nLine 3");
    + +If a fourth string argument is passed, this string is inserted at the +end of the header, example:
    +   mail("ssb@guardian.no", "the subject", $message,
    +        "X-Mailer: PHP/FI " + phpversion());
    +
    + +
    Max(array) +
    +

    Max returns the maximum value of a PHP array. ie. it will search through +the entire array looking for the max element. If it is an array of strings, +the returned string is the string which would be alphabetically last in the +array if it were sorted.

    + +

    Md5(message) +
    +

    Md5 returns the MD5 hash of a string value.

    + +

    mi_Close(connection_id) +
    +

    mi_Close will close down the connection to an Illustra database +associated with the given connection identifier.

    +

    +This function is only available if Illustra support has been enabled in PHP.

    + +

    $connection = mi_Connect(database, username, password) +
    +

    mi_Connect opens a connection to an Illustra database. Each +of the arguments should be a quoted string. +This function returns a connection_id. This identifier is needed by other +Illustra functions. You can have multiple connections open at once. +The host to connect to is governed by the MI_PARAMS file on the machine +running the PHP executable. No support as yet for remote invocation +This function will return -1 on error.

    +

    +This function is only available if Illustra support has been enabled in PHP.

    + +

    mi_DBname(connection_id) +
    +

    mi_DBname will return the name of the database that the given +Illustra connection identifier is connected to.

    +

    +This function is only available if Illustra support has been enabled in PHP.

    + +

    $result = mi_Exec(connection_id, query_string) +
    +

    mi_Exec will send an SQL statement to the Illustra database specified by +the connection_id. The connection_id must be a valid identifier +that was returned by mi_Connect. The return value of this function +is an identifier to be used to access the results from other +Illustra functions. This function will return -1 on error. + +

    +This function is only available if Illustra support has been enabled in PHP.

    + +

    mi_FieldName(connection_id, result_id, field_number) +
    +

    mi_FieldName will return the name of the field occupying the +given column number with the given Illustra result and connection identifiers. +Field numbering starts from 0.

    This function will return -1 +on error.

    +

    +This function is only available if Illustra support has been enabled in PHP.

    + +

    mi_FieldNum(connection_id, result_id, field_name) +
    +

    mi_FieldNum will return the number of the column slot that +corresponds to the named field in the given Illustra result identifier. Field +numbering starts at 0. This function +will return -1 on error.

    +

    +This function is only available if Illustra support has been enabled in PHP.

    + +

    mi_NumFields(connection_id, result_id) +
    +

    mi_NumFields will return the number of fields (columns) in +an Illustra result. The argument is a valid result identifier returned +by mi_Exec. This function will return -1 on error.

    +

    +This function is only available if Illustra support has been enabled in PHP.

    + +

    mi_NumRows(connection_id, result_id) +
    +

    mi_NumRows will return the number of rows in an Illustra result. The argument +is a valid result identifier returned by mi_Exec. This function will return +-1 on error.

    +

    +This function is only available if Illustra support has been enabled in PHP.

    + +

    mi_Result(connection_id, result_id, row_number, field name/index) +
    +

    mi_Result will return values from a result identifier +produced by mi_Exec. The row_number and field name specify what +cell in the table of results to return. Row numbering starts from +0. Instead of naming the field, you may use the field index as +an unquoted number. Field indices start from 0.

    +

    +All values returned from the database are in String form, since no type-detection +is available at the present. +

    +This function is only available if Illustra support has been enabled in PHP.

    + + +

    Microtime() +
    +

    Microtime() returns a string "msec sec" where sec is number of seconds +since 00:00 GMT, Jan 1, 1970, and msec is the microseconds part (as fraction of +seconds). Ex "0.87633900 825010464".
    This function is only available on +operating systems that support the gettimeofday() system call.

    + +

    Min(array) +
    +

    Min returns the minimum value of a PHP array. ie. it will search through +the entire array looking for the min element. If it is an array of strings, +the returned string is the string which would be alphabetically first in the +array if it were sorted.

    + +

    MkDir(dir,mode) +
    +

    MkDir creates a directory. The mode parameter must be +given in octal notation. eg. MkDir("DirName",0755);

    + +

    MkTime(hour,min,sec,mon,day,year) +
    +

    MkTime returns a time in Unix timestamp (long integer) format which +corresponds to the date and time specified by the arguments. Arguments may be +left out in which case the given component is set to the current value +according to the current local time and date. These left out arguments may only +be left out from right to left. ie. MkTime(hour,min,sec) is valid, +but MkTime(mon,day,year) is not valid. Note that this function can +be very handy as a tool for doing both date arithmetic and date validation. +You can feed it invalid parameters, such as a month greater than 12, or a day +greater than 31 and it will figure out the right date anyway. It will also +generate an error message if any of the parameters are outside the normal +values. Use the SetErrorReporting(0) +function to turn this error reporting off before calling the function and you +may then check the $phperrmsg for any errors that may have occurred.

    +eg.

            SetErrorReporting(0);
    +        $a = MkTime(0,0,0,13,1,1997);
    +        SetErrorReporting(1);
    +        echo $phperrmsg;
    + +
    $result = msql($database,$query) +
    +

    msql sends an mSQL query. Arguments are the database name and the query +string. ie. <?msql("MyDatabase" , "select * from +table")>. +The return value from this function is a result identifier to be used to access the results +from the other msql_ functions. A result identifier is a positive integer. The function +returns 0 when no result identifier is created. This is the case with +any queries that do not return anything, such as create, update, +drop, insert and +delete. The function will return -1 if an error occurs. A string +describing the error will be placed in $phperrmsg, and unless the function was called +as @msql() then this error string will also be printed out. +For mSQL 2.0, the $result variable will contain the number of rows affected by +the SQL command performed. If you want your application to be portable to mSQL 1.0, +do not rely on this. +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_close() +
    +

    msql_Close closes the socket connection to the msql daemon, if an open +connection exists. Note, since only one concurrent mSQL session can be open +at any one time, this function does not take an argument.

    + +

    msql_connect($hostname) +
    +

    msql_Connect specifies the host name or IP on which the mSQL database +engine resides. This is equivalent to the msqlConnect() function in the mSQL C +API. The one difference between this function and the C API equivalent is that +if the function isn't called, a connection to the local host is made by default +on the first call to the msql() function. And, there is no need for an msql_close +function since only one connection may be active at any one time. If a second call +to msql_connect() is made in a file, then the connection to the first host is +automatically closed. To explicitly connect to the msql daemon on the local host, use: +<?msql_connect("localhost")>
    This function is only +available if mSQL support has been enabled in PHP.

    + +

    msql_CreateDB($database) +
    +

    msql_CreateDB creates the given database. +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_dbName($result,$i) +
    +

    msql_dbName returns the database name stored in position $i of +the result pointer returned from the msql_ListDbs() +function. The msql_NumRows() function can +be used to determine how many database names are available. +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_DropDB($database) +
    +

    msql_DropDB deletes the given mSQL database. Use this with caution +as all data in the database will be lost. +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_FieldFlags($result,$i) +
    +

    msql_FieldFlags returns the field flags of the specified field. +Currently this is either, "not null", "primary key", a combination +of the two or "" (an empty string). +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_FieldLen($result,$i) +
    +

    msql_FieldLen returns the length of the specified field. +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_FieldName($result,$i) +
    +

    msql_FieldName returns the name of the specified field. Arguments to the +function is the result identifier and the field index. ie. msql_FieldName($result,2); +will return the name of the second field in the result associated with the result +identifier.
    This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_FieldType($result,$i) +
    +

    msql_FieldType is similar to the msql_FieldName() function. The arguments are +identical, but the field type is returned. This will be one of "int", "char" or "real". +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_FreeResult($result) +
    +

    msql_FreeResult only needs to be called if you are worried about using +too much memory while your script is running. All result memory will automatically +be freed when the script is finished. But, if you are sure you are not going to +need the result data anymore in a script, you may call msql_freeresult with the +result identifier as an argument and the associated result memory will be freed. +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    $result = msql_ListDBs() +
    +

    msql_ListDBs will return a result pointer containing the databases +available from the current mSQL daemon. Use the +msql_dbName() function to traverse this result pointer. +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    $result = msql_Listfields($database,$tablename) +
    +

    msql_listfields retrieves information about the the given tablename. +Arguments are the database name and the table name. +A result pointer is returned which can be used with msql_fieldflags, +msql_fieldlen, msql_fieldname, msql_fieldtype. A result identifier is a +positive integer. The function returns -1 if a error occurs. A string +describing the error will be placed in $phperrmsg, and unless the function +was called as @msql() then this error string will also be printed out. +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    $result = msql_ListTables($database) +
    +

    msql_ListTables takes a database name and result pointer much like the +msql() function. The msql_TableName() +function should be used to extract the actual table names from the result pointer. +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_NumFields($result) +
    +

    msql_NumFields returns the number of fields in a result. The argument is +the result identifier returned by the msql() function. +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_NumRows($result) +
    +

    msql_NumRows simply returns the number of rows in a result. The argument +is the result identifier returned by the msql() function. +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_RegCase(string) +
    +

    msql_RegCase takes a string argument and converts it to the regular +expression needed to send to mSQL in order to get a case insensitive +match. This turns a string like "abc" into "[Aa][Bb][Cc]". +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_Result($result,$i,field) +
    +

    msql_Result displays a field from a returned record. Arguments are the result +identifier returned by the msql() function, an integer which is the index of the record +to be viewed and a field name. The field argument supports the "table.field" +syntax for handling results from a join. This function is perhaps best illustrated with +a complete example:

    +

    +

    +    <?
    +      $name = "bob";	
    +      $result = msql($database,"select * from table where firstname='$name'");
    +      $num = msql_numrows($result);
    +      echo "$num records found!<p>";
    +      $i=0;
    +      while($i<$num);
    +        echo msql_result($result,$i,"fullname");
    +        echo "<br>";
    +        echo msql_result($result,$i,"address");
    +        echo "<br>";
    +        $i++;
    +      endwhile;
    +    >

    +

    +The above script connects to the mSQL engine on the local machine, sets the name +variable to bob and sends a query which asks for all the fields from a +table where the firstname field is set to bob. It then displays the +number of records it found after which it loops through each of the found +records and displays the fullname and address fields for each record. +As you can see, it would be trivial to add HTML markup tags around the printed +fields to format the results in a table or in whatever manner is desired. Note +that there is no msql_connect() call. msql_connect need only be called if a connection +to a remote database is desired.

    +

    +This function is only available if mSQL support has been enabled in PHP.

    + +

    msql_TableName($result,$i) +
    +

    msql_TableName takes a result pointer returned by the +msql_ListTables() function as well as an integer index and returns the name of +a table. The msql_NumRows() function may be used to +determine the number of tables in the result pointer. An example would be:

    +

    +

    +    <?
    +      $result = msql_listtables("dbname");
    +      $i=0;
    +      while($i <  msql_numrows($result));
    +        $tb_names[$i]=msql_tablename($result, $i);
    +        echo $tb_names[$i];
    +        echo "<BR>";
    +        $i++;
    +      endwhile;
    +    >
    +
    This function is only available if mSQL support has been enabled in PHP.

    + +

    $result = mysql($database,$query) +
    +

    mysql sends a mysql query. Arguments are the database name and the query +string. ie. <?mysql("MyDatabase" , "select * from +table")>. +The return value from this function is a result identifier to be used to access the results +from the other mysql_ functions. A result identifier is a positive integer. The function +returns 0 when no result identifier is created. This is the case with +any queries that do not return anything, such as create, update, +drop, insert and +delete. The function will return -1 if an error occurs. A string +describing the error will be placed in $phperrmsg, and unless the function was called +as @mysql() then this error string will also be printed out. +
    This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_affected_rows() +
    +

    mysql_affected_rows() returns number of rows affected by the last INSERT, UPDATE +or DELETE query.

    + +

    mysql_close() +
    +

    mysql_Close closes the socket connection to the mysql daemon, if an open +connection exists.

    + +

    mysql_connect($hostname [,username [,password]]) +
    +

    mysql_Connect specifies the host name or IP on which the mysql database +engine resides. This is equivalent to the mysqlConnect() function in the mysql C +API. The one difference between this function and the C API equivalent is that +if the function isn't called, a connection to the local host is made by default +on the first call to the mysql() function. And, there is no need for an mysql_close +function since only one connection may be active at any one time. If a second call +to mysql_connect() is made in a file, then the connection to the first host is +automatically closed.

    +An optional username and password may be provided. Note that when PHP is compiled to run in SAFE MODE then the username must either +be the same as the owner of the file being processed, or the owner of the httpd +process (usually nobody). Any other username will fail.

    +To explicitly connect to the mysql daemon on the local host, use: +<?mysql_connect("localhost")>
    This function is only +available if mysql support has been enabled in PHP.

    + +

    mysql_CreateDB($database) +
    +

    mysql_CreateDB creates the given database. +
    This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_dbName($result,$i) +
    +

    mysql_dbName returns the database name stored in position $i of +the result pointer returned from the mysql_ListDbs() +function. The mysql_NumRows() function can +be used to determine how many database names are available. +
    This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_DropDB($database) +
    +

    mysql_DropDB deletes the given mysql database. Use this with caution +as all data in the database will be lost. +
    This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_FieldFlags($result,$i) +
    +

    mysql_FieldFlags returns the field flags of the specified field. +Currently this is either, "not null", "primary key", a combination +of the two or "" (an empty string). +
    This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_FieldLen($result,$i) +
    +

    mysql_FieldLen returns the length of the specified field. +
    This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_FieldName($result,$i) +
    +

    mysql_FieldName returns the name of the specified field. Arguments to the +function is the result identifier and the field index. ie. mysql_FieldName($result,2); +will return the name of the second field in the result associated with the result +identifier.
    This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_FieldType($result,$i) +
    +

    mysql_FieldType is similar to the mysql_FieldName() function. The arguments are +identical, but the field type is returned. This will be one of "int", "char" or "real". +
    This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_FreeResult($result) +
    +

    mysql_FreeResult only needs to be called if you are worried about using +too much memory while your script is running. All result memory will automatically +be freed when the script is finished. But, if you are sure you are not going to +need the result data anymore in a script, you may call mysql_freeresult with the +result identifier as an argument and the associated result memory will be freed. +
    This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_insert_id() +
    +

    mysql_insert_id() returns the ID generated for an AUTO_INCREMENT field. This function +takes no arguments. It will return the auto-generated ID returned by the last INSERT query +performed.

    + +

    $result = mysql_ListDBs() +
    +

    mysql_ListDBs will return a result pointer containing the databases +available from the current mysql daemon. Use the +mysql_dbName() function to traverse this result pointer. +
    This function is only available if mysql support has been enabled in PHP.

    + +

    $result = mysql_Listfields($database,$tablename) +
    +

    mysql_listfields retrieves information about the the given tablename. +Arguments are the database name and the table name. +A result pointer is returned which can be used with mysql_fieldflags, +mysql_fieldlen, mysql_fieldname, mysql_fieldtype. A result identifier is a +positive integer. The function returns -1 if a error occurs. A string +describing the error will be placed in $phperrmsg, and unless the function +was called as @mysql() then this error string will also be printed out. +
    This function is only available if mysql support has been enabled in PHP.

    + +

    $result = mysql_ListTables($database) +
    +

    mysql_ListTables takes a database name and result pointer much like the +mysql() function. The mysql_TableName() +function should be used to extract the actual table names from the result pointer. +
    This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_NumFields($result) +
    +

    mysql_NumFields returns the number of fields in a result. The argument is +the result identifier returned by the mysql() function. +
    This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_NumRows($result) +
    +

    mysql_NumRows simply returns the number of rows in a result. The argument +is the result identifier returned by the mysql() function. +
    This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_Result($result,$i,field) +
    +

    mysql_Result displays a field from a returned record. Arguments are the result +identifier returned by the mysql() function, an integer which is the index of the record +to be viewed and a field name. The field argument supports the "table.field" +syntax for handling results from a join. One difference between mSQL 1.0 and mysql is +that mysql supports functions that can act on the result data. These functions can +be applied in this function. This function is perhaps best illustrated with +a complete example:

    +

    +

    +    <?
    +      $name = "bob";	
    +      $result = mysql($database,"select * from table where firstname='$name'");
    +      $num = mysql_numrows($result);
    +      echo "$num records found!<p>";
    +      $i=0;
    +      while($i<$num);
    +        echo mysql_result($result,$i,"lcase(fullname)");
    +        echo "<br>";
    +        echo mysql_result($result,$i,"address");
    +        echo "<br>";
    +        $i++;
    +      endwhile;
    +    >

    +

    +The above script connects to the mysql engine on the local machine, sets the name +variable to bob and sends a query which asks for all the fields from a +table where the firstname field is set to bob. It then displays the +number of records it found after which it loops through each of the found +records and displays the fullname and address fields for each record. +The lcase() call in the result function changes the returned string to lower case. +For a complete set of functions that can be applied to the result data, see your +mysql documentation. +As you can see, it would be trivial to add HTML markup tags around the printed +fields to format the results in a table or in whatever manner is desired. Note +that there is no mysql_connect() call. mysql_connect need only be called if a connection +to a remote database is desired.

    +

    +This function is only available if mysql support has been enabled in PHP.

    + +

    mysql_TableName($result,$i) +
    +

    mysql_TableName takes a result pointer returned by the +mysql_ListTables() function as well as an integer index and returns the name of +a table. The mysql_NumRows() function may be used to +determine the number of tables in the result pointer. An example would be:

    +

    +

    +    <?
    +      $result = mysql_listtables("dbname");
    +      $i=0;
    +      while($i <  mysql_numrows($result));
    +        $tb_names[$i]=mysql_tablename($result, $i);
    +        echo $tb_names[$i];
    +        echo "<BR>";
    +        $i++;
    +      endwhile;
    +    >
    +
    This function is only available if mysql support has been enabled in PHP.

    + +

    Next(variable) +
    +

    Next moves the internal array pointer to the next item in the array. +This happens automatically when an array is accessed using the non-indexed +method ($array[]). The function returns the value of the new item. +This function can be used to move the pointer forward +without having to access the array explicitly. One use would be to traverse +an associative array and only printing out the keys of the array and not +the actual contents.

    +

    +

        <?
    +      Reset($array);
    +      $i=0;
    +      while($i < count($array));
    +        echo key($array);
    +        next($array);
    +        $i++;
    +      endwhile;
    +    >

    + +

    OctDec(octal_number) +
    +

    OctDec converts an octal number to a decimal number. See also +DecOct().

    + +

    openDir(directory) +
    +

    openDir opens the specified directory and places an internal +pointer to the beginning of the directory. Directory entries +are read using the readDir function, and an +opened directory should be closed with the +closeDir function.

    + +

    OpenLog(ident,options,facility) +
    +

    +OpenLog() initializes the system for further Syslog() calls. See the +openlog(3) UNIX man page for more details. See also InitSyslog(), Syslog() and CloseLog(). +

    + +

    Ora_Bind(cursor_ind, +php_variable_name, sql_variable_name, size)
    +
    Ora_Bind() performs binding of PHP variables with Oracle ones.

    +Function parameters are:
    +
    cursor_id - oracle cursor id for _parsed_ SQL query or PL/SQL block;
    +php_variable_name - variable name in PHP script without leading '$'
    +sql_variable_name - variable name in SQL with leading colon
    +size - maximal number of bytes to be taken into account at binding

    + +Notes:
    +1) PHP variable SHOULD be initialised with at least size bytes +length string even it is return-only variable.
    +2) Ora_Bind() SHOULD be used after Ora_Parse and before Ora_Exec. +In case of re-parsing the SQL sentence, all used variables have +to be re-bound.

    +Ora_Bind() returns 0 upon success, -1 upon failure.
    +

    +There is an example of Ora_Bind() usage:
    +

    +
    +        /* This is the PHP variable to be bound */
    +        $rc  = "12345";
    +
    +        /* This is the SQL query. */
    +        $query = "SELECT * FROM my_table where my_index = :indiana";
    +        
    +        ........
    +
    +        if (Ora_Parse($cursor, $query) < 0) {
    +            echo("Parse failed!\n"
    +            Ora_Logoff($conn);
    +            exit;
    +        } 
    +
    +        if (Ora_Bind($cursor, "rc", ":indiana", strlen($rc)) < 0) {
    +            echo("Binding failed!\n"
    +            Ora_Logoff($conn);
    +            exit;
    +        } 
    +
    +        /* Execute the SQL statement associated with $cursor and
    +        prepare storage for select-list items. */
    +        $ncols = Ora_Exec($cursor);
    +        
    +        ......
    +
    +
    +

    + +

    Ora_Close(conn_ind) +
    Ora_Close() closes the Oracle connection identified by +conn_ind. Returns 0 upon success, -1 upon failure. +

    + +

    Ora_Commit(conn_ind) +
    Commits the current transaction on conn_ind. The +current transaction starts from the Ora_Logon() call or from the last Ora_Commit() +or Ora_Rollback(), and lasts until an +Ora_Commit(), Ora_Rollback() or Ora_Logoff() call is issued. Ora_Commit() +returns -1 (and an error message) upon failure.

    + +

    Ora_CommitOff(conn_ind) +
    Ora_CommitOff() turns off autocommit (automatic commit of every +SQL data manipulation statement) on the Oracle connection +conn_ind.

    + +

    Ora_CommitOn(conn_ind) +
    Ora_CommitOff() turns on autocommit (automatic commit of every +SQL data manipulation statement) on the Oracle connection +conn_ind.

    + +

    Ora_Exec(cursor_ind) +
    Ora_Exec() executes the SQL statement associated with +cursor_ind and prepares storage for select-list items. +The return value is the number of columns for selects, or -1 on +error.

    + +

    Ora_Fetch(cursor_ind) +
    Ora_Fetch() retrieves a row from the database. Returns 1 if a +column was retrieved, 0 if there are no more columns to retrieve or -1 +on error.

    + +

    Ora_GetColumn(cursor_ind, +column) +
    Ora_GetColumn() fetches data for a single column in a returned +row. Ora_Fetch() must have been called prior +to Ora_GetColumn().

    + +

    Ora_Logoff(conn_ind) +
    Ora_Logoff() disconnects the logon data area belonging to +conn_ind and frees used Oracle resources.

    + +

    Ora_Logon(userid, password) +
    Ora_Logon() establishes a connection between PHP and an Oracle +database with the given user id and password. Returns 0 on success +and -1 on failure. +

    + +

    Ora_Open(conn_ind) +
    Ora_Open() opens a cursor in Oracle that maintains state +information about the processing of a SQL statement. Returns a cursor +index or -1 on error.

    + +

    Ora_Parse(cursor_ind, +sql_statement [, defer]) +
    Ora_Parse() parses a SQL statement or PL/SQL block and associates +it with a cursor. An optional third argument can be set to 1 to defer +the parse. Returns 0 on success or -1 on error.

    + +

    Ora_Rollback(cursor_ind) +
    Ora_Rollback() rolls back the current transaction. See Ora_Commit() for a definition of the current +transaction.

    + +

    Ord(arg) +
    +

    Ord returns the ASCII value of the first character of arg.

    + +

    Parse_Str(arg) +
    +

    Parse_str takes a string identical to a regular URL encoded +string and extracts variables and their values.
    +ex. +

        <? parse_str("a[]=hello+world&a[]=second+variable");
    +        echo $a[],"<br>";
    +        echo $a[],"<br>";
    +    >
    +
    +produces
    +
    +hello world
    +second variable
    + +
    PassThru(command_string [,return_var]) +
    +

    The PassThru() function is similar to the Exec() function +in that it executes a Unix command. If the return_var argument is present, the +return status of the Unix command will be placed here. This command should be used in place of +Exec or System when the output from the Unix command is binary data which needs to +be passed directly back to the browser. A common use for this is to execute something +like the pbmplus utilities that can output an image stream directly. By setting +the content-type to image/gif and then calling a pbmplus program to output +a gif, you can create PHP/FI scripts that output images directly.

    + +

    pclose(fp) +
    +

    Pclose closes a pipe opened using the popen() +function.

    + + +

    pg_Close(connection_id) +
    +

    pg_Close will close down the connection to a Postgres database +associated with the given connection identifier.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    $connection = pg_Connect(host, port, options, tty, +dbname) +
    +

    pg_Connect opens a connection to a Postgres database. Each +of the arguments should be a quoted string, including the port number. +The options and tty arguments are optional and can be empty strings. +This function returns a connection_id. This identifier is needed by other +Postgres functions. You can have multiple connections open at once. +This function will return 0 on error.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_DBname(connection_id) +
    +

    pg_DBname will return the name of the database that the given +Postgres connection identifier is connected to.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_ErrorMessage(connection_id) +
    +

    +If an error occured on the last database action for which a valid connection +exists, this function will return a string containing the error message +generated by the back-end server. +

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    $result = pg_Exec(connection_id, query_string) +
    +

    pg_Exec will send an SQL statement to the Postgres database specified by +the connection_id. The connection_id must be a valid identifier +that was returned by pg_Connect. The return value of this function +is an identifier to be used to access the results from other +Postgres functions. This function will return 0 on error. +It will return 1 when the command executed correctly but +are not expected to returned data (insert or update commands, for +example). Note that selects which return no data will still return a +valid result greater than 1.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_FieldName(result_id, field_number) +
    +

    pg_FieldName will return the name of the field occupying the +given column number in the given Postgres result identifier. Field numbering +starts from 0.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_FieldPrtLen(result_id, row_number, +field_name) +
    +

    pg_FieldPrtLen will return the actual printed length (number of +characters) of a specific value in a Postgres result. Row numbering starts at 0. This function +will return -1 on an error.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_FieldNum(result_id, field_name) +
    +

    pg_FieldNum will return the number of the column slot that +corresponds to the named field in the given Postgres result identifier. Field +numbering starts at 0. This function +will return -1 on error.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_FieldSize(result_id, field_name) +
    +

    pg_FieldSize will return the internal storage size (in bytes) of +the named field in the given Postgres result. A field size of 0 indicates +a variable length field. This function +will return -1 on error.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_FieldType(result_id, field_number) +
    +

    pg_FieldType will return a string containing the type name of +the given field in the given Postgres result identifier. Field numbering starts at 0.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_FreeResult(result_id) +
    +

    pg_FreeResult only needs to be called if you are worried about using +too much memory while your script is running. All result memory will +automatically be freed when the script is finished. But, if you are +sure you are not going to need the result data anymore in a script, +you may call pg_freeresult with the result identifier as an +argument and the associated result memory will be freed.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_GetLastOid() +
    +

    pg_GetLastOid can be used to retrieve the Oid assigned to an +inserted tuple if the last command sent via pg_Exec was an +SQL Insert. This function will return a positive integer if +there was a valid Oid. It will return -1 if an error +occured or the last command sent via pg_Exec was not an Insert.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_Host(connection_id) +
    +

    pg_Host will return the host name the the given Postgres +connection identifier is connected to.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_NumFields(result_id) +
    +

    pg_NumFields will return the number of fields (columns) in +a Postgres result. The argument is a valid result identifier returned +by pg_Exec. This function +will return -1 on error.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_NumRows(result_id) +
    +

    pg_NumRows will return the number of rows in a Postgres result. The argument +is a valid result identifier returned by pg_Exec. This function +will return -1 on error.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_Options(connection_id) +
    +

    pg_Options will return a string containing the options specified +on the given Postgres connection identifier.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_Port(connection_id) +
    +

    pg_Port will return the port number that the given Postgres +connection identifier is connected to.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_Result(result_id, row_number, field name/index) +
    +

    pg_Result will return values from a result identifier +produced by pg_Exec. The row_number and field name specify what +cell in the table of results to return. Row numbering starts from +0. Instead of naming the field, you may use the field index as +an unquoted number. Field indices start from 0.

    +

    +Postgres has many built in types and only the basic ones are +directly supported here. All forms of integer, boolean and oid +types are returned as integer values. All forms of float, and real +types are returned as double values. All other types, including +arrays are returned as strings formatted in the same default Postgres +manner that you would see in the 'monitor' or 'psql' programs.

    +

    +Support for returning PHP arrays of numerical and string data +from a Postgres result is planned for a later date.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    pg_tty(connection_id) +
    +

    pg_tty will return the tty name that server side debugging output +is sent to on the given Postgres connection identifier.

    +

    +This function is only available if Postgres support has been enabled in PHP.

    + +

    phpInfo() +
    +

    phpInfo prints the same page you get when adding "?info" +to a PHP/FI parsed URL or when you run the php.cgi binary by itself. It +is especially useful for debugging scripts in the Apache module version since +it displays a number of useful internal data.

    + +

    phpVersion() +
    +

    phpVersion returns the version number of PHP/FI currently running.

    + +

    fp = popen(command,mode) +
    +

    Popen opens a pipe to a command and returns a file pointer index. +This file pointer index can be used by +fgets, fputs and +fclose. Arguments are the command to run and +the mode. The mode can be either "r" for read or "w" +for write. See the UNIX C library popen man page for more details. +Any file opened with popen() should be closed using the +pclose() function.

    + +

    pos(var) +
    +

    The Pos() function returns the numerical position of an array element within +that array. This is not very useful for normal arrays, but for associative +arrays it can be handy.

    + +
    pow(x,y) +
    +

    Evaluates x raised to the power of y. See also Exp()

    + +

    Prev(variable) +
    +

    Prev moves the internal array pointer for the given variable to the +previous item in the array. If already at the beginning of the list, +the pointer will point to the first item. The function returns the value +of the new item. This function is useful for +traversing an associative array in reverse order. See the example +in the End() definition. Also see Next().

    + +

    PutEnv(string) +
    +

    PutEnv puts the given string in the environment. Not extremely useful +since the local environment variables are wiped out when PHP is done with +a page, but in some cases it is useful if other things called from within +a PHP script checks environment variables. For example, if you want to +run multiple mSQL daemon processes, you will need to use PutEnv to switch +back and forth between the different sockets.

    + +

    QuoteMeta(arg) +
    +

    QuoteMeta returns a string composed of arg with any regular expression +special characters escaped with a backslash.

    + +

    Rand() +
    +

    Rand returns a random number between 0 and RANDMAX. Remember to +seed your random number generator with a call to srand() +before calling rand(). You only need to seed the random number generator +once. RANDMAX can be determined with the getRandMax +function. Normally a specific range is chosen by simply using the modulus +operator on the result.

    + +

    readDir() +
    +

    readDir reads the next entry from the currently open +directory structure. Once an entry is read, the pointer is +advanced to the next entry in the directory and the +next call to this function will return the next entry in the +directory. Use the openDir +function to open a directory before calling this function.

    + +

    ReadFile(filename) +
    +

    $size = ReadFile(Filename) - Reads the file filename and simply outputs +it directly. It returns the number of bytes actually read. It is different +from the File() command in that it does not store the file in memory, and it is +safe for use on binary files. This function is generally used where one might +otherwise do a PassThru("cat filename"). Using ReadFile is more efficient.

    + +

    ReadLink(path) +
    ReadLink does the same as the readlink C function +and returns the contents of the symbolic link path or -1 +in case of error. See also LinkInfo.

    + +

    reg_Match(expr,arg[,regs]) +
    +

    This function has been replaced by the ereg() +function. It is however still available for backwards compatibility.
    +reg_Match returns non-zero if the regular expression is matched +in the argument string. For example, the condition, <?if (reg_match("^This.*", +"This is an example string")> would be true since the "^This.*" +expression says to match the word This at the beginning of the string and then +match any characters afterwards. If the regs argument is present, then match +registers are filled into positions 0-10 in the array named by the regs +argument. Register 0 will always contain the full matched string. +For more information on regular expressions, see +the regular expression section of this document.

    + +

    reg_replace(expr,replace,arg) +
    +

    This function has been replaced by the ereg_replace() +function. It is however still available for backwards compatibility.
    +reg_Replace scans the entire argument string and replaces any portions +of the string matched by the given expression with the replacement string. For +example, in the string, "This is an example string" we could +very easily replace every space with a dash with the command: +reg_replace(" ","-","This is an example string").For more information on regular +expressions, see the regular expression section +of this document.

    + +

    reg_Search(expr,arg[,regs]) +
    +

    This function has been replaced by the ereg() +function. It is however still available for backwards compatibility.
    +reg_Search will scan the entire argument string for any matches to +the given regular expression. If a match is found, it will return the portion +of the string starting at where the match occurred. If no match is found a +zero-length string is returned. If the regs argument is present, then match +registers are filled into positions 0-10 in the array named by the regs +argument. Register 0 will always be assigned the full matched string. +For more information on regular expressions, see +the regular expression section of this document.

    + +

    Rename(old,new) +
    +

    Rename filename old to new. Similar to the Unix C +rename() function.

    + +

    Reset(variable) +
    +

    Reset moves the internal array pointer for the given array variable to +the first item of the array and returns the value of this item. +This is useful for traversing associative +and non-indexed arrays. See also End() and Next(). +The following example traverses an associative array:

    +

    +

        <?
    +      Reset($array);
    +      $i=0;
    +      while($i < count($array));
    +        echo $array[]; /* pointer automatically moves ahead one */
    +        $i++;
    +      endwhile;
    +    >

    + +

    return(value) +
    +

    Return exits the current function call and returns the specified value +back to the caller. See the section on User-Defined Functions +for more information.

    + +

    rewind($fd) +
    +

    rewind() resets a file pointer identified by the +$fd argument which is the return value of the fopen() +call. The file pointer is positioned at the beginning of the file. +See also ftell() and fseek().

    + +

    rewindDir() +
    +

    rewindDir moves the current directory pointer back to the +beginning of the directory. Use the openDir +function to open a directory before calling this function.

    + +

    RmDir(dir) +
    +

    RmDir() removes the given directory. See the Unlink() +function for removing regular files.

    + +

    SetCookie(name,value,expire,path,domain,secure) +
    +

    SetCookie() defines a cookie to be sent along with the rest of the header information. +All the arguments except the name argument are optional. If only the name argument is +present, the cookie by that name will be deleted from the remote client. You may also +replace any argument with an empty string ("") in order to skip that +argument. The expire and secure arguments are integers and cannot be skipped with an empty +string. Use a zero (0) instead. The expire argument is a regular Unix time integer +as returned by the time() or +mktime() functions. Some examples follow:

    +

        SetCookie("TestCookie","Test Value");
    +    SetCookie("TestCookie",$value,time()+3600);  /* expire in 1 hour */
    +    SetCookie("TestCookie",$value,time()+3600,"/~rasmus/",".utoronto.ca",1);
    +

    Note that the value portion of the cookie will automatically be urlencoded when +you send the cookie, and when it is received, it is automatically decoded and assigned +to a variable by the same name as the cookie name. ie. to see the contents +of our test cookie in a script, simply do:

    +

        echo $TestCookie;
    + +
    SetErrorReporting(arg) +
    +

    SetErrorReporting sets the current error reporting state to the +value of arg. If non-zero, errors will be printed, and if 0 +they won't be. The function returns the previous error reporting state. +This is a more general way of disabling error +reporting than by preceding individual functions with a '@' character. +See the section on +Suppressing Errors from function calls for more +information.

    + +

    SetLogging(arg) +
    +

    SetLogging() either enables or disables the logging of access +statistics for a page. If arg is +non-zero, logging will be enabled, if zero, disabled.

    + +

    SetShowInfo(arg) +
    +

    SetShowInfo() either enables or disables the information footer +at the bottom of all pages loaded through PHP. If arg is +non-zero, the footers will be enabled, if zero, disabled.

    + +

    SetType(variable,type) +
    +

    SetType sets the type of a variable. The type argument +is one of, "integer", "double" or "string". +See also the GetType() function.

    + +

    shl(n,b) +
    +

    Shift the value n left b bits.

    + +

    shr(n,b) +
    +

    Shift the value n right b bits.

    + +

    Sin(arg) +
    +

    Sin returns the sine of arg in radians. See also Cos() +and Tan()

    + +

    Sleep(secs) +
    +

    Sleep will delay for secs seconds. Similar to the Unix C sleep() +function. See also the USleep() function.

    + +

    Solid_Close(connection_id) +
    +

    Solid_Close will close down the connection to the Solid server associated +with the given connection identifier.

    +

    +This function is only available if Solid support has been enabled in PHP.

    + +

    $connection = Solid_Connect(data source name, username, password) +
    +

    Solid_Connect opens a connection to a Solid server. Each of the arguments +should be a quoted string. The first parameter (data source name) can be an +empty string, resulting in a connection to the default server on the localhost. +This function returns a connection_id. This identifier is needed by other +Solid functions. You can have multiple connections open at once. This function +will return 0 on error. +

    +This function is only available if Solid support has been enabled in PHP.

    + +

    $result = Solid_Exec(connection_id, query_string) +
    +

    Solid_Exec will send an SQL statement to the Solid server specified by +the connection_id. The connection_id must be a valid identifier +that was returned by Solid_Connect. The return value of this function +is an identifier to be used to access the results by other Solid functions. +This function will return 0 on error. It will return +1 when the command executed correctly but are not expected to +returned data (insert or update commands, for example). Note that selects which +return no data will still return a valid result greater than 1. +

    +This function is only available if Solid support has been enabled in PHP.

    + +

    Solid_FetchRow(result_id) +
    +

    Solid_FetchRow fetches a row of the data that was returned by Solid_Exec. +After Solid_FetchRow is called, the fields of that row can be access with +Solid_Result. Every time Solid_FetchRow is called a new row can be accessed by +Solid_Result. If Solid_FetchRow was succesful (there was a new row), +1 is returned, if there are no more rows, Solid_FetchRow will +return 0. The return value of Solid_FetchRow can be used as +the condition of a while loop. +

    +This function is only available if Solid support has been enabled in PHP.

    + +

    Solid_FieldName(result_id, field_number) +
    +

    Solid_FieldName will return the name of the field occupying the given column +number in the given Solid result identifier. Field numbering starts from 0. +

    +This function is only available if Solid support has been enabled in PHP.

    + +

    Solid_FieldNum(result_id, field_name) +
    +

    Solid_FieldNum will return the number of the column slot that corresponds to +the named field in the given Solid result identifier. Field numbering starts at +0. This function will return -1 on error. +

    +This function is only available if Solid support has been enabled in PHP.

    + +

    Solid_FreeResult(result_id) +
    +

    Solid_FreeResult only needs to be called if you are worried about using too +much memory while your script is running. All result memory will automatically +be freed when the script is finished. But, if you are sure you are not going to +need the result data anymore in a script, you may call Solid_FreeResult with +the result identifier as an argument and the associated result memory will be +freed. +

    +This function is only available if Solid support has been enabled in PHP.

    + +

    Solid_NumFields(result_id) +
    +

    Solid_NumFields will return the number of fields (columns) in a Solid +result. The argument is a valid result identifier returned by Solid_Exec. +This function will return -1 on error.

    +

    +This function is only available if Solid support has been enabled in PHP.

    + +

    Solid_NumRows(result_id) +
    +

    Solid_NumRows will return the number of rows in a Solid result. The argument +is a valid result identifier returned by Solid_Exec. This function will return +-1 on error. Large Caveat: +The SOLID SQL server uses ODBC as it's primary (and only) interface. +SolidNumRows() uses SQLRowCount at the low-level to get the number of +rows. SQLRowCount follows the age-old Microsoft +tradition of unnecessary limitations, strange exceptions and other odd things. +This means that the function will only return the number of rows affected +by an INSERT, UPDATE or a DELETE clause. No SELECT! As a workaround you can +try the count() statement of SQL or a while-loop that counts the number +of rows. If you need Solid_NumRows() to figure out how many records to +read after a SELECT clause, try checking the return value from +Solid_FetchRow() instead. So instead of:

    +

         $num = Solid_NumRows();
    +    $i=0;
    +    while ($i < $num) {
    +        /* print results... */
    +        $i++;
    +    }

    +you might try:

    +

        while(Solid_FetchRow($result)) {
    +        /* print results... */
    +    }
    +

    +This function is only available if Solid support has been enabled in PHP.

    + +

    Solid_Result(result_id, field name/index) +
    +

    Solid_Result will return values from a result identifier produced by +Solid_Exec. The field name specify what cell in the row to return. Instead of +naming the field, you may use the field index as an unquoted number. Field +indices start from 0. +

    +This function is only available if Solid support has been enabled in PHP.

    + +

    Sort(array) +
    +

    Sort is used to sort a PHP array in ascending order. To sort in descending order, use +the RSort() function. It understands +the three variable types and will sort alphabetically if the array +contains strings, and numerically if the array contains numbers. In +the case of an array which contains a mixture of types, the first type +in the array will specify the sort method. Note that if you are going to +sort an associative array, you should use the ASort() +function.

    + +

    Soundex(string) +
    +

    This function takes a string argument and returns the soundex key + for the string. Soundex keys have the property that words + pronounced similarly produce the same soundex key, and can thus + be used to simplify searches in databases where you know the + pronunciation but not the spelling. This soundex function returns + a string 4 characters long, starting with a letter.
    + This particular soundex function is one described by Donald Knuth + in "The Art Of Computer Programming, vol. 3: Sorting And + Searching", Addison-Wesley (1973), pp. 391-392. +
    + Example: +

    +   Euler and Ellery map to E460
    +   Gauss and Ghosh map to G200
    +   Hilbert and Heilbronn map to H416
    +   Knuth and Kant map to K530
    +   Lloyd and Ladd map to L300
    +   Lukasiewicz and Lissajous map to L222
    +     
    +

    + +

    Sprintf(format,arg [,arg,arg,arg,arg]) +
    +

    Sprintf returns the string created by the formatted output defined +by the format argument and arg. It is similar to the formatted version +of the echo command, except this just returns the +string while echo displays it. It is also similar to the C function +by the same name. The difference being that this version does not +accept more than 5 arg arguments. If you need to format more than +5 arguments into a single string, simply call sprintf() multiple times +for each group of arguments. Note that the type of the argument doesn't +affect the output. The argument type is automagically converted to match the +type specified in the format string.

    + +

    Sqrt(arg) +
    +

    Sqrt returns the square root of arg.

    + +

    Srand(integer) +
    +

    Srand seeds the random number generator. This function takes +any integer as an argument. One choice for a seed value is to use the +date function to give you the current number of seconds +past the minute. Note that this function does not return a value! +This function simply seeds the random number generator for subsequent calls +to the rand() function. eg.

    +

    	<?srand(date("s"))>

    + +

    strchr(string,arg) +
    +

    strchr and strstr are actually identical functions. They +can be used interchangeably and both are included for completeness sake. +They will return the portion of the string argument starting at the point +where the given sub-string is found. For example, in the string, +"This is an example string" above, the call: +<?echo strchr($string,"an ")> would +return the string: "an example string".

    + +

    strtr(input,set1,set2) +
    strtr() translates each character of "string" that is in +"set1" to the corresponding character in "set2". +Characters not in set1 are passed through unchanged. When a character +appears more than once in "set1" and the corresponding +characters in "set2" are not all the same, only +the final one is used. When one of "set1" or "set2" +is longer, longer "set?" is truncated to length of shorter +"set?".

    + +

    StripSlashes(arg) +
    +

    StripSlashes unescapes the string argument. See also +AddSlashes().

    + +

    strlen(string) +
    +

    strlen returns the length of the string.

    + +

    strrchr(string,arg) +
    +

    strrchr will search for a single character starting at the end of the +argument string and working its way backwards. It returns the string +starting with the search character if the character was found and an +empty string if it wasn't.

    + +

    strstr(string,arg) +
    +

    strstr and strchr are actually identical functions. They +can be used interchangeably and both are included for completeness sake. +They will return the portion of the string argument starting at the point +where the given sub-string is found. For example, in the string, +"This is an example string" above, the call: +<?echo strstr($string,"an ")> would +return the string: "an example string".

    + +

    strtok(string,arg) +
    +

    strtok is used to tokenize a string. That is, if you have a string like +"This is an example string" you could tokenize this string into +its individual words by using the space character as the token. You would use +the following script code: +

    +

    	<?
    +	  $string = "This is an example string";
    +	  $tok = strtok($string," ");
    +	  while($tok);
    +		  echo "Word=$tok<br>";
    +		  $tok = strtok(" ");
    +	  endwhile;
    +	>

    +

    +Note that only the first call to strtok uses the string argument. Every +subsequent call to strtok only needs the token to use, as it keeps track of where +it is in the current string. To start over, or to tokenize a new string you +simply call strtok with the string argument again to initialize it. Note +that you may put multiple tokens in the arg parameter. The string +will be tokenized when any one of the characters in the argument are found.

    + +

    strtolower(string) +
    +

    strtolower converts the string argument to all lower case characters.

    + +

    strtoupper(string) +
    +

    strtoupper converts the string argument to all upper case characters.

    + +

    strval(variable) +
    +

    strval returns the string value of the variable. See also +the intval() and doubleval() +functions.

    + +

    substr(string, start, length) +
    +

    substr returns a part of the given string. The start position is given +by the start argument. The first position in a string is position 0. And the +length argument specifies the number of characters to return from the start +position.

    + +

    sybSQL_CheckConnect() +

    This function returns 1 if the connection to the database has been established and 0 otherwise.

    + +

    sybSQL_DBuse(database) +

    This function issues a Sybase Transact-SQL use command for the +specified database. The only argument to the function is the name of the +database to use. Example: sybsql_dbuse("pubs2"); +

    +The function returns 1 on success and 0 on failure.

    + + +

    sybSQL_Connect() +
    +

    This function opens a network connection to the sybase server. This +function depends on several environment variables which must be set by +the caller before calling this function. +

    +The environment variables are: +

    +DSQUERY - the alias of the sybase server as defined in the sybase +interface file. +
    +DBUSER - connect to the sybase server as this user. +
    +DBPW - password of the user. +

    +These variables can be set in several ways. If php/fi is running as a CGI +program, then a shell wrapper can be used to set these variables or you can +set these variables directly in the HTML page using the builtin PHP/FI +function putenv(). +Instead of using the values directly in +putenv(), the values can be obtained from form +input. The variables can be defined in a file and included in the html files +with PHP/FI +include statement. +

    +The function returns 1 on success and 0 on failure.

    + +

    sybSQL_Exit() +

    +This function forces a Sybase connection to be shut down. If not called, the +connection will automatically be closed when the PHP page has been fully parsed, +so calling this function is optional.

    + +

    sybSQL_Fieldname(index) +

    +This function returns the field name of a regular result column. The argument +to the function is the field index. Example: sybsql_fieldname(0);. +NOTE: the field index starts at 0. +

    +If the the result column does not have any name, the function returns an +empty string ("").

    + +

    sybSQL_GetField(field) +

    +This function gets the value of a specific column of the current result +row. The only argument to the function is the string specifying the field. +Example: $value=sybsql_getfield("@10"); +NOTE: sybsql_nextrow() must be called +before calling this function. sybsql_nextrow() must be called if the row +pointer needs to be incremented, because this function only reads the current +row in the row buffer. +

    +If the specified column has a value, the function returns the value as a +string otherwise the function returns an empty string ("").

    + +

    sybSQL_IsRow() +

    +This function indicates if the current SQL command returned any rows.

    +The function returns 1 if the SQL command returned any rows and 0 if the +command didn't return any rows.

    + +

    sybSQL_NextRow() +

    +This function increments the row pointer to the next result row.

    +The function returns 1 as long as there are rows left to read. If there are +no more rows left to read or in case of error the function returns 0.

    + +

    sybSQL_NumFields() +

    +This function returns the number of fields in a current result row.

    +The function returns the number of rows in the current result row. If there are +no fields, the function returns 0.

    + +

    sybSQL_NumRows() +

    +This function returns the number of rows in the current result buffer. +NOTE: +when this function is called, it will seek to the first row right +away, then it will call dbnextrow() until there are no more rows and +increment a internal counter to calculate the number of rows in the +result buffer. Then it points back to the very first row. Therefore, +after calling this function row counter always points to the very +first row. It's ugly but I don't know any other way at this time. +

    +If there are no rows in the result buffer, the function will return 0.

    + +

    sybSQL_Query() +

    +This function submits a Sybase SQL query request to the server. +The only argument to the function is the query string. +Example: +$rc=sybsql_query("select * from authors");

    +The function returns 1, if the query is passed successfully and returns 0 +if the request fails.

    + +

    sybSQL_Result(string) +

    +This function prints specific fields of the current result row. The only +argument to the function is a string which holds information about the +fields to be printed. A field is specified with a @ followed by a number. +For example, @0 means first row, @10 means 11th row. Note that the field +number starts at 0. The function is perhaps best illustrated with a +complete example:

    +

    <?
    +    /*
    +    ** assuming all the necessary variables for 
    +    ** connection is already set. please note, NO error checking is
    +    ** done. You should always check return code of a function.
    +    */
    +
    +    /* connect */
    +    $rc=sybsql_connect();
    +
    +    /* use the pub2 database */
    +    $rc=sybsql_dbuse("pubs2");
    +
    +    /* send the SQL request */
    +    $rc=sybsql_query("select * from authors");
    +    $i=0;
    +
    +    /* find the no of rows returned */
    +    $nrows=sybsql_numrows();
    +
    +    /* start table */
    +    echo "<table border>\n";
    +    /*
    +    ** print only first and 2nd field
    +    */
    +    while($i<$nrows) {
    +        sybsql_result("<tr><td>@0</td>@1</td></tr>\n");
    +        $i++;
    +    }
    +    /* end table */
    +    echo "</table>\n";
    +>

    +The above example uses HTML table to format the output. Of course, any +other valid HTML tags can be used.

    + +

    sybSQL_Result_All() +

    +This function prints all rows in the current result buffer. The result is +printed in a hard coded HTML table format. Note that this function +should not be called inside a loop. The function will print the name of +the columns if there are any column headings in the output.

    + +

    sybSQL_Seek(row) +

    +This function sets the requested row number as the current row in the row +buffer. The only argument to the function is the row number. Example: +$rc=sybsql_seek(10); Note, row number starts at 0.

    +The function returns 1 if the seek succeeds and 0 if the seek fails. When +all of the rows in the current result buffer have been visited, the row +pointer points to the last row. If it is needed to go backward and visit +some more rows, this function can be used for this purpose.

    + +

    Symlink(target,link) +
    +

    Symlink() creates a symbolic link. See the Link() +function to create hard links.

    + +

    Syslog(level,message) +
    +

    +Syslog() logs messages to the system using UNIX's syslog(3) feature. +See your UNIX man page for more details. See also InitSyslog(), OpenLog() +and CloseLog(). +

    + +

    System(command_string [,return_var]) +
    +

    System is just like the C system() command in that it executes +the given unix command and outputs the result. If a variable is provided as +the second argument, then the return status code of the executed unix command +will be written to this variable. Note, that if +you are going to allow data coming from user input to be passed to this System function, +then you should be using the EscapeShellCmd() function +to make sure that users cannot trick the system into executing arbitrary commands. +The System() call also automatically flushes the Apache output buffer after each +line of output if PHP is running as an Apache module. +If you need to execute a command and have all the data from the command passed +directly back without any interference, use the PassThru() +function. See also the Exec function.

    + +

    Tan(arg) +
    +

    Sin returns the tangent of arg in radians. See also Sin() +and Cos()

    + +

    TempNam(path, prefix) +
    +

    TempNam returns a unique filename located in the directory indicated +by path with filename prefix given by prefix. It is identical to the +Unix C tempnam() function.

    + +

    Time() +
    +

    Time simply returns the current local time in seconds +since Unix epoch (00:00:00 Jan. 1 1970). It is equivalent to calling +Date("U"). If you need better than per-second +granularity, use the Microtime function.

    + +

    Umask([mask]) +
    +

    Umask(mask) sets PHP's umask to mask & 0777 and +returns the old umask. If PHP/FI is an Apache module, Apache's old +umask is restored when PHP/FI has finished. mask must be +specified in octal notation, like for +ChMod(). Umask() +without arguments simply returns the current umask.

    + +

    UniqId() +
    +

    UniqId returns a prefixed unique identifier based on current time +in microseconds. The prefix can be useful for instance if you +generate identifiers simultaneously on several hosts that might happen +to generate the identifier at the same microsecond. The prefix can be +up to 114 characters long. +

    + +

    Unlink(filename) +
    +

    Unlink deletes the given filename. Similar to the Unix C unlink() function. +See the RmDir() function for removing directories.

    + +

    UnSet($var) +
    +

    UnSet undefines the given variable. In the case of an array, the entire +array is cleared. Individual array elements may also be unset.

    + +

    UrlDecode(arg) +
    +

    UrlDecode decodes a string encoded with the +UrlEncode function. In typical use, it is not necessary to decode +URL Encoded strings because these are automatically decoded when strings +are passed between pages. However, for completeness sake, this function +has been included.

    + +

    UrlEncode(arg) +
    +

    UrlEncode encodes any characters from arg which are not one of +"a-zA-Z0-9_-." by replacing them with %xx where xx is their +ASCII value in hexadecimal. The encoded string is returned.

    + +

    USleep(microsecs) +
    +

    Sleep will delay for the given number of microseconds. Similar to +the Unix C usleep() function. See also the Sleep() +function.

    + +

    Virtual(filename) +
    +

    Virtual is an Apache-specific function which is equivalent + to <!--#include virtual...--> in mod_include. It performs an + Apache sub-request. It is useful for including CGI scripts or .shtml + files, or anything else that you would parse through Apache + (for .phtml files, you'd probably want to use <?Include>.

    + +

    +
    +

    Adding your own internal functions to PHP/FI

    +It may well be that the set of functions provided by PHP/FI does not +include a particular function that you may need. By carefully following +the steps described below, it is possible for you to add your own +functions to PHP/FI.

    +

    +Before you start hacking away at the internals of PHP/FI you need to +grab a copy of the latest version of Bison. Bison is GNU's implementation +of YACC (Yet Another Compiler Compiler). The YACC that came with your +operating system may or may not be good enough, but just to make sure, +go grab Bison. You can find it at +ftp://prep.ai.mit.edu/pub/gnu.

    +

    +You should also have a look at the Makefile and turn on debugging. Simply +uncomment the DEBUG line in the Makefile. The output file +of debug information is specified by DEBUG_FILE in php.h. +It is by default set to /tmp/php.err. You can change this to +suit your needs.

    +

    +A final thing you might want to keep in mind is that php runs as the +same user id as httpd on your system, unless of course you are running it +with the setuid bit set, and this httpd user does not generally have +write access to the various directories. This means that if you do something +that causes php to core dump, you will not get a core file. The easy way +around this is to make the directory where you keep your test .html files +writable to all. PHP changes its current directory to the directory of +the .html file it is reading and will thus dump its core there if it can.

    +

    +In the following steps we will use the Time() function to +illustrate how to add a function.

    + +

    Step 1 - Defining the grammar of your Function +
    +

    If your function takes 0 to 6 arguments, there are predefined +grammars available. You can skip this step.

    + +

    The grammar of your function is defined in the parse.raw file. +The first thing to add is a token. A token is an upper case keyword +which is usually the same as your function name. All the tokens are +defined near the top of the parse.raw file. The order doesn't matter. +Then you need to build your actual YACC grammar rule. Look at the +existing rules and find a function that is similar to the one you are adding. +Keep in mind that most normal functions are standard functions that read their +arguments from the expression stack. Your function will most likely fall into +this group in which case you won't need to touch the parse.raw file.

    + +

    Step 2 - Adding your function to the lexical analyzer hash table +
    +

    To do this, edit lex.c and find the hash table near the top of the +file. Look for the line, static cmd_table_t cmd_table[22][30] = {, +which defines the beginning of the hash table. The [22][30] defines +the size of the 2 dimensional array which holds the hash table. The 22 is one +greater than the maximum function name length and the 30 refers to the +maximum number of functions in any one hash list. If you exceed either of +these limits, simply increase them right here.

    +

    +This hash table would probably rate as the absolute simplest hash table in +the entire world. The hash value is the length of the string of +the function name to be hashed. So, for our Time() example, we +need to add an entry for hash value 4. Therefore we add the following +line to the hash list for 4:

    +

    +

          { "time",INTFUNC0,UnixTime },

    +

    +This entry maps a string to the INTFUNC0 token. You can look up the grammar for +the INTFUNC0 token in parse.raw and you will see that it is a generic +grammar for an internal function call with 0 arguments. The string, +in quotes above, is the actual string that you will be using in the .html files +to call your function. Keep in mind that PHP/FI function names are +not case sensitive. And the final UnixTime element is the +actual function to be called.

    + +

    Step 3 - Write your actual Function +
    +

    You can actually write your function in any language you like, as long +as it is callable through the normal C function call convention and you +have a way of creating either an object file or a library file compatible +with the linker on your system. In general, we will assume that you are +writing your function in C. All the functions that come with PHP/FI have +been written in C. The Time() function, or UnixTime() as it is called +internally in PHP can be found in date.c and looks like this:

    +

    +

    +void UnixTime(void) {
    +    char temp[32];
    +
    +    sprintf(temp,"%ld",(long)time(NULL));
    +    Push(temp,LNUMBER);
    +}

    +

    +Note that the function is void. This indicates that it doesn't return +anything. This may seem confusing to you because obviously the function +needs to somehow return the time. The time is returned, but not as the +return value of the function. It is pushed onto what is called an +expression stack. The expression stack is simply a stack of strings +and an associated type. PHP/FI understands only 3 basic variable types: +STRING, LNUMBER and DNUMBER. STRING is a character string, LNUMBER is +a long integer and DNUMBER is a double, or floating point, value. In +this Time() example, the value to be returned is the time expressed in +Unix format (number of seconds since Jan.1 1970) and is thus an integer. +The expression stack only accepts strings, so we sprintf the long integer +into a string and push it onto the stack indicating that it is actually +a long integer with the line: Push(temp,LNUMBER);

    + +

    Step 4 - Add your function prototype to php.h +
    +

    In the bottom half of the php.h file you will find a +complete list of prototypes of all the functions in php. They are +grouped by the files in which they appear. Simply add your prototype +to an appropriate place in this file. For our Time() example the +following line is added:

    +

    +

    void UnixTime(void);

    + +

    Step 5 - Compile +
    +

    You have to remember to re-make the parser whenever you make a change +to the parse.raw file. Type: make parser to +do this. You must have at least version 1.25 of Bison in order to make +the PHP parser. Then do a normal compile by typing: make +once that is done.

    + +

    Step 6 - Send me your additions! +
    +

    If you would like your functions added to the next release of +PHP/FI, send them to me. The best way is probably to make a context-sensitive +diff. To do that, you need a copy of a clean unmodified distribution. Simply +do a, diff -c on the files you have changed comparing them +to the original files. Please don't send me a diff of the changes in +parse.c since that file is automatically generated. Send me the diff +from parse.raw instead.

    +

    +

    +The Time() example illustrated the steps involved in adding a function. +Chances are that the function you wish to add is quite a bit more +complex than this example. You will probably want to be able to pass +arguments to your function and have it manipulate these arguments in +some manner. You may even want to have it callable in different ways. +These concepts will be illustrated by the PHP/FI crypt() function. +See also the section entitled Notes for Code Hacks +for some more technical details about writing code for PHP/FI.

    +

    +The Crypt() Grammar in parse.raw:

    +

    +

    %token CRYPT
    +        .
    +        .
    +        .
    +    | CRYPT '(' expr ',' expr ')'
    +        {
    +            if(GetCurrentState(NULL) || inCase || inElseIf) Crypt(1);
    +        }
    +    | CRYPT '(' expr ')'
    +        {
    +            if(GetCurrentState(NULL) || inCase || inElseIf) Crypt(0);
    +        }

    +

    +Here it is shown how to define a grammar which lets you call a function +with either 1 or 2 arguments. You could write different functions +to handle the two cases, or simply send a mode parameter as is done +here to indicate the mode in which the function is called. Note that in +this case you cannot use one of the pre-defined INTFUNCn grammars since your +function can take a variable number of arguments.

    +

    +The other aspect that is shown is how to actually represent function +arguments. In most cases you will want to use the expr +identifier. This identifier means that the argument is an expression. +An expression can be a literal value, a function call or a combination +of many expressions. See parse.raw for the complete yacc grammar +definition for expressions for more details.

    +

    +The Hash Table entry in lex.c:

    + +

    +

          { "crypt",CRYPT,NULL },

    +

    +Notice that the last item is a NULL in this case since the function call is +handled in parse.raw directly. If you used an INTFUNCn grammar, then +you would put the name of your function in place of this NULL. The actual +Crypt() function in crypt.c:

    + +

    +

    /*
    + * If mode is non-zero, a salt is expected.
    + * If mode is zero, a pseudo-random salt will be selected.
    + */
    +void Crypt(int mode) {
    +#if HAVE_CRYPT
    +	Stack *s;
    +	char salt[8];
    +	char *enc;
    +	
    +	salt[0] = '\0';
    +	if(mode) {
    +		s = Pop();
    +		if(!s) {
    +			Error("Stack error in crypt");
    +			return;
    +		}
    +		if(s->strval) strncpy(salt,s->strval,2);
    +	}
    +	s = Pop();
    +	if(!s) {
    +		Error("Stack error in crypt");
    +		return;
    +	}
    +	if(!salt[0]) {
    +		salt[0] = 'A' + (time(NULL) % 26);
    +		salt[1] = 'a' + (time(NULL) % 26);
    +		salt[2] = '\0';
    +	}
    +	enc = (char *)crypt(s->strval,salt);
    +#if DEBUG
    +	Debug("Crypt returned [%s]\n",enc);
    +#endif
    +	Push(enc,STRING);	
    +
    +#else
    +	Error("No crypt support compiled into this version");
    +#endif
    +}

    +

    +The most important aspect of this function is the s = Pop() +call. The arguments to the function must be popped off the expression +stack one by one. When you write a function which takes multiple +arguments, remember that a stack is a LAST-IN, FIRST-OUT data structure. +This means that you will be popping your arguments off the stack in +reverse order. The last argument is popped off first. In the above +example we check to see if we are in the 2 argument mode. If we are, +we pop the argument off the stack and save it. Then we pop the next +argument off the stack. Pop() returns a pointer to a Stack structure (s). +The Stack structure looks like this (from php.h):

    +

    +

    /* Expression Stack */
    +typedef struct Stack {
    +    short type;
    +    unsigned char *strval;
    +    long intval;
    +    double douval;
    +    VarTree *var;
    +    struct Stack *next;
    +} Stack;

    +

    +The type will generally be one of STRING, LNUMBER or DNUMBER. +The strval, intval, and douval components are +the string, integer and double representations of the value respectively. +If the expression is actually a defined variable, the var component +contains a pointer to the variable structure which defines this variable.

    +

    +In our Crypt() function we are only interested in the string value of +the argument, so we use s->strval. Many PHP/FI functions can +do different things depending on the type of the variable simply by +checking s->type and using s->strval, s->intval +and/or s->douval appropriately.

    +

    +After calling the real crypt() function and getting the +encrypted string, our Crypt() function calls Push(enc,STRING); +to push the return value onto the expression stack. It should be noted +that the expression stack is cleared after each PHP/FI line, so if +you push expressions onto this stack that are never popped by anything, +it won't matter.

    +

    +The Debug() call in the Crypt() example shows how to add debugging +output to your function. Debug() is a varags (variable argument list) +function just like printf.

    +


    +

    Notes for Code-Hacks

    +

    Memory management within PHP/FI is a tricky thing. Since we can run as +a server module, we have to be very careful about memory resources. Not +only do we need to be reentrant, but we also need to be handle the fact +that we can receive a timeout signal at any time at which point we drop out +of the module. We get no warning, and we get no time to free any memory +that we may have allocated. And this memory has to be freed, or the data +space of the httpd process we are linked to could grow indefinitely. +This also applies when PHP is running in CGI mode since it can be set up +to run as a FastCGI persistent process.

    +

    The solution is to use sub-pools of memory. These pools are +automatically cleared by Apache when a session is terminated, or in the case +of a FastCGI persistent process, these pools are cleared in main.c +every time the FastCGI wrapper loop executes. Three such +pools are used at the moment. They are numbered 0,1 and 2. The sub-pool +number is the first argument to the emalloc and estrdup +functions.

    +

    +
    Pool 0 - Session lifespan
    +
    Any memory allocated from this pool will span the entire session. +It is a good idea to keep the use of this pool as low as possible. +For example, if someone makes a while loop that iterates 1000 times and +within this while loop they call something which allocates memory from +pool 0, then this memory will be allocated 1000 times. This is a quick +way to use up all alloted data space.
    +
    Pool 1 - Temporary storage (shortest lifespan)
    +
    If a temporary work buffer is needed for something within a function, +the memory for it must come from this pool. This pool is cleared on every +call to yylex(). ie. the memory is lost just about as soon as you leave +a function.
    +
    Pool 2 - Expression space (medium lifespan)
    +
    This pool exists for the duration of an expression. An expression in +this context being a full PHP/FI command line. It will not get cleared +within functions since the higher level expression which called the +function has not been completed until the function returns. The ClearIt +flag in the yylex() function indicates when it is safe to clear this +pool.
    +
    +

    The use of sub-pools completely eliminates the need to explicitly free +memory anywhere in the code, with the one exception being memory allocated +using a regular malloc call by various libraries that could be linked into +PHP. The gdbm library is one such example.

    + + From bcd02c9e2fc0fae7cd8f7fd3e9f97e058d8ea516 Mon Sep 17 00:00:00 2001 From: Colin Viebrock Date: Tue, 6 Feb 2001 20:44:54 +0000 Subject: [PATCH 11/49] new rules --- README.mirror | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/README.mirror b/README.mirror index 8c5554147f..3973559aab 100644 --- a/README.mirror +++ b/README.mirror @@ -19,21 +19,18 @@ to www.php.net to fetch user contributed manual notes. Once you create a virtualhost which looks something like: - ServerName xx.php.net - ServerAdmin yourname@yourdomain.com - DocumentRoot /www/htdocs/phpweb - - php3_include_path .:/www/htdocs/phpweb/include - - - php_value include_path .:/www/htdocs/phpweb/include - - ErrorLog logs/error_log - TransferLog logs/access_log + ServerName xx.php.net + ServerAdmin yourname@yourdomain.com + DocumentRoot /www/htdocs/phpweb + php_value include_path .:/www/htdocs/phpweb/include + php_value auto_prepend_file shared.inc + php_flag short_open_tag on + ErrorLog logs/error_log + TransferLog logs/access_log DirectoryIndex index.php index.php3 index.html index.htm manual.php manual.php3 manual.html - ErrorDocument 404 /error/ - ErrorDocument 401 /error/ - ErrorDocument 403 /error/ + ErrorDocument 404 /error/ + ErrorDocument 401 /error/ + ErrorDocument 403 /error/ modified to reflect your local paths and country, of course, then your site From af3c6e350d8f6680cc6d3372e2c15e5c310ffc8c Mon Sep 17 00:00:00 2001 From: Colin Viebrock Date: Tue, 6 Feb 2001 21:41:07 +0000 Subject: [PATCH 12/49] Layout changes --- FAQ.php | 32 ++++++------ books.php | 39 +++++++------- docs.php | 46 +++++++++++++++-- downloads.php | 30 ++++++----- include/layout.inc | 16 +++--- index.php | 44 ++++++++-------- links.php | 21 ++++++-- mirrors.php | 33 +++++++----- news.php | 2 +- search.php | 42 +++++++-------- source.php | 18 ++++--- style.css | 8 ++- support.php | 125 ++++++++++++++++++++++++++++++++------------- 13 files changed, 290 insertions(+), 166 deletions(-) diff --git a/FAQ.php b/FAQ.php index ed720e6935..1417c14f57 100644 --- a/FAQ.php +++ b/FAQ.php @@ -2,7 +2,9 @@ commonHeader("Frequently Asked Questions"); ?> -

    PHP Frequently Asked Questions

    +

    +PHP Frequently Asked Questions +

    @@ -15,7 +17,7 @@ phpdoc@lists.php.net. -->

    -


    + -
    +

    1. General Information

    @@ -203,7 +205,7 @@ -
    +

    2. PHP mailing lists

    @@ -283,7 +285,7 @@ -
    +

    3. Obtaining PHP

    @@ -385,7 +387,7 @@ -
    +

    4. Connecting to databases

    @@ -611,7 +613,7 @@ functionality that wasn't possible with their non-persistent brothers. -
    +

    5. Installation

    @@ -725,7 +727,7 @@ functionality that wasn't possible with their non-persistent brothers. -
    +

    6. Build Problems

    @@ -946,7 +948,7 @@ functionality that wasn't possible with their non-persistent brothers. -
    +

    7. Using PHP

    @@ -1211,7 +1213,7 @@ function myfunc($argument) { -
    +

    8. PHP and HTML

    @@ -1249,7 +1251,7 @@ functions you can use to process these arrays once you get them into -
    +

    9. PHP and other languages

    @@ -1326,7 +1328,7 @@ functions you can use to process these arrays once you get them into -
    +

    10. Common Problems

    @@ -1404,7 +1406,7 @@ function, and it can't seem to find it. What's wrong? -
    +

    11. Migrating from PHP3 to PHP4

    @@ -1430,7 +1432,7 @@ function, and it can't seem to find it. What's wrong? -
    +

    12. Migrating from PHP2 to PHP3

    @@ -1445,7 +1447,7 @@ function, and it can't seem to find it. What's wrong? -
    +

    Credits

    diff --git a/books.php b/books.php index 263cf84f64..4e5fb9aa0d 100644 --- a/books.php +++ b/books.php @@ -2,11 +2,12 @@ commonHeader("PHP Books"); ?> - - - - +

    +Books in English +

    + +
    Books in English
    +
    -
    Other Languages
    - -
    +

    Click on the links above for more information on the books. And remember, if you buy the book using the above links, you are helping to support PHP development! @@ -762,12 +765,11 @@ search there):

    +

    - - - - - - - - - -
    Search what:
    Search for:

    +

    -

    PHP FAQ

    +

    +PHP FAQ +

    • The PHP FAQ is your first stop for general information and those questions that seem to be on most people's minds.
    + + + +

    The PHP Manual On-line

    • PHP Manual Online. Your reference @@ -24,7 +30,12 @@ links. You can also browse or download translated versions here.
    -

    PHP Annotated Manuals

    + + + + + +

    PHP Annotated Manuals

    • PHP Annotated Manual. This is the same as the above, except there is a built-in errata/note system @@ -37,6 +48,11 @@ system.
    + + + + +

    Downloadable PHP Manuals

    HTML Version

      @@ -44,7 +60,7 @@
    -

    Latest versions (daily snapshots)

    +

    Latest Versions (Daily Snapshots)

    • @@ -86,6 +102,11 @@
    + + + + +

    Translations

    -

    More information

    + + + + + +

    More Information

    • PHP Function Table. This page has a overview about which pages are translated to the @@ -108,6 +134,11 @@
    • License questions? See the License FAQ
    + + + + +

    CVS Account

    -

    Old/unsupported information

    + + + + + +

    Old/Unsupported Information

    • PHP/FI 2.0 Manual. This includes discussions on a few topics that aren't covered in the PHP 3 manual diff --git a/downloads.php b/downloads.php index 4a61b7b373..de840f3fba 100644 --- a/downloads.php +++ b/downloads.php @@ -1,18 +1,17 @@ -

      Latest version of PHP 4.0


      +

      Latest version of PHP 4.0

      + -Complete Source Code
      +

      Complete Source Code

      -Win32 Binaries
      +

      Win32 Binaries

      • PHP 4.0.4pl1 - 13 January 2001
        (3.64 Mb CGI binary plus server API versions for Apache, AOL server, ISAPI and NSAPI. MySQL support built-in, many extensions included, packaged as zip)
      • PHP 4.0.4pl1 - 13 January 2001
        (735 Kb CGI only, MySQL support built-in, packaged as Windows installer to install and configure PHP, and automatically configure IIS, PWS and Xitami, with manual configuration for other servers. N.B. no external extensions included)
      • @@ -33,9 +32,10 @@
      -
      + -

      Other Downloads

      + +

      Other Downloads

      • For downloadable documentation, go to the documentation page @@ -45,9 +45,13 @@
      -

      Previous Releases of PHP 4.0

      -Complete Source Code
      + + + +

      Previous Releases of PHP 4.0

      + +

      Complete Source Code

      -Win32 Binaries
      +

      Win32 Binaries

      • PHP 4.0.3pl1
      • PHP 4.0.2
      • @@ -79,10 +83,11 @@ Previous releases are listed for informational purposes only. You should being using the latest release.

        -
        + + -

        Older Versions of PHP

        +

        Older Versions of PHP

        • PHP 3.0 Source code and Win32 binaries @@ -93,7 +98,6 @@ Older releases are listed for archeological purposes only. They are no longer supported.

          -
          - -
          -
          -\n"; + } ?> + +
          +
          + diff --git a/index.php b/index.php index f8d8555cd8..abbe6a852f 100644 --- a/index.php +++ b/index.php @@ -4,9 +4,9 @@ ?> -

          +

          Patch Level 1 Released For PHP 4.0.4 -

          +

          Due to two security issues found in the Apache module version of PHP 4.0, PHP 4.0.4pl1 has been released. This bug-fix release also fixes a few party-crashing bugs that @@ -18,10 +18,10 @@ -

          +

          New Usage Stats For January Available -

          +

          and have @@ -35,10 +35,10 @@ -

          +

          PHP Conference - Call For Participation -

          +

          The conference will be part of the alongside the 5th annual Perl Conference at the @@ -52,9 +52,9 @@ -

          +

          PHP 4.0.4 Released -

          +

          19-Dec-2000 -- This release includes improvements for a large number of defects and numerous enhancements in the PHP core, the language implementation and @@ -67,9 +67,9 @@ -

          +

          PHP 3.0.18 Released -

          +

          21-Oct-2000 -- PHP 3.0.18 was released. This is a bug-fix release, including fixes for file uploads and a backported imagetypes() function from PHP 4.0. The @@ -82,9 +82,9 @@ -

          +

          Improve Your PHP Skills -

          +

          Looking for clear and useful guides to build dynamic web-sites using PHP? Our lists now @@ -97,9 +97,9 @@ -

          +

          Manual Search Tip -

          +

          You can go directly to PHP manual pages with a URL such as . @@ -110,9 +110,9 @@ -

          +

          Tips and Tricks Section -

          +

          Check out our page for some "neat" things, PHP-related. It's a little sparse right now, but feel free to make suggestions! @@ -123,10 +123,10 @@ -

          +

          Zend Optimizer Released -

          +

          has announced the availability of the Zend Optimizer for PHP 4.0. The optimizer is available for @@ -138,9 +138,9 @@ -

          +

          What Is PHP? -

          +

          PHP is a server-side, cross-platform, HTML embedded scripting language. If you are completely new to PHP and want to get some idea of how it works, @@ -154,9 +154,9 @@ -

          +

          So, How Much Does It Cost? -

          +

          This may sound a little foreign to all you folks coming from a non-Unix background, but PHP doesn't cost anything. You can use it for commercial diff --git a/links.php b/links.php index afde45b9ed..2477819caa 100644 --- a/links.php +++ b/links.php @@ -2,14 +2,19 @@ commonHeader("Links"); ?> -

          Sites using PHP

          + +

          Sites using PHP

          Who uses PHP? An ever-increasing number of companies are using PHP to add functionality to their web-sites. You can browse through a list of some companies using PHP here.

          -

          Developers and Job Opportunities

          + + + + +

          Developers and Job Opportunities

          Brian Schaffner has put up a PHP Employment Listing site. PHP developers can post their resumes, and employers can post their job notices. @@ -21,7 +26,11 @@ >Yahoo Careers for PHP-related jobs (US only for now).

          -

          ISPs that support PHP

          + + + + +

          ISPs that support PHP

          Looking for an ISP or hosting service that supports PHP? Try one of the following sites:

          @@ -32,7 +41,11 @@
        • PMCW webservices (http://pmcw.dhs.org/) -

          Getting Started

          + + + + +

          Getting Started

          On these sites you will find tutorials, articles and example scripts

            diff --git a/mirrors.php b/mirrors.php index 41c7af6aee..35995aa199 100644 --- a/mirrors.php +++ b/mirrors.php @@ -1,32 +1,39 @@ +

            +Mirror Sites +

            +

            +Pick a mirror site close to you: +

            + +

            -Pick a mirror site close to you:
            -
            +
            -

            - -If you are interested in hosting a mirror of this site, here's -how. - -

            +

            + +

            +If you are interested in hosting a mirror of this site, +. +

            diff --git a/news.php b/news.php index 0e8db52db9..86873426cf 100644 --- a/news.php +++ b/news.php @@ -48,7 +48,7 @@ function endEntry() { ?> -

            PHP in the News

            +

            PHP in the News

            diff --git a/search.php b/search.php index 80f1c91f6e..74cdda3f1c 100644 --- a/search.php +++ b/search.php @@ -48,33 +48,27 @@ } if (file_exists("configuration.inc")) { - include("configuration.inc"); + include_once 'configuration.inc'; } function makeBar($no,$page,$pages,$baseurl,$firstdisplayed,$lastdisplayed) { - global $FONTFACE; + $last = $next = ' '; if ($page>1) { $i=$page-1; - $last="Previous page"; - } else { - $last=" "; + $last=make_link($baseurl.'&page='.$i, 'prev page'); } if ($page<$pages) { $i=$page+1; - $next="Next page"; - } else { - $next=" "; + $next=make_link($baseurl.'&page='.$i, 'next page'); } $middle="Displaying results $firstdisplayed to $lastdisplayed"; - echo "


        • \n"; + echo "
          \n"; echo "\n"; - echo "\n"; echo "\n"; - echo "\n"; + echo "\n"; echo "\n"; - echo "\n"; echo "

          $last
          $middle
          $middle
          $next


          \n"; } @@ -83,22 +77,23 @@ function makeBar($no,$page,$pages,$baseurl,$firstdisplayed,$lastdisplayed) { commonHeader("Site Search"); $form=$PHP_SELF; ?> +

          Search

          - + - + - + + @@ -268,8 +268,8 @@ function commonFooter() {
          + Search for:
          -
          -
          +
          + Restrict the search to:
          -
          + +

          +

          ' . "\n"; } - else { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '' . "\n"; + + } else { - echo '' . "\n"; - - } - } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '' . "\n"; -?> + } +} +?>
          ' . $listinfo . 'ModeratedArchiveNormalDigest
          ' . $listinfo . 'ModeratedArchiveNormalDigest
          ' . $listinfo[1] . '
          '. $listinfo[2] . '
          '; - if ($listinfo[3]) { echo 'yes'; } else { echo "no"; } - echo ''; - if ($listinfo[4]) { echo 'available'; } - else { echo 'n/a'; } - echo ''; - if ($listinfo[5]) { echo ''; } - else { echo 'n/a'; } - echo '
          ' . $listinfo[1] . '
          '. $listinfo[2] . '
          ' . ($listinfo[3] ? 'yes' : 'no') . '' . ($listinfo[4] ? make_link("http://marc.theaimsgroup.com/?l=".$listinfo[0], 'yes') : 'n/a') . '' . ($listinfo[5] ? '' : 'n/a' ) . '
          +

          -

          - - - - - - -
          Email:

          +

          +Email: + + + +

          + +

          You will be sent a confirmation mail at the address you wish to @@ -243,7 +269,12 @@ on the top-right of every page.

          -

          Newsgroups

          + + + + + +

          Newsgroups

          The mailing lists hosted at lists.php.net are also gatewayed to newsgroups on the server at news.php.net. @@ -254,7 +285,12 @@ interface.

          -

          Local Mailing Lists

          + + + + + +

          Local Mailing Lists

          There are also some mailing lists that have been set up by others in the community to host local discussions (particularly non-English @@ -274,7 +310,12 @@ interface.

        • Turkish PHP User's Mailing List -

          Sample Code

          + + + + + +

          Sample Code

          Looking for some more sample PHP scripts? Our links page page lists some archives of sample PHP code - @@ -282,8 +323,12 @@ interface. your searching pleasure!

          + + + + -

          Knowledge Base

          +

          Knowledge Base

          The knowledge base is a growing collection of PHP related information in a searchable question and answer format. Anyone can contribute, and @@ -291,14 +336,22 @@ interface. at http://www.faqts.com/.

          -

          Getting the Latest Development Version

          + + + + +

          Getting the Latest Development Version

          PHP is developed using CVS, so it's possible to obtain the latest development release at any time. Further instructions can be found in the web interface of the PHP CVS tree.

          -

          Instant Resource Center

          + + + + +

          Instant Resource Center

          Otherwise known as IRC or Internet Relay Chat. Here you can usually find experienced PHP people sitting around doing nothing on the #php channel From a9af9814107a4d3f1049503052332427ab33ec79 Mon Sep 17 00:00:00 2001 From: Colin Viebrock Date: Tue, 6 Feb 2001 22:19:02 +0000 Subject: [PATCH 13/49] Add require_once 'prepend.inc' back in again. That's more than a dozen files ... :( --- .htaccess | 1 - ChangeLog-4.php | 1 + FAQ.php | 1 + README.mirror | 1 - anoncvs.php | 1 + books.php | 1 + bug-pwd-finder.php | 2 + bugs-dos-and-donts.php | 1 + bugs-generating-backtrace.php | 1 + bugs-php3.php | 1 + bugs.php | 1 + bugstats.php | 2 + cfp.php | 3 +- credits.php | 1 + cvs-php.php | 86 ++++++++++++++++++++--------- cvsup.php | 23 +++++--- docs.php | 1 + download-logos.php | 1 + download-php3.php | 1 + downloads.php | 3 +- get-user-notes.php | 1 + include/{shared.inc => prepend.inc} | 0 index.php | 2 + license.html | 10 +++- links.php | 1 + manual-lookup.php | 1 + manual/about-notes.php | 1 + manual/add-note.php | 1 + manual/html/index.php | 1 + manual/index.php | 1 + manual/phpfi2.php | 1 + manual/set-magic-cookie.php | 2 + mirrors.php | 1 + news.php | 1 + oldnews.php | 1 + projects.php | 1 + quickref.php | 1 + search.php | 2 + sites.php | 3 +- source.php | 1 + support.php | 1 + thanks.php | 1 + tips.php | 1 + tut.php | 2 +- usage.php | 1 + 45 files changed, 130 insertions(+), 42 deletions(-) rename include/{shared.inc => prepend.inc} (100%) diff --git a/.htaccess b/.htaccess index 04d86e0f4c..2ba68d384c 100644 --- a/.htaccess +++ b/.htaccess @@ -1,6 +1,5 @@ php_value include_path .:./include:../include:../../include -php_value auto_prepend_file shared.inc php_flag short_open_tag on DirectoryIndex index.php diff --git a/ChangeLog-4.php b/ChangeLog-4.php index ed7f6f79dc..b0313db055 100644 --- a/ChangeLog-4.php +++ b/ChangeLog-4.php @@ -1,4 +1,5 @@ diff --git a/FAQ.php b/FAQ.php index 1417c14f57..ee14821db3 100644 --- a/FAQ.php +++ b/FAQ.php @@ -1,4 +1,5 @@ diff --git a/README.mirror b/README.mirror index 3973559aab..6a41232b28 100644 --- a/README.mirror +++ b/README.mirror @@ -23,7 +23,6 @@ Once you create a virtualhost which looks something like: ServerAdmin yourname@yourdomain.com DocumentRoot /www/htdocs/phpweb php_value include_path .:/www/htdocs/phpweb/include - php_value auto_prepend_file shared.inc php_flag short_open_tag on ErrorLog logs/error_log TransferLog logs/access_log diff --git a/anoncvs.php b/anoncvs.php index f1fe54ea75..e6acc7645f 100644 --- a/anoncvs.php +++ b/anoncvs.php @@ -1,4 +1,5 @@ diff --git a/books.php b/books.php index 4e5fb9aa0d..d8ca1c35c9 100644 --- a/books.php +++ b/books.php @@ -1,4 +1,5 @@ diff --git a/bug-pwd-finder.php b/bug-pwd-finder.php index f34ebeabc0..466f85ca72 100644 --- a/bug-pwd-finder.php +++ b/bug-pwd-finder.php @@ -1,4 +1,6 @@ diff --git a/bugs-generating-backtrace.php b/bugs-generating-backtrace.php index 505c358fe0..58b23db33a 100644 --- a/bugs-generating-backtrace.php +++ b/bugs-generating-backtrace.php @@ -1,4 +1,5 @@ diff --git a/bugs-php3.php b/bugs-php3.php index b9901cc970..a3c5bb9d1c 100644 --- a/bugs-php3.php +++ b/bugs-php3.php @@ -1,4 +1,5 @@

          Call for Participation

          diff --git a/credits.php b/credits.php index 84a47c2af1..f10472d60b 100644 --- a/credits.php +++ b/credits.php @@ -1,4 +1,5 @@ -

          Using CVS for PHP Development

          + +

          +Using CVS for PHP Development +

          +

          All PHP development is done through a distributed revision control system called CVS. This helps us track changes and it makes it possible for people located in all corners of the world to collaborate on a project without having to worry about stepping on each others' toes. -

          +

          +

          Please note that you do not need a CVS account to access the CVS tree. See cvs.php.net for details. You only need your own CVS account if you will be regularly committing things to the CVS tree. -

          +

          +

          And once again since people just don't seem to understand this point: -

          +

          +

          @@ -26,9 +34,10 @@ -
          Does Not Require CVS Account  Requires CVS Account
          Learning PHP  Coding PHP source in C
          One-time patch contributions   
          Adding notes to documentation  Authoring PHP documentation
          Writing web pages with PHP  Authoring www.php.net web pages
          -

          +

          + +

          If you are contributing a patch, a small fix, or another minor change you are not required to obtain a CVS account before submitting it. If you are subscribed to php-dev@lists.php.net, @@ -37,20 +46,23 @@ suggested, so the PHP development team can develop a working relationship with you and your code. It is suggested that all PHP developers subscribe to this list. -

          +

          +

          Ok, if you are still reading, I assume you may actually need a CVS account. If you are not previously known to the PHP Development Team, then this is not an automatic process. Your best bet is to send mail to group@php.net and explain what you have in mind and perhaps give a bit of background on yourself. If you were told by a PHP developer to come here and fill out this form, you can skip sending the email to group@php.net. -

          +

          +

          If, you have already established yourself in the above manner you can submit a CVS account request here: (only the encrypted version of the password is sent) In the purpose field, put a couple of words describing what you want to work on. This is mostly to jog our memories and allow us to match the account request with whatever previous correspondence that may taken place. -

          +

          +

          Please note:
          You do NOT need a CVS account to study PHP. You do NOT need @@ -58,7 +70,8 @@ with PHP. If you are sitting there wondering if you need a CVS account, then you don't! -

          +

          +

          @@ -70,18 +83,30 @@
          Full Name:
           
          - + +

          Thank you. Your request has been sent. - +

          + +

          PLEASE, read our comments about applying for CVS accounts.

          - +

          + +

          INCOMPLETE FORM. GO BACK AND RESUBMIT.

          - +

          +

          The CVS account, once granted and activated, gives you access to a number of things. First, and most important it gives you access to modify the PHP CVS tree. It also allows you to comment on and close bugs in the PHP bugs interface @@ -92,18 +117,23 @@

        • PHP Bugs Database
        • Manual Errata Administration - +

          +

          If you are not familiar with CVS, you should have a look at the various documentation resources available at CVShome.org. This is also where to get the most recent version -of the CVS client.

          - +of the CVS client. +

          +

          All CVS commit messages get sent to the php-cvs mailing list. You should subscribe yourself to this mailing list. Instructions for subscribing are on the Support page. -

          +

          +

          CVS itself is quite easy to use. Follow the steps listed on the anonymous CVS page for checking out your tree. Substitute your own user name and password for the cvsread/phpfi combination listed there. You will not be able to do this until you receive confirmation of your account having been created. -

          +

          + +

          Next, once you have your CVS tree you need to know the following commands. They should all be executed from within the checked out tree. eg. cd php4

          @@ -117,11 +147,17 @@ describe the changes you made. Please provide a good description here as it may help people in the future when looking at your code changes.
          -

          +

          + +

          It would probably be a good idea to put the following in your ~/.cvsrc file:

          diff -u
           cvs -z4
           update -d -P
           checkout -P
          -

          Your CVS account also translates into a foo@php.net email address where foo is your CVS user id. +

          +

          +Your CVS account also translates into a foo@php.net email address where foo is your CVS user id. +

          + diff --git a/cvsup.php b/cvsup.php index 2a4a26f440..46dac467c6 100644 --- a/cvsup.php +++ b/cvsup.php @@ -1,19 +1,25 @@ -

          Using CVSup to maintain local CVS repository

          +

          +Using CVSup To Maintain A Local CVS Repository +

          +

          In addition to anonymous CVS, we also provide read-only access to our CVS repository by using CVSup. While CVSup is faster at updating large trees, it is not as widely available as the standard cvs client. -We will describe now how you can use CVSup.

          +We will describe now how you can use CVSup. +

          +

          1. Download the appropiate binary distribution from the CVSup homepage.
          2. Follow the instructions in the Install file of the binary distribution -
          3. Create a php.cvsup file containing the following content:

            +

          4. Create a php.cvsup file containing the following content:
             *default host=CVSup.php.net
             *default base=/usr/src/php
            @@ -23,15 +29,16 @@
             *default delete use-rel-suffix
             php3
             php4
            -

            + This will cause the php3 and php4 trees to be stored in /usr/src/php (you need to create that directory manually). -

          5. At a command prompt, simply type:

            -cvsup php.cvsup -

          6. If you are behind a firewall, you might need to use:

            -cvsup -P - php.cvsup +

          7. At a command prompt, simply type: +
            cvsup php.cvsup
            +
          8. If you are behind a firewall, you might need to use: +
            cvsup -P - php.cvsup
          9. To build PHP, you need to install a few utilities (GNU autoconf, libtool, bison). Cd into php3 or php4 and run ./buildconf.
          +

          diff --git a/docs.php b/docs.php index e4db65490f..15de36b556 100644 --- a/docs.php +++ b/docs.php @@ -1,4 +1,5 @@ diff --git a/download-logos.php b/download-logos.php index e8e996ba8f..931fca53f3 100644 --- a/download-logos.php +++ b/download-logos.php @@ -1,4 +1,5 @@ diff --git a/download-php3.php b/download-php3.php index e5559419b9..a93068a84a 100644 --- a/download-php3.php +++ b/download-php3.php @@ -1,4 +1,5 @@ diff --git a/get-user-notes.php b/get-user-notes.php index a5d6bbdde8..c395463a0b 100644 --- a/get-user-notes.php +++ b/get-user-notes.php @@ -1,4 +1,5 @@ \n"; diff --git a/license.html b/license.html index b9e5b02b87..067949e572 100644 --- a/license.html +++ b/license.html @@ -1,5 +1,7 @@ -PHP 3 License - +
             -------------------------------------------------------------------- 
              Copyright (c) 2000 The PHP Development Team.  All rights reserved.
          @@ -57,4 +59,6 @@
             For more information on the PHP Development Team and the PHP 
             project, please see www.php.net.
           
          - + diff --git a/links.php b/links.php index 2477819caa..91eacbf151 100644 --- a/links.php +++ b/links.php @@ -1,4 +1,5 @@ diff --git a/manual-lookup.php b/manual-lookup.php index 7bb796421d..f2299d1da8 100644 --- a/manual-lookup.php +++ b/manual-lookup.php @@ -1,5 +1,6 @@ diff --git a/manual/add-note.php b/manual/add-note.php index b75975bfd9..e6c7ad78a1 100644 --- a/manual/add-note.php +++ b/manual/add-note.php @@ -1,4 +1,5 @@ diff --git a/manual/set-magic-cookie.php b/manual/set-magic-cookie.php index db5cde7466..b225ddbbf2 100644 --- a/manual/set-magic-cookie.php +++ b/manual/set-magic-cookie.php @@ -1,4 +1,6 @@ diff --git a/thanks.php b/thanks.php index 074dfadb86..b245a44162 100644 --- a/thanks.php +++ b/thanks.php @@ -1,4 +1,5 @@ Jan 2001: PHP: 5104536 Domains, 832457 IP Addresses
          From 788be6dfdce58bccba24ac0d70d04afd5ca93a6a Mon Sep 17 00:00:00 2001 From: jim winstead Date: Tue, 6 Feb 2001 22:35:42 +0000 Subject: [PATCH 14/49] having manual.* in the directoryindex list isn't necessary --- README.mirror | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.mirror b/README.mirror index 6a41232b28..f16ddedb74 100644 --- a/README.mirror +++ b/README.mirror @@ -26,7 +26,7 @@ Once you create a virtualhost which looks something like: php_flag short_open_tag on ErrorLog logs/error_log TransferLog logs/access_log - DirectoryIndex index.php index.php3 index.html index.htm manual.php manual.php3 manual.html + DirectoryIndex index.php index.php3 index.html index.htm ErrorDocument 404 /error/ ErrorDocument 401 /error/ ErrorDocument 403 /error/ From c85519a4375c68c9b63e9b72578bff7445ee658c Mon Sep 17 00:00:00 2001 From: jim winstead Date: Tue, 6 Feb 2001 22:41:33 +0000 Subject: [PATCH 15/49] yes, this isn't strictly valid. but it avoids the extra whitespace netscape inserts after a and doesn't hurt any other browser i've ever seen. --- include/layout.inc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/include/layout.inc b/include/layout.inc index f8264260d6..75e8f45382 100644 --- a/include/layout.inc +++ b/include/layout.inc @@ -204,8 +204,8 @@ function commonHeader($title="",$dont_enclose=0) {
        • -
          + +
          '; echo make_submit('small_submit.gif', 'search', 'bottom'); ?> 
          - -

          -

          -
          + +