[ Index ] |
|
Code source de DokuWiki 2006-11-06 |
1 #!/usr/bin/php 2 <?php 3 if ('cli' != php_sapi_name()) die(); 4 5 if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/'); 6 require_once (DOKU_INC.'inc/init.php'); 7 require_once (DOKU_INC.'inc/common.php'); 8 require_once (DOKU_INC.'inc/pageutils.php'); 9 require_once (DOKU_INC.'inc/search.php'); 10 require_once (DOKU_INC.'inc/indexer.php'); 11 require_once (DOKU_INC.'inc/cliopts.php'); 12 session_write_close(); 13 14 // handle options 15 $short_opts = 'hcu'; 16 $long_opts = array('help', 'clean', 'update'); 17 $OPTS = Doku_Cli_Opts::getOptions(__FILE__,$short_opts,$long_opts); 18 if ( $OPTS->isError() ) { 19 fwrite( STDERR, $OPTS->getMessage() . "\n"); 20 _usage(); 21 exit(1); 22 } 23 $CLEAR = false; 24 foreach ($OPTS->options as $key => $val) { 25 switch ($key) { 26 case 'h': 27 case 'help': 28 _usage(); 29 exit; 30 case 'c': 31 case 'clear': 32 $CLEAR = true; 33 break; 34 } 35 } 36 37 #------------------------------------------------------------------------------ 38 # Action 39 40 if($CLEAR) _clearindex(); 41 _update(); 42 43 44 45 #------------------------------------------------------------------------------ 46 47 function _usage() { 48 print "Usage: indexer.php <options> 49 50 Updates the searchindex by indexing all new or changed pages 51 when the -c option is given the index is cleared first. 52 53 OPTIONS 54 -h, --help show this help and exit 55 -c, --clear clear the index before updating 56 "; 57 } 58 59 function _update(){ 60 global $conf; 61 $data = array(); 62 echo "Searching pages... "; 63 search($data,$conf['datadir'],'search_allpages',array()); 64 echo count($data)." pages found.\n"; 65 66 foreach($data as $val){ 67 _index($val['id']); 68 } 69 } 70 71 function _index($id){ 72 global $CLEAR; 73 74 // if not cleared only update changed and new files 75 if(!$CLEAR){ 76 $last = @filemtime(metaFN($id,'.indexed')); 77 if($last > @filemtime(wikiFN($id))) return; 78 } 79 80 _lock(); 81 echo "$id... "; 82 idx_addPage($id); 83 io_saveFile(metaFN($id,'.indexed'),' '); 84 echo "done.\n"; 85 _unlock(); 86 } 87 88 /** 89 * lock the indexer system 90 */ 91 function _lock(){ 92 global $conf; 93 $lock = $conf['lockdir'].'/_indexer.lock'; 94 $said = false; 95 while(!@mkdir($lock, $conf['dmode'])){ 96 if(time()-@filemtime($lock) > 60*5){ 97 // looks like a stale lock - remove it 98 @rmdir($lock); 99 }else{ 100 if($said){ 101 echo "."; 102 }else{ 103 echo "Waiting for lockfile (max. 5 min)"; 104 $said = true; 105 } 106 sleep(15); 107 } 108 } 109 if($conf['dperm']) chmod($lock, $conf['dperm']); 110 if($said) print "\n"; 111 } 112 113 /** 114 * unlock the indexer sytem 115 */ 116 function _unlock(){ 117 global $conf; 118 $lock = $conf['lockdir'].'/_indexer.lock'; 119 @rmdir($lock); 120 } 121 122 /** 123 * Clear all index files 124 */ 125 function _clearindex(){ 126 global $conf; 127 _lock(); 128 echo "Clearing index... "; 129 io_saveFile($conf['cachedir'].'/word.idx',''); 130 io_saveFile($conf['cachedir'].'/page.idx',''); 131 io_saveFile($conf['cachedir'].'/index.idx',''); 132 echo "done.\n"; 133 _unlock(); 134 } 135 136 //Setup VIM: ex: et ts=2 enc=utf-8 :
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Tue Apr 3 20:47:31 2007 | par Balluche grâce à PHPXref 0.7 |