jmcastagnetto Sun Jan 19 21:56:11 2003 EDT
Added files:
/phpdoc/scripts genPHP_INI_ENTRY.php
Log:
Script to replace mk_ini_set_table.sh
Index: phpdoc/scripts/genPHP_INI_ENTRY.php
+++ phpdoc/scripts/genPHP_INI_ENTRY.php
<?php
/*
* Translation to PHP of the old script mk_ini_set.sh to
* generate a list of PHP config options and where they
* can be set.
* Author: Jesus M. Castagnetto
* $Id: genPHP_INI_ENTRY.php,v 1.1 2003/01/20 02:56:11 jmcastagnetto Exp $
*/
// figure out the php4 source dir
$phpsrc_dir = '';
if ($phpsrc_dir == '') {
if (file_exists('../php4')) {
$phpsrc_dir = realpath('../php4');
} else if (file_exists('../../php4')) {
$phpsrc_dir = realpath('../../php4');
} else {
die ("Cannot find PHP4 dir, set phpsrc_dir to the full path\n");
}
}
// figure out the phpdoc dir
$phpdoc_dir = '';
if ($phpdoc_dir == '') {
$current = getcwd();
if (preg_match('/\/phpdoc$/', $current)) {
$phpdoc_dir = $current;
} else {
$tmp = str_replace(strrchr($current,'/'),'',$current);
if (preg_match('/\/phpdoc$/', $tmp)) {
$phpdoc_dir = $tmp;
} else {
die ("Cannot find PHPDOC dir, set phpdoc_dir to the full path\n");
}
}
}
echo "Using:\nPHP4 SRC DIR: $phpsrc_dir\nPHPDOC DIR: $phpdoc_dir\n\n";
$inixml_header = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
<!-- Do not edit. Automatically generated using gen_PHP_INI_ENTRY.php -->
<!-- \$Revision: 1.1 $ -->
<section id=\"##ID##.configuration\">
&reftitle.runtime;
&extension.runtime;\n\n";
$inixml_footer = "</section>\n
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:\"../../../manual.ced\"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
";
$legend = "<note>
<para>
The PHP_INI_* constants usd in the table below are defined as follows:
<table>
<thead>
<row>
<entry>Constant</entry>
<entry>Value</entry>
<entry>Meaning</entry>
</row>
</thead>
<tbody>
<row>
<entry>PHP_INI_USER</entry>
<entry>1</entry>
<entry>Entry can be set in user scripts</entry>
</row>
<row>
<entry>PHP_INI_PERDIR</entry>
<entry>2</entry>
<entry>Entry can be set in <filename>.htaccess</filename></entry>
</row>
<row>
<entry>PHP_INI_SYSTEM</entry>
<entry>4</entry>
<entry>Entry can be set in <filename>php.ini</filename> or
<filename>httpd.conf</filename></entry>
</row>
<row>
<entry>PHP_INI_ALL</entry>
<entry>7</entry>
<entry>Entry can be set anywhere</entry>
</row>
</tbody>
</table>
</para>
</note>\n";
$table_header = "<para>
<table>
<title>Configuration options</title>
<tgroup cols=\"3\">
<thead>
<row>
<entry>Name</entry>
<entry>Default</entry>
<entry>Changeable</entry>
</row>
</thead>
<tbody>\n";
$table_footer = " </tbody>
</tgroup>
</table>
</para>\n";
function gentree($path, $remove_empty = false, $fileproc_cb = null) {/*{{{*/
$excludeitems = array ('CVS', 'tests');
if (!file_exists($path))
die("BAD PATH $path\n");
$tree = array();
chdir($path);
$all = glob('*');
foreach ($all as $item) {
$fullpath = "{$path}/{$item}";
if (in_array($item, $excludeitems)) {
continue;
} else if (is_dir($fullpath)) {
$subtree = gentree($fullpath, $remove_empty, $fileproc_cb);
if ($remove_empty && !empty($subtree)) {
$tree[$fullpath] = $subtree;
} else {
continue;
}
} else if (preg_match('/\.[ch]$/', $item)) {
if (is_null($fileproc_cb)) {
$tree[$item] = $fullpath;
} else {
$res = $fileproc_cb($fullpath);
if (!is_null($res)) {
$tree[$item] = $res;
} else {
continue;
}
}
}
}
return $tree;
}/*}}}*/
function findINI($fname) {/*{{{*/
$found = array();
if (!is_readable($fname)) {
return "CANNOT READ FILE: $fname";
}
$data = file_get_contents($fname);
//$re = '/PHP_INI_ENTRY\("([^"]+)",\s+"([^"]+)",\s+([A-Z_]),/';
$re = '/(PHP_INI_ENTRY|PHP_INI_ENTRY_EX)\(([^)]+)/';
preg_match_all($re, $data, &$matches);
foreach ($matches[2] as $match) {
$match = str_replace('"','',$match);
$entry = preg_split('/,\s*/', $match);
$found['INI'][$entry[0]] = array(
'def' => $entry[1],
'mod' => str_replace("\n",'',$entry[2])
);
}
if (!empty($found)) {
return $found;
} else {
return null;
}
}/*}}}*/
function flatentree($tree, $section) {
static $flat = array();
foreach ($tree as $node=>$val) {
if (array_key_exists($section, $val)) {
$flat[$node] = $val[$section];
} else {
flatentree($val, $section);
}
}
return $flat;
}
$dtree = gentree($phpsrc_dir, true, 'findINI');
/*
$ser = serialize($dtree);
$fp = fopen('/tmp/PHPINIDEFS.ser', 'w');
fwrite($fp, $ser);
fflush($fp);
fclose($fp);
*/
function createINI($dir, $cfgs) {
$rows = '';
foreach ($cfgs as $name=>$vals) {
$rows .= " <row>\n";
$rows .= " <entry>$name</entry>\n";
if ($vals['def'] == 'NULL') {
$default = "''";
} elseif (preg_match('/^[A-Z_]+$/',$vals['def'])) {
if (defined($vals['def'])) {
$default = "'".htmlspecialchars(constant($vals['def']))."'";
} else {
$default = $vals['def'];
}
} else {
$default = "'".htmlspecialchars($vals['def'])."'";
}
$rows .= " <entry>{$default}</entry>\n";
$rows .= " <entry>{$vals['mod']}</entry>\n";
$rows .= " </row>\n";
}
if ($dir == 'en/chapters') {
$id = 'general';
} else {
$id = basename($dir);
}
$out = str_replace('##ID##',$id, $GLOBALS['inixml_header']);
$out .= $GLOBALS['legend'];
$out .= $GLOBALS['table_header'].$rows.$GLOBALS['table_footer'];
$out .= $GLOBALS['inixml_footer'];
$fp = fopen("{$GLOBALS['phpdoc_dir']}/{$dir}/test_ini.xml", 'w');
if (is_resource($fp)) {
fwrite($fp, $out);
fflush($fp);
fclose($fp);
echo "CREATED {$GLOBALS['phpdoc_dir']}/{$dir}/test_ini.xml\n";
} else {
echo "ERROR CREATING {$GLOBALS['phpdoc_dir']}/{$dir}/test_ini.xml\n";
}
}
// flatten tree
$flat = flatentree($dtree, 'INI');
print_r($flat);
// map doc dirs w/ the appropriate set of source files
$map = array (/*{{{*/
'en/chapters' => 'main.c,basic_functions.c',
'en/reference/apache' => 'php_apache.c',
'en/reference/array' => '',
'en/reference/aspell' => '',
'en/reference/bc' => '',
'en/reference/bzip2' => '',
'en/reference/calendar' => '',
'en/reference/ccvs' => '',
'en/reference/classobj' => '',
'en/reference/com' => 'com.c',
'en/reference/cpdf' => '',
'en/reference/crack' => 'crack.c',
'en/reference/ctype' => '',
'en/reference/curl' => '',
'en/reference/cybercash' => '',
'en/reference/cybermut' => '',
'en/reference/cyrus' => '',
'en/reference/datetime' => '',
'en/reference/dba' => 'dba.c',
'en/reference/dbase' => '',
'en/reference/dbm' => '',
'en/reference/dbplus' => '',
'en/reference/dbx' => '',
'en/reference/dio' => '',
'en/reference/dir' => '',
'en/reference/domxml' => '',
'en/reference/dotnet' => '',
'en/reference/errorfunc' => '',
'en/reference/exec' => '',
'en/reference/fbsql' => '',
'en/reference/fdf' => '',
'en/reference/filepro' => '',
'en/reference/filesystem' => 'file.c',
'en/reference/fribidi' => '',
'en/reference/ftp' => '',
'en/reference/funchand' => '',
'en/reference/gettext' => '',
'en/reference/gmp' => '',
'en/reference/http' => '',
'en/reference/hw' => 'hw.c',
'en/reference/hwapi' => '',
'en/reference/ibase' => 'interbase.c',
'en/reference/icap' => '',
'en/reference/iconv' => 'iconv.c',
'en/reference/ifx' => '',
'en/reference/iisfunc' => '',
'en/reference/image' => 'exif.c',
'en/reference/imap' => '',
'en/reference/info' => 'assert.c',
'en/reference/ingres-ii' => 'ii.c',
'en/reference/ircg' => 'ircg.c',
'en/reference/java' => '',
'en/reference/ldap' => 'ldap.c',
'en/reference/mail' => '',
'en/reference/mailparse' => '',
'en/reference/math' => '',
'en/reference/mbstring' => 'mbstring.c',
'en/reference/mcal' => '',
'en/reference/mcrypt' => 'mcrypt.c',
'en/reference/mcve' => '',
'en/reference/mhash' => '',
'en/reference/mime_magic' => 'mime_magic.c',
'en/reference/ming' => '',
'en/reference/misc' => '',
'en/reference/mnogosearch' => '',
'en/reference/msession' => '',
'en/reference/msql' => '',
'en/reference/mssql' => 'php_mssql.c',
'en/reference/muscat' => '',
'en/reference/mysql' => 'php_mysql.c',
'en/reference/ncurses' => 'ncurses.c',
'en/reference/network' => '',
'en/reference/nis' => '',
'en/reference/notes' => '',
'en/reference/objaggregation' => '',
'en/reference/oci8' => '',
'en/reference/openssl' => '',
'en/reference/oracle' => '',
'en/reference/outcontrol' => '',
'en/reference/overload' => '',
'en/reference/ovrimos' => '',
'en/reference/pcntl' => '',
'en/reference/pcre' => '',
'en/reference/pdf' => '',
'en/reference/pfpro' => 'pfpro.c',
'en/reference/pgsql' => 'pgsql.c',
'en/reference/posix' => '',
'en/reference/printer' => '',
'en/reference/pspell' => '',
'en/reference/qtdom' => '',
'en/reference/readline' => '',
'en/reference/recode' => '',
'en/reference/regex' => '',
'en/reference/sem' => '',
'en/reference/sesam' => '',
'en/reference/session' => 'session.c,url_scanner_ex.c',
'en/reference/shmop' => '',
'en/reference/snmp' => '',
'en/reference/sockets' => '',
'en/reference/stream' => '',
'en/reference/strings' => '',
'en/reference/swf' => '',
'en/reference/sybase' => 'php_sybase_ct.c',
'en/reference/tokenizer' => 'tokenizer.c',
'en/reference/uodbc' => 'php_odbc.c',
'en/reference/url' => '',
'en/reference/var' => '',
'en/reference/vpopmail' => '',
'en/reference/w32api' => '',
'en/reference/wddx' => '',
'en/reference/xml' => '',
'en/reference/xmlrpc' => '',
'en/reference/xslt' => '',
'en/reference/yaz' => 'php_yaz.c',
'en/reference/zip' => '',
'en/reference/zlib' => 'zlib.c',
);/*}}}*/
// now walk through the map and generate the appropriate ini.xml files
foreach ($map as $dir=>$srcfiles) {
if ($srcfiles == '') {
continue;
} else {
$files = explode(',', $srcfiles);
$cfgs = array();
foreach ($files as $fname) {
$cfgs = array_merge($cfgs, $flat[$fname]);
}
ksort($cfgs);
createINI($dir, $cfgs);
}
}
?>
--
PHP Documentation Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php