Show
Ignore:
Timestamp:
04/25/08 23:37:25 (7 months ago)
Author:
gleu
Message:

Nettoyage, ajout d'un usage, amélioration de la connexion, etc.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • traduc/trunk/www/tools/addrelease.php

    r994 r1009  
    11#! /usr/bin/php -qC 
    22<? 
    3 $version_int['8.1.11'] = 801; 
    4 $version_int['8.2.7'] = 802; 
    5 $version_int['8.3.1'] = 803; 
    6  
    7 $pgconn = pg_connect("host=localhost dbname=docspgfr user=docspgfr") 
     3 
     4function usage() { 
     5  echo ' 
     6Ceci est is '.$_SERVER["argv"][0].'. 
     7 
     8Usage: 
     9  '.$_SERVER["argv"][0].' [OPTIONS]... REPERTOIRE_HTML VERSION_MAJEURE 
     10 
     11Options générales : 
     12  -d BASE         nom de la base de données de connexion 
     13                  (par défaut : "'.$PGDATABASE.'") 
     14  --help          affiche cette aide, puis quitte 
     15 
     16Options de connexion : 
     17  -h HOTE         hÃŽte du serveur de base de données ou répertoire de la 
     18                  socket (par défaut : "'.$PGHOST.'") 
     19  -p PORT         port TCP du serveur (par défaut : "'.$PGPORT.'") 
     20  -U UTILISATEUR  utilisateur PostgreSQL (par défaut : "'.$PGUSER.'") 
     21  -W              force la demande du mot de passe 
     22'; 
     23
     24 
     25// Récupération des variables d'environnement 
     26$PGHOST = getenv('PGHOST'); 
     27$PGPORT = getenv('PGPORT'); 
     28 
     29$PGUSER = getenv('PGUSER'); 
     30if (strlen("$PGUSER") == 0) { 
     31  $PGUSER = getenv('USER'); 
     32
     33 
     34$PGDATABASE = getenv('PGDATABASE'); 
     35if (strlen("$PGDATABASE") == 0) { 
     36  $PGDATABASE = $PGUSER; 
     37
     38 
     39$PGPASSWORD = getenv('PGPASSWORD'); 
     40 
     41// Déchiffrage des options en ligne de commande 
     42for ($i = 1; $i < $_SERVER["argc"]; $i++) { 
     43  switch($_SERVER["argv"][$i]) { 
     44    case "-h": 
     45    case "--host": 
     46      $PGHOST = $_SERVER['argv'][++$i]; 
     47      break; 
     48    case "-p": 
     49    case "--port": 
     50      $PGPORT = $_SERVER['argv'][++$i]; 
     51      break; 
     52    case "-U": 
     53    case "--user": 
     54      $PGUSER = $_SERVER['argv'][++$i]; 
     55      break; 
     56    case "-d": 
     57    case "--database": 
     58      $PGDATABASE = $_SERVER['argv'][++$i]; 
     59      break; 
     60    case "-W": 
     61      $g_passwordrequired = true; 
     62      break; 
     63    case "-?": 
     64    case "-h": 
     65    case "--help": 
     66      usage(); 
     67      exit; 
     68      break; 
     69    default: 
     70      if ($i == count($_SERVER['argv']) - 2) { 
     71        $dir = $_SERVER['argv'][$i]; 
     72      } else if ($i == count($_SERVER['argv']) - 1) { 
     73        $version = $_SERVER['argv'][$i]; 
     74        switch ($version) { 
     75          case '8.1': 
     76            $version_int = 801; 
     77            break; 
     78          case '8.2': 
     79            $version_int = 802; 
     80            break; 
     81          case '8.3': 
     82            $version_int = 803; 
     83            break; 
     84          default: 
     85            echo "Il s'agit d'une version majeure : 8.1, 8.2 ou 8.3\n"; 
     86            exit; 
     87            break; 
     88        } 
     89      } 
     90      break; 
     91  } 
     92
     93 
     94if (strlen($dir) == 0 or strlen($version) == 0) { 
     95  usage(); 
     96  exit; 
     97
     98 
     99// Vérification du mot de passe 
     100if ($g_passwordrequired and strlen($PGPASSWORD) == 0) { 
     101  // On commence par la vérification de .pgpass 
     102  $pgpassfilename = getenv('HOME').'/.pgpass'; 
     103  if (file_exists($pgpassfilename)) { 
     104    $permissions = substr(decoct(fileperms($pgpassfilename)), 3); 
     105    if (!strcmp($permissions, '600')) { 
     106      $pgpassfile = fopen($pgpassfilename, 'r'); 
     107      $found = false; 
     108      while (!$found and $line = fgets($pgpassfile)) { 
     109        list($host, $port, $database, $user, $password) = split (":", trim($line), 5); 
     110        if ((!strcmp($PGHOST, $host) or !strcmp('*', $host)) and 
     111            (!strcmp($PGPORT, $port) or !strcmp('*', $port)) and 
     112            (!strcmp($PGDATABASE, $database) or !strcmp('*', $database)) and 
     113            (!strcmp($PGUSER, $user) or !strcmp('*', $user))) { 
     114          $found = true; 
     115          $PGPASSWORD = $password; 
     116        } 
     117      } 
     118    } 
     119  } 
     120  // s'il n'y a toujours pas de mot de passe 
     121  if (strlen($PGPASSWORD) == 0) { 
     122    // Attention, le mot de passe apparaîtra en clair sur le terminal... 
     123    // Au moins, il ne sera pas affiché avec la commande ps :-/ 
     124    echo "Mot de passe : "; 
     125    $stdin = fopen('php://stdin', 'r'); 
     126    $PGPASSWORD = fgets(STDIN); 
     127  } 
     128
     129 
     130// Connexion à la base de données suivant les variables d'environnement 
     131 
     132$DSN = ''; 
     133 
     134if (strlen("$PGHOST") > 0) { 
     135  $DSN .= 'host='.$PGHOST.' ';        
     136
     137if (strlen("$PGPORT") > 0) { 
     138  $DSN .= 'port='.$PGPORT.' ';        
     139
     140 
     141$DSN .= 'dbname='.$PGDATABASE.' '. 
     142       'user='.$PGUSER; 
     143 
     144if (strlen("$PGPASSWORD") > 0) { 
     145  $DSN .= ' password='.$PGPASSWORD; 
     146
     147 
     148$pgconn = pg_connect($DSN) 
    8149  or die('Connexion impossible'); 
    9150 
     151// l'encodage est l'UTF-8 
    10152$query = "SET client_encoding TO utf8;"; 
    11 $result = pg_query($pgconn, $query); 
    12  
    13 if (strlen($argv[1]) > 0) 
    14   $version = $argv[1]; 
    15 else 
    16   $version = '8.3'; 
    17  
    18 //$version_int = ereg_replace('\.', '', $version); 
    19  
    20 $dir = './pgsql-'.$version.'-fr'; 
    21  
     153pg_query($pgconn, $query); 
     154 
     155// lecture du répertoire 
    22156if ($handle = opendir($dir)) { 
    23157  echo "Traitement du répertoire : "; 
     
    25159  $result = pg_query($pgconn, 'BEGIN'); 
    26160 
    27   $query = 'DELETE FROM pages WHERE version='.$version_int[$version]
     161  $query = 'DELETE FROM pages WHERE version='.$version_int
    28162  $result = pg_query($pgconn, $query); 
    29163 
    30   while (false !== ($file = readdir($handle)) and pg_result_status($result) == PGSQL_COMMAND_OK) { 
     164  while (false !== ($file = readdir($handle)) 
     165         and pg_result_status($result) == PGSQL_COMMAND_OK) { 
    31166    if (strcmp($file, '.') and strcmp($file, '..')) { 
    32167      echo "."; 
    33168      // lecture du contenu en un coup 
    34169      $contenu = file_get_contents($dir.'/'.$file); 
    35       //$contenu = iconv('ISO-8859-1', 'UTF-8', $contenu); 
    36170      // récup du titre 
    37171      if (preg_match('#<title[^>]*>([^<]+)</title[^>]*>#si', $contenu, $matches)) { 
     
    46180      // récup des mots clés d'index 
    47181      if (preg_match('#<em class="firstterm"[^>]*>([^<]+)</em[^>]*>#si', $contenu, $matches)) { 
    48 //print_r($matches); 
    49 //echo $file.' : '.count($matches)."\n"; 
    50182        $tags1 = ''; 
    51183        for ($index = 1; $index < count($matches); $index=$index+2) { 
    52 //echo "  ".$index.' : '.$tags1."\n"; 
    53184          if (strlen($tags1) > 0) { 
    54185            $tags1 .= ','; 
     
    60191      // récup des mots clés d'index 
    61192      if (preg_match('#<em class="secondterm"[^>]*>([^<]+)</em[^>]*>#si', $contenu, $matches)) { 
    62 //echo $file.' : '.count($matches)."\n"; 
    63193        $tags2 = ''; 
    64194        for ($index = 1; $index < count($matches); $index=$index+2) { 
     
    98228      $query = "INSERT INTO pages (url, version, titre, tags1, tags2, contenu) VALUES ( 
    99229               '".pg_escape_string($file)."', 
    100                ".$version_int[$version].", 
     230               ".$version_int.", 
    101231               '".pg_escape_string($titre)."', 
    102232               '".pg_escape_string($tags1)."', 
     
    114244    echo " ERREUR !\n".pg_last_error($pgconn); 
    115245 
    116   //$query = "SELECT set_curcfg('utf8_french')"; 
    117   //$result = pg_query($pgconn, $query); 
    118  
    119246  $query = "UPDATE pages SET " 
    120247          ."fti = setweight( to_tsvector('french', titre), 'A' ) || setweight( to_tsvector('french', tags1), 'B' ) || setweight( to_tsvector('french', tags2), 'C' ) || setweight( to_tsvector('french', contenu), 'D' )"; 
     
    128255  $result = pg_query($pgconn, $query); 
    129256  if (pg_result_status($result) == PGSQL_COMMAND_OK) 
    130     echo "VacAna OK\n"; 
     257    echo "Vacuum OK\n"; 
    131258  else 
    132     echo "ERREUR lors du VacAna !\n".pg_last_error($pgconn); 
     259    echo "ERREUR lors du Vacuum !\n".pg_last_error($pgconn); 
    133260 
    134261  closedir($handle);