cvs: php-testfest-web /scripts/testfestsource README /scripts/testfestsource/src buildclassmap.php displayresults.php failedfilelist.php
publishresults.sh test.php testfestdailybuild.php testfesthourlytest.php testmanager.css tmAutoload.php tmClassMap.php viewfilecontents.php
/scripts/testfestsource/src/testsetup tmExtractTests.php tmGetPhp.php /scripts/testfestsource/src/testsetup/unix tmUnixGetPhp.php
/scripts/testfestsource/src/testsetup/windows tmWinGetPhp.php

From: Date: Wed, 06 May 2009 18:29:07 +0000
Subject: cvs: php-testfest-web /scripts/testfestsource README /scripts/testfestsource/src buildclassmap.php displayresults.php failedfilelist.php
publishresults.sh test.php testfestdailybuild.php testfesthourlytest.php testmanager.css tmAutoload.php tmClassMap.php viewfilecontents.php
/scripts/testfestsource/src/testsetup tmExtractTests.php tmGetPhp.php /scripts/testfestsource/src/testsetup/unix tmUnixGetPhp.php
/scripts/testfestsource/src/testsetup/windows tmWinGetPhp.php
Groups: php.webmaster 
Request: Send a blank email to php-webmaster+get-4659@lists.php.net to get a copy of this message
zoe Wed May 6 18:29:07 2009 UTC Added files: /php-testfest-web/scripts/testfestsource/src testfestdailybuild.php buildclassmap.php publishresults.sh tmAutoload.php test.php displayresults.php testfesthourlytest.php failedfilelist.php viewfilecontents.php tmClassMap.php testmanager.css /php-testfest-web/scripts/testfestsource/src/testsetup/windows tmWinGetPhp.php /php-testfest-web/scripts/testfestsource README /php-testfest-web/scripts/testfestsource/src/testsetup tmExtractTests.php tmGetPhp.php /php-testfest-web/scripts/testfestsource/src/testsetup/unix tmUnixGetPhp.php Log: Scripts for the 2009 testfest

http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/testfestdailybuild.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/testfestdailybuild.php +++ php-testfest-web/scripts/testfestsource/src/testfestdailybuild.php <?php require_once dirname(__FILE__) . '/tmAutoload.php'; $repositoryPath = "http://89.151.87.83/repos/testfest"; //Setup $rootDir = "/home/testfestreports"; $svnCheckOutDir = $rootDir."/svnCheckOutDir"; $phpBuildDir = $rootDir."/phpBuildDir"; $testRunDir = $rootDir."/testRunDir"; $phpVersion = array( 'php6.0', 'php5.3', 'php5.2', ); foreach($phpVersion as $version) { //remove old tar files shell_exec("rm $phpBuildDir/*.tar.gz"); $builder = tmGetPhp::getInstance($version); $builder->getLatestBuildFile($phpBuildDir); $builder->extractSource($phpBuildDir); $builder->buildPHP($phpBuildDir); } ?> http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/buildclassmap.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/buildclassmap.php +++ php-testfest-web/scripts/testfestsource/src/buildclassmap.php <?php /* * This is stand alone code to build the file tmClassMap used by tmAutoload to find classes. * It assumes that all classes have the same name at the file name (less .php) and all are prefixed by 'tm' * */ $map = new BuildClassMap(); $map->buildMap(); class BuildClassMap { public function buildMap() { $thisDir = getcwd(); $sourceFiles = $this->getSourceList($thisDir); $mapString = '<?php'."\n"; $mapString .= ' $tmClassMap = array('."\n"; sort($sourceFiles); foreach ($sourceFiles as $class) { $relativeLocation = substr($class, strlen($thisDir.'/')); $className = basename($class, '.php'); $spaces = $this->getSpaces(strlen($className)); $mapString .= " ".'\''.$className.'\''. $spaces. " => ".'\''.$relativeLocation.'\','."\n"; } $mapString .= ' );'."\n"; $mapString .= '?>'."\n"; file_put_contents($thisDir.'/tmClassMap.php', $mapString); } public function getSpaces($length) { $spaces = ""; $nspaces = 40 - $length; for ($i=0; $i < $nspaces; $i++) { $spaces .=" "; } return $spaces; } public function getSourceList($aDirectory) { $files = array(); foreach (new PhpFilterIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($aDirectory))) as $item) { $files[] = $item->getPathname(); } return $files; } } class PhpFilterIterator extends FilterIterator { public function accept() { if (substr($this->current(), -strlen('.php')) == '.php') { if (substr(basename($this->current()), 0, strlen('tm')) == 'tm') { return true; } } return false; } } ?> http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/publishresults.sh?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/publishresults.sh +++ php-testfest-web/scripts/testfestsource/src/publishresults.sh cd /home/testfestreports/testRunDir tar -cvzf tf.tar * cp tf.tar /var/www/html/publishresults/ cd /var/www/html/publishresults/ tar -xvf tf.tar http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/tmAutoload.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/tmAutoload.php +++ php-testfest-web/scripts/testfestsource/src/tmAutoload.php <?php tmAutoload::init(); /** * Autoloader using a map file (tmClassMap.php) * defining the file to load each class from. */ class tmAutoload { /** * @var array */ protected static $classMap; /** * @var string */ protected static $classPath; /** * Initialize the autoloader * * @return null */ public static function init() { self::$classPath = dirname(__FILE__); if (substr(self::$classPath, -1) != '/') { self::$classPath .= '/'; } if (file_exists(self::$classPath . 'tmClassMap.php')) { include self::$classPath . 'tmClassMap.php'; self::$classMap = $tmClassMap; } if (function_exists('__autoload')) { spl_autoload_register('__autoload'); } spl_autoload_register(array('tmAutoload', 'autoload')); } /** * Autoload method * * @param string $class Class name to autoload * @return null */ public static function autoload($class) { if (isset(self::$classMap[$class])) { include self::$classPath . self::$classMap[$class]; } } } ?> http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/test.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/test.php +++ php-testfest-web/scripts/testfestsource/src/test.php <?php phpinfo() ?> http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/displayresults.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/displayresults.php +++ php-testfest-web/scripts/testfestsource/src/displayresults.php <?php session_start()?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <link rel="stylesheet" href="PhpTestFestRegistration.css"> <head> <title>PHPT results</title> </head> <h1> PHP TestFest 2009 run results</h1> <body> <p>This site is for checking tests that are contributed as part of PHP TestFest 2009. The tests are committed in a subversion repository, then extracted and run usung PHP5.2, PHP5.3 and PHP6.0. TestFest is focussed on PHP5.3, so the test should really work with PHP5.3. The PHP5.2 and PHP6.0 results are there to help people who will commit the tests in PHP's CVS to know how much work they have to do. <p>The tests are being run on a 64bit Linux machine (which is currently having problems building PHP6), the results table should be updated hourly, at 20 minutes past the hour. <p>The name of the user group responsible for writing the test is appended at that end of the test name. Thanks! <?php $phpVersion = array( 'php6.0', 'php5.3', 'php5.2', ); $publishDir = 'publishresults'; $testRunDir = '/home/testfestreports/testRunDir'; foreach($phpVersion as $version) { $testfile=$publishDir."/".$version."/results"; // echo "<br>$testfile<br>"; $results = file($testfile); foreach($results as $line) { if(preg_match('/^TEST.*([A-Z]{4}).*\[(.*)\]/', $line, $matches)) { $base = substr($matches[2], 0, -5); $relativename = substr($base, strlen($testRunDir."/".$version."/")); $publishname = $publishDir."/".$version."/".$relativename; $tests[] = $publishname; $relat[] = $relativename; $states[$relativename][$version] = $matches[1]; $filebase[$relativename][$version] = $publishname; } } $relat = array_unique($relat); } $_SESSION['states'] = $states; $_SESSION['filebase'] = $filebase; $_SESSION['relat'] = $relat; $out = buildSummaryTable($states, $relat, $filebase); echo $out; function buildSummaryTable($states, $relat, $filebase) { $htmlString = "<table class=\"resultTable\">"; $htmlString .= "<th>TestName</th><th>PHP52</th><th>PHP53</th><th>PHP6</th>"; foreach($relat as $testname) { $s52 = $states[$testname]['php5.2']; if($s52 == 'FAIL') { $basename = $filebase[$testname]['php5.2']; $ref = 'failedfilelist.php?basename='.$basename; $s52 = "<a href=$ref>X</a><br>"; } $s53 = $states[$testname]['php5.3']; if($s53 == 'FAIL') { $basename = $filebase[$testname]['php5.3']; $ref = 'failedfilelist.php?basename='.$basename; $s53 = "<a href=$ref>X</a><br>"; } $s60 = $states[$testname]['php6.0']; if($s60 == 'FAIL') { $basename = $filebase[$testname]['php6.0']; $ref = 'failedfilelist.php?basename='.$basename; $s60 = "<a href=$ref>X</a><br>"; } $htmlString .= "<tr><td>$testname</td><td>$s52</td><td>$s53</td><td>$s60</td></tr>"; } $htmlString .= "</table>"; return $htmlString; } ?> </body> </html> http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/testfesthourlytest.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/testfesthourlytest.php +++ php-testfest-web/scripts/testfestsource/src/testfesthourlytest.php <?php /* * Main php file for testManager * */ require_once dirname(__FILE__) . '/tmAutoload.php'; $repositoryPath = "http://89.151.87.83/repos/testfest"; //Setup $rootDir = "/home/testfestreports"; $svnCheckOutDir = $rootDir."/svnCheckOutDir"; $phpBuildDir = $rootDir."/phpBuildDir"; $testRunDir = $rootDir."/testRunDir"; $phpVersion = array( 'php6.0', 'php5.3', 'php5.2', ); //Script sould run once an hour. Relies on having PHP builds in the right place $testSetup = new tmExtractTests($repositoryPath, $svnCheckOutDir); if(!is_dir($svnCheckOutDir)) { $testSetup->checkOut(); } else { echo "updating\n"; $testSetup->update(); } $testSetup->setFilesToCopy(); $filesToCopy = $testSetup->getFilesToCopy(); //copy all the files into a directory thay can be run from foreach($phpVersion as $dir) { foreach ($filesToCopy as $file) { $from = trim($svnCheckOutDir."/testfest/".$file); $destFile = $testSetup->targetFileName($file); $to = $testRunDir."/".$dir."/".$destFile; echo "Copy $from to $to\n"; shell_exec("cp $from $to"); } } foreach ($phpVersion as $dir) { $run_tests = $phpBuildDir."/".$dir."/run-tests.php"; $phpExecutable = $phpBuildDir."/".$dir."/sapi/cli/php"; $testDir = $testRunDir."/".$dir; echo "$phpExecutable -n $run_tests -n -p $phpExecutable $testDir\n"; $results = shell_exec("$phpExecutable -n $run_tests -n -p $phpExecutable $testDir"); var_dump ($results); file_put_contents($testDir."/results", $results); } ?> http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/failedfilelist.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/failedfilelist.php +++ php-testfest-web/scripts/testfestsource/src/failedfilelist.php <?php session_start()?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <link rel="stylesheet" href="PhpTestFestRegistration.css"> <head> <title>Output files</title> </head> <body> <?php $rootDir = "/home/testfestreports"; $svnCheckOutDir = $rootDir."/svnCheckOutDir"; $phpBuildDir = $rootDir."/phpBuildDir"; $testRunDir = $rootDir."/testRunDir"; $phpVersion = array( 'php6.0', 'php5.3', //'php5.2', ); $base = $_GET['basename']; $_SESSION['basename'] = $base; $expFile = $base.".exp"; $outFile = $base.".out"; $difFile = $base.".diff"; $phptFile = $base.".phpt"; $phpFile = $base.".php"; echo "<br><br><b>Output files for test: $base.phpt</b><br><br>"; echo "<a href=viewfilecontents.php?file=".$outFile.">Actual output</a><br>"; echo "<a href=viewfilecontents.php?file=".$expFile.">Expected output</a><br>"; echo "<a href=viewfilecontents.php?file=".$difFile.">Difference</a><br>"; echo "<a href=viewfilecontents.php?file=".$phpFile.">PHP</a><br>"; echo "<a href=viewfilecontents.php?file=".$phptFile.">Test file</a><br>"; echo "<br><br><a href=displayresults.php>Back to results table</a><br>"; ?> </body> </html> http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/viewfilecontents.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/viewfilecontents.php +++ php-testfest-web/scripts/testfestsource/src/viewfilecontents.php <?php session_start()?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Test Output Files</title> </head> <body> <?php $rootDir = "/home/testfestreports"; $testRunDir = $rootDir."/testRunDir"; $phpVersion = array( 'php6.0', 'php5.3', 'php5.2', ); $file = $_GET['file']; $basename = $_SESSION['basename']; echo "<br><b>File:".$file."</b><br><br>"; $contents = file($file); foreach($contents as $line) { echo "$line<br>"; } echo "<br><br><a href=failedfilelist.php?basename=$basename>Back to file list</a><br>"; ?> </body> </html> http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/tmClassMap.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/tmClassMap.php +++ php-testfest-web/scripts/testfestsource/src/tmClassMap.php <?php $tmClassMap = array( 'tmExtractTests' => 'testsetup/tmExtractTests.php', 'tmGetPhp' => 'testsetup/tmGetPhp.php', 'tmUnixGetPhp' => 'testsetup/unix/tmUnixGetPhp.php', 'tmWinGetPhp' => 'testsetup/windows/tmWinGetPhp.php', 'tmAutoload' => 'tmAutoload.php', 'tmClassMap' => 'tmClassMap.php', ); ?> http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/testmanager.css?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/testmanager.css +++ php-testfest-web/scripts/testfestsource/src/testmanager.css @CHARSET "UTF-8"; body { padding-left: 11em; font-family: Georgia, "Times New Roman", Times, serif; color: #0b0794; background-color: #e6e6fa } ul.navbar { list-style-type: none; padding: 0; margin: 0; position: absolute; top: 2em; left: 1em; width: 9em } h1 { font-family: Helvetica, Geneva, Arial, SunSans-Regular, sans-serif } ul.navbar li { background: white; margin: 0.5em 0; padding: 0.3em; border-right: 1em solid black } ul.navbar a { text-decoration: none } a:link { color: blue } a:visited { color: purple } address { margin-top: 1em; padding-top: 1em; border-top: thin dotted } table.resultTable { width: 70%; padding: 0px; border: none; border: 1px solid #FFC000;} table.resultTable th { font: bold 11px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif; color: #1D1AB2; border-right: 2px solid #FFC000; border-bottom: 2px solid #FFC000; border-top: 2px solid #FFC000; letter-spacing: 2px; text-transform: uppercase; text-align: left; padding: 6px 6px 6px 6px; } table.resultTable td { border-right: 2px solid #FFC000; border-bottom: 2px solid #FFC000; background: #fff; padding: 6px 6px 6px 6px; color: #323086; } table.resultTable tr.special td { background: #FFC000; } http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/testsetup/windows/tmWinGetPhp.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/testsetup/windows/tmWinGetPhp.php +++ php-testfest-web/scripts/testfestsource/src/testsetup/windows/tmWinGetPhp.php <?php class tmGetPhp { private $snapsSite = "http://snaps.php.net"; private $buildType; private $buildName; private $buildDate; private $buildFileName; public function getInstance($buildType, $os='unix') { if ($os == 'Windows') { return new tmWinGetPhp($buildType); } else { return new tmUnixGetPhp($buildType); } } public function __construct($buildType) { $this->buildType = $buildType; $this->buildName = $this->setBuildName(); $this->buildFileName = $this->setBuildFileName(); $this->buildDate = $this->setBuildDate(); } public function setBuildName($buildtype) { $snapsindex=file_get_contents($this->snapsSite); //this windows stuff is just here because I copied it from something else if (preg_match("/wphp5.2/",$buildtype)) { $buildname = "http://windows.php.net/downloads/snaps/php-5.2-nts-win32-VC6-x86-latest.zip"; } else if (preg_match("/wphp5.3/",$buildtype)) { $buildname = "http://windows.php.net/downloads/snaps/php-5.3-nts-win32-VC6-x86-latest.zip"; } else if (preg_match("/wphp6.0/",$buildtype)) { $buildname = "http://windows.php.net/downloads/snaps/php-6.0-win32-VC6-x86-latest.zip"; } else { preg_match("/($buildtype-\d{12}.tar.gz)/", $snapsindex,$matches); $buildname = ($matches[1]); } return(trim($buildname)); } public function getLatestBuildFile($buildName, $srcDir) { $current = realpath(getcwd()); if(is_dir($srcDir)) { shell_exec("rm -r ".$srcDir); mkdir($srcDir); } chdir($srcDir); shell_exec("wget ".$this->snapsSite."/".$buildName); chdir($current); } public function extractSource($buildFile, $buildType, $srcDir) { $current = realpath(getcwd()); chdir($srcDir); shell_exec("tar -xvzf ".$buildFile); //works for linux, well all of this only works for linux :-) if(substr($buildFile, -7) == ".tar.gz") { $buildName = substr($buildFile, 0, -7); shell_exec("mv ".$buildName." ".$buildType); } chdir($current); } public function buildPHP ($buildType, $srcDir) { var_dump($srcDir."/".$buildType."/buildconf"); shell_exec($srcDir."/".$buildType."/buildconf"); shell_exec($srcDir."/".$buildType."/configure"); shell_exec($srcDir."/".$buildType."/make"); } } ?> http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/testsetup/tmExtractTests.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/testsetup/tmExtractTests.php +++ php-testfest-web/scripts/testfestsource/src/testsetup/tmExtractTests.php <?php class tmExtractTests { private $repositoryPath; private $svnTestLocation; private $relNamesToCopy; public function __construct($repositoryPath, $svnTestLocation) { $this->repositoryPath = $repositoryPath; $this->svnTestLocation = $svnTestLocation; } public function checkOut() { $current = realpath(getcwd()); mkdir($this->svnTestLocation); chdir($this->svnTestLocation); shell_exec("svn checkout $this->repositoryPath"); chdir($current); } public function update() { $current = realpath(getcwd()); chdir($this->svnTestLocation."/".testfest); shell_exec("svn update"); chdir($current); } public function setFilesToCopy() { $this->relNamesToCopy = array(); $current = realpath(getcwd()); chdir($this->svnTestLocation."/testfest"); $dirs = scandir($this->svnTestLocation."/testfest"); $fileList = shell_exec("find . -name \"*.phpt\""); $phptFiles = explode('./', $fileList); $fileList = shell_exec("find . -name \"*.inc\""); $incFiles = explode('./', $fileList); $relNamesToCopy = array_merge($phptFiles, $incFiles); //remove any bogus entries foreach ($relNamesToCopy as $filename) { $filename = trim($filename); if (substr($filename, -strlen('.phpt')) == '.phpt') { $this->relNamesToCopy[] = $filename; } if (substr($filename, -strlen('.inc')) == '.inc') { $this->relNamesToCopy[] = $filename; } } } public function targetFileName($name) { if(preg_match('/(\w+)\/(.*).phpt/', $name, $matches)) { $target = $matches[2]."_".$matches[1].".phpt"; } else { $target = $name; } return $target; } public function getFilesToCopy() { return $this->relNamesToCopy; } } ?> http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/testsetup/tmGetPhp.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/testsetup/tmGetPhp.php +++ php-testfest-web/scripts/testfestsource/src/testsetup/tmGetPhp.php <?php class tmGetPhp { protected $snapsSite = "http://snaps.php.net"; protected $buildType; protected $buildName; protected $buildDate; protected $buildFileName; public static function getInstance($buildType, $os='unix') { if ($os == 'Windows') { return new tmWinGetPhp($buildType); } else { return new tmUnixGetPhp($buildType); } } public function __construct($buildType) { $this->buildType = $buildType; $this->setBuildName(); $this->setBuildFileName(); $this->setBuildDate(); } public function getBuildName() { return $this->buildName; } public function getBuildFileName() { return $this->buildFileName; } public function getBuildDate() { return $this->buildDate; } } ?> http://cvs.php.net/viewvc.cgi/php-testfest-web/scripts/testfestsource/src/testsetup/unix/tmUnixGetPhp.php?view=markup&rev=1.1 Index: php-testfest-web/scripts/testfestsource/src/testsetup/unix/tmUnixGetPhp.php +++ php-testfest-web/scripts/testfestsource/src/testsetup/unix/tmUnixGetPhp.php <?php class tmUnixGetPhp extends tmGetPhp { public function setBuildName() { $snapsindex=file_get_contents($this->snapsSite); preg_match("/($this->buildType-\d{12}).tar.gz/", $snapsindex, $matches); $this->buildName = ($matches[1]); } public function setBuildFileName() { $this->buildFileName = $this->buildName.".tar.gz"; } public function setBuildDate() { $this->buildDate = substr($this->buildName, -12); } public function getLatestBuildFile($buildsDir) { $current = realpath(getcwd()); chdir($buildsDir); shell_exec("wget ".$this->snapsSite."/".$this->buildFileName); chdir($current); } public function extractSource($buildsDir) { $current = realpath(getcwd()); chdir($buildsDir); if(is_dir($this->buildType)) { shell_exec("rm -r ".$this->buildType); } shell_exec("tar -xvzf ".$this->buildFileName); shell_exec("mv ".$this->buildName." ".$this->buildType); file_put_contents('buildDates'.$this->buildType, $this->buildDate); chdir($current); } public function buildPHP ($buildsDir) { $configure_flags = ""; if(substr($this->buildType, -strlen('6.0')) == '6.0') { $configure_flags .= "--with-icu-dir=/home/testfestreports/phpBuildDir/ICU-install"; } $current = realpath(getcwd()); chdir($buildsDir."/".$this->buildType); shell_exec("./buildconf"); shell_exec("./configure $configure_flags"); shell_exec("make"); chdir($current); } } ?>
« previous php.webmaster (#4659) next »