From fe9473ac7810d317e001a0fec19cbacaafc0c909 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 1 Sep 2009 20:04:36 -0300 Subject: Check that 'dl' function is available and usable before trying to call it with error suppression; if it's disabled or unavailable we end up with mysterious failures during installation or loading of libraries. Fixed for StatusNet installer as well as some external libraries that should be fixed upstream if they haven't already been: * PEAR * Auth/OpenID * Auth/Yadis --- install.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'install.php') diff --git a/install.php b/install.php index c49043e5c..39984aa08 100644 --- a/install.php +++ b/install.php @@ -267,12 +267,19 @@ function checkPrereqs() function checkExtension($name) { - if (!extension_loaded($name)) { - if (!@dl($name.'.so')) { - return false; - } + if (extension_loaded($name)) { + return true; + } elseif (function_exists('dl') && ini_get('enable_dl') && !ini_get('safe_mode')) { + // dl will throw a fatal error if it's disabled or we're in safe mode. + // More fun, it may not even exist under some SAPIs in 5.3.0 or later... + $soname = $name . '.' . PHP_SHLIB_SUFFIX; + if (PHP_SHLIB_SUFFIX == 'dll') { + $soname = "php_" . $soname; + } + return @dl($soname); + } else { + return false; } - return true; } function showLibs() -- cgit v1.2.3-54-g00ecf From c93072ed8637d3686e071904f3247d2ddfc33ebe Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Sun, 13 Sep 2009 18:15:49 -0700 Subject: Avoid or suppress E_NOTICE and E_WARNING messages related to the checklibs checks. * notice on main installer form checking for $_GET['checklibs'] * notices when seeing which module checks to run * warnings when attempting to load include files --- install.php | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'install.php') diff --git a/install.php b/install.php index 39984aa08..30dd34496 100644 --- a/install.php +++ b/install.php @@ -189,9 +189,9 @@ function main() return; } - if( $_GET['checklibs'] ){ + if (isset($_GET['checklibs'])) { showLibs(); - }else{ + } else { if ($_SERVER['REQUEST_METHOD'] == 'POST') { handlePost(); } else { @@ -202,7 +202,7 @@ function main() function haveExternalLibrary($external_library) { - if(isset($external_library['include']) && ! include_once($external_library['include'])){ + if(isset($external_library['include']) && ! haveIncludeFile($external_library['include'])){ return false; } if(isset($external_library['check_function']) && ! function_exists($external_library['check_function'])){ @@ -214,6 +214,15 @@ function haveExternalLibrary($external_library) return true; } +// Attempt to include a PHP file and report if it worked, while +// suppressing the annoying warning messages on failure. +function haveIncludeFile($filename) { + $old = error_reporting(error_reporting() & ~E_WARNING); + $ok = include_once($filename); + error_reporting($old); + return $ok; +} + function checkPrereqs() { $pass = true; @@ -308,19 +317,19 @@ E_O_T; foreach($absent_libraries as $library) { echo '
  • '; - if($library['url']){ + if(isset($library['url'])){ echo ''.htmlentities($library['name']).''; }else{ echo htmlentities($library['name']); } echo '
      '; - if($library['deb']){ + if(isset($library['deb'])){ echo '
    • deb: ' . htmlentities($library['deb']) . '
    • '; } - if($library['rpm']){ + if(isset($library['rpm'])){ echo '
    • rpm: ' . htmlentities($library['rpm']) . '
    • '; } - if($library['pear']){ + if(isset($library['pear'])){ echo '
    • pear: ' . htmlentities($library['pear']) . '
    • '; } echo '
    '; @@ -333,7 +342,7 @@ E_O_T; foreach($present_libraries as $library) { echo '
  • '; - if($library['url']){ + if(isset($library['url'])){ echo ''.htmlentities($library['name']).''; }else{ echo htmlentities($library['name']); -- cgit v1.2.3-54-g00ecf