uawdijnntqw1x1x1
IP : 216.73.216.155
Hostname : vm5018.vps.agava.net
Kernel : Linux vm5018.vps.agava.net 3.10.0-1127.8.2.vz7.151.14 #1 SMP Tue Jun 9 12:58:54 MSK 2020 x86_64
Disable Function : None :)
OS : Linux
PATH:
/
var
/
www
/
iplanru
/
data
/
www
/
www.i-plan.ru
/
libraries
/
phpmorphy
/
bin
/
build_dict.php
/
/
#!/usr/bin/php <?php if(2 == (ini_get('mbstring.func_overload') & 2)) { die("don`t overload string functions in mbstring extension, see mbstring.func_overload option"); } if($argc < 4) { echo "Usage " . $argv[0] . " XML_FILE OUT_DIR ENCODING [WITH_FORM_NO - 1/0] [BUILD_DIALING_ANCODES_MAP - 1/0]"; exit; } define('BIN_DIR', dirname(__FILE__)); define('MORPHY_DIR', getenv('MORPHY_DIR')); define('MORPHY_BUILDER', MORPHY_DIR . '/bin/morphy_builder'); define('PHP_BIN', getenv('PHPRC') . '/php'); function doError($msg) { echo $msg; exit(1); } class ShellArgsEscaper { protected static $need_wrap; static function escape($arg) { if(!isset(self::$need_wrap)) { self::$need_wrap = self::needWrap(); } if(self::$need_wrap) { // double slashes at end of argument $orig_len = strlen($arg); $slashes = $orig_len - strlen(rtrim($arg, '\\')); $arg .= str_repeat('\\', $slashes); } return escapeshellarg($arg); } static protected function needWrap() { if(substr(PHP_OS, 0, 3) == 'WIN') { $test = '\a\b\c\\'; $result = escapeshellarg($test); return substr($result, -3, 2) != '\\\\'; } return false; } } function doExec($title, $file, $args) { echo $title . "\n"; $ext = pathinfo($file, PATHINFO_EXTENSION); $cmd = ''; switch(strtolower($ext)) { case 'php': $cmd = PHP_BIN . ' -f ' . ShellArgsEscaper::escape($file) . ' --'; break; default: $cmd = ShellArgsEscaper::escape($file); } foreach($args as $k => $v) { if(is_null($v)) { if(is_string($k)) { $cmd .= ' ' . $k; } } else { if(is_string($k)) { $cmd .= ' ' . $k . '=' . ShellArgsEscaper::escape($v); } else { $cmd .= ' ' . ShellArgsEscaper::escape($v); } } } $desc = array( 1 => array("pipe", "w"), // stdout 2 => array("pipe", "w") // stderr ); $opts = array( 'binary_pipes' => true, 'bypass_shell' => true ); $pipes = array(); if(false === ($handle = proc_open($cmd, $desc, $pipes, null, null, $opts))) { doError('Can`t execute \'' . $cmd . '\' command'); } if(1) { while(!feof($pipes[1])) { fputs(STDOUT, fgets($pipes[1])); } } else { stream_copy_to_stream($pipes[1], STDOUT); } $stderr = trim(stream_get_contents($pipes[2])); fclose($pipes[1]); fclose($pipes[2]); $errorcode = proc_close($handle); if($errorcode) { doError( "\n\nCommand '" . $cmd .'\' exit with code = ' . $errorcode . ', error = \'' . $stderr . '\'' ); } echo "OK.\n"; } function get_locale($xml) { $reader = new XMLReader(); if(false === $reader->open($xml)) { return false; } while($reader->read()) { if($reader->nodeType == XMLReader::ELEMENT) { if($reader->localName === 'locale') { $result = $reader->getAttribute('name'); $result = strlen($result) ? $result : false; break; } } } $reader->close(); return $result; } function locale_to_dialing($locale) { static $map = array( 'ru_RU' => 'Russian', 'en_EN' => 'English', 'de_DE' => 'German', ); if(isset($map[$locale])) { return $map[$locale]; } return false; } if(false === ($locale = get_locale($argv[1]))) { doError("Can`t retrieve locale name from '" . $argv[1] . "' file"); } $out_dir = $argv[2]; $morph_data_file = $out_dir . '/morph_data.' . strtolower($locale) . '.bin'; echo "Found '$locale' locale in $argv[1]\n"; $args = array( '--xml' => $argv[1], '--out-dir' => $argv[2], '--out-encoding' => $argv[3], '--force-encoding-single-byte' => null, '--verbose' => null, '--case' => 'upper', ); if(@$argv[4]) { $args['--with-form-no'] = 'yes'; } doExec('Build dictionary', MORPHY_BUILDER, $args); doExec('Extract gramtab', BIN_DIR . '/extract_gramtab.php', array($morph_data_file, $out_dir)); doExec('Extract graminfo header', BIN_DIR . '/extract_graminfo_header.php', array($morph_data_file, $out_dir)); doExec('Create ancodes cache', BIN_DIR . '/extract_ancodes.php', array($morph_data_file, $out_dir)); if(@$argv[5]) { if(false !== ($language = locale_to_dialing($locale))) { doExec('Create dialing ancodes map', BIN_DIR . '/extract_ancodes_map.php', array($morph_data_file, $language, $out_dir)); } else { echo "Locale '$locale' unsupported for dialing dictionaries. Skip ancodes map." . PHP_EOL; } }
/var/www/iplanru/data/www/www.i-plan.ru/libraries/phpmorphy/bin/build_dict.php