. * * @category Installation * @package Installation * @license GNU Affero General Public License http://www.gnu.org/licenses/ * */ define('INSTALLDIR', dirname(__FILE__)); $external_libraries=array( array( 'name'=>'gettext', 'url'=>'http://us.php.net/manual/en/book.gettext.php', 'check_function'=>'gettext' ), array( 'name'=>'PEAR', 'url'=>'http://pear.php.net/', 'deb'=>'php-pear', 'include'=>'PEAR.php', 'check_class'=>'PEAR' ), array( 'name'=>'DB', 'pear'=>'DB', 'url'=>'http://pear.php.net/package/DB', 'deb'=>'php-db', 'include'=>'DB/common.php', 'check_class'=>'DB_common' ), array( 'name'=>'DB_DataObject', 'pear'=>'DB_DataObject', 'url'=>'http://pear.php.net/package/DB_DataObject', 'include'=>'DB/DataObject.php', 'check_class'=>'DB_DataObject' ), array( 'name'=>'Console_Getopt', 'pear'=>'Console_Getopt', 'url'=>'http://pear.php.net/package/Console_Getopt', 'include'=>'Console/Getopt.php', 'check_class'=>'Console_Getopt' ), array( 'name'=>'Facebook API', 'url'=>'http://developers.facebook.com/', 'include'=>'facebook/facebook.php', 'check_class'=>'Facebook' ), array( 'name'=>'htmLawed', 'url'=>'http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed', 'include'=>'htmLawed/htmLawed.php', 'check_function'=>'htmLawed' ), array( 'name'=>'HTTP_Request', 'pear'=>'HTTP_Request', 'url'=>'http://pear.php.net/package/HTTP_Request', 'deb'=>'php-http-request', 'include'=>'HTTP/Request.php', 'check_class'=>'HTTP_Request' ), array( 'name'=>'Mail', 'pear'=>'Mail', 'url'=>'http://pear.php.net/package/Mail', 'deb'=>'php-mail', 'include'=>'Mail.php', 'check_class'=>'Mail' ), array( 'name'=>'Mail_mimeDecode', 'pear'=>'Mail_mimeDecode', 'url'=>'http://pear.php.net/package/Mail_mimeDecode', 'deb'=>'php-mail-mimedecode', 'include'=>'Mail/mimeDecode.php', 'check_class'=>'Mail_mimeDecode' ), array( 'name'=>'Mime_Type', 'pear'=>'Mime_Type', 'url'=>'http://pear.php.net/package/Mime_Type', 'include'=>'MIME/Type.php', 'check_class'=>'Mime_Type' ), array( 'name'=>'Net_URL_Mapper', 'pear'=>'Net_URL_Mapper', 'url'=>'http://pear.php.net/package/Net_URL_Mapper', 'include'=>'Net/URL/Mapper.php', 'check_class'=>'Net_URL_Mapper' ), array( 'name'=>'Net_Socket', 'pear'=>'Net_Socket', 'url'=>'http://pear.php.net/package/Net_Socket', 'deb'=>'php-net-socket', 'include'=>'Net/Socket.php', 'check_class'=>'Net_Socket' ), array( 'name'=>'Net_SMTP', 'pear'=>'Net_SMTP', 'url'=>'http://pear.php.net/package/Net_SMTP', 'deb'=>'php-net-smtp', 'include'=>'Net/SMTP.php', 'check_class'=>'Net_SMTP' ), array( 'name'=>'Net_URL', 'pear'=>'Net_URL', 'url'=>'http://pear.php.net/package/Net_URL', 'deb'=>'php-net-url', 'include'=>'Net/URL.php', 'check_class'=>'Net_URL' ), array( 'name'=>'Net_URL2', 'pear'=>'Net_URL2', 'url'=>'http://pear.php.net/package/Net_URL2', 'include'=>'Net/URL2.php', 'check_class'=>'Net_URL2' ), array( 'name'=>'Services_oEmbed', 'pear'=>'Services_oEmbed', 'url'=>'http://pear.php.net/package/Services_oEmbed', 'include'=>'Services/oEmbed.php', 'check_class'=>'Services_oEmbed' ), array( 'name'=>'Stomp', 'url'=>'http://stomp.codehaus.org/PHP', 'include'=>'Stomp.php', 'check_class'=>'Stomp' ), array( 'name'=>'System_Command', 'pear'=>'System_Command', 'url'=>'http://pear.php.net/package/System_Command', 'include'=>'System/Command.php', 'check_class'=>'System_Command' ), array( 'name'=>'XMPPHP', 'url'=>'http://code.google.com/p/xmpphp', 'include'=>'XMPPHP/XMPP.php', 'check_class'=>'XMPPHP_XMPP' ), array( 'name'=>'PHP Markdown', 'url'=>'http://www.michelf.com/projects/php-markdown/', 'include'=>'markdown.php', 'check_class'=>'Markdown_Parser' ), array( 'name'=>'OAuth', 'url'=>'http://code.google.com/p/oauth-php', 'include'=>'OAuth.php', 'check_class'=>'OAuthRequest' ), array( 'name'=>'Validate', 'pear'=>'Validate', 'url'=>'http://pear.php.net/package/Validate', 'include'=>'Validate.php', 'check_class'=>'Validate' ) ); $dbModules = array( 'mysql' => array( 'name' => 'MySQL', 'check_module' => 'mysql', // mysqli? 'installer' => 'mysql_db_installer', ), 'pgsql' => array( 'name' => 'PostgreSQL', 'check_module' => 'pgsql', 'installer' => 'pgsql_db_installer', ), ); /** * the actual installation. * If call libraries are present, then install * * @return void */ function main() { if (!checkPrereqs()) { return; } if ($_GET['checklibs']) { showLibs(); } else { if ($_SERVER['REQUEST_METHOD'] == 'POST') { handlePost(); } else { showForm(); } } } /** * checks if an external libary is present * * @param string $external_library Name of library * * @return boolean indicates if library present */ function haveExternalLibrary($external_library) { if (isset($external_library['include']) && ! include_once $external_library['include'] ) { return false; } if (isset($external_library['check_function']) && ! function_exists($external_library['check_function'])) { return false; } if (isset($external_library['check_class']) && ! class_exists($external_library['check_class'])) { return false; } return true; } /** * Check if all is ready for installation * * @return void */ function checkPrereqs() { $pass = true; if (file_exists(INSTALLDIR.'/config.php')) { printf('

Config file "config.php" already exists.

'); $pass = false; } if (version_compare(PHP_VERSION, '5.2.3', '<')) { printf('

Require PHP version 5.2.3 or greater.

'); $pass = false; } $reqs = array('gd', 'curl', 'xmlwriter', 'mbstring','tidy'); foreach ($reqs as $req) { if (!checkExtension($req)) { printf('

Cannot load required extension: %s

', $req); $pass = false; } } // Make sure we have at least one database module available global $dbModules; $missingExtensions = array(); foreach ($dbModules as $type => $info) { if (!checkExtension($info['check_module'])) { $missingExtensions[] = $info['check_module']; } } if (count($missingExtensions) == count($dbModules)) { $req = implode(', ', $missingExtensions); printf('

Cannot find mysql or pgsql extension. You need one or the other: %s

', $req); $pass = false; } if (!is_writable(INSTALLDIR)) { printf('

Cannot write config file to: %s

', INSTALLDIR); printf('

On your server, try this command: chmod a+w %s', INSTALLDIR); $pass = false; } // Check the subdirs used for file uploads $fileSubdirs = array('avatar', 'background', 'file'); foreach ($fileSubdirs as $fileSubdir) { $fileFullPath = INSTALLDIR."/$fileSubdir/"; if (!is_writable($fileFullPath)) { printf('

Cannot write to %s directory: %s

', $fileSubdir, $fileFullPath); printf('

On your server, try this command: chmod a+w %s

', $fileFullPath); $pass = false; } } return $pass; } /** * Checks if a php extension is both installed and loaded * * @param string $name of extension to check * * @return boolean whether extension is installed and loaded */ function checkExtension($name) { if (!extension_loaded($name)) { if (!@dl($name.'.so')) { return false; } } return true; } /** * Show list of libraries * * @return void */ function showLibs() { global $external_libraries; $present_libraries=array(); $absent_libraries=array(); foreach ($external_libraries as $external_library) { if (haveExternalLibrary($external_library)) { $present_libraries[]=$external_library; } else { $absent_libraries[]=$external_library; } } echo<<

Laconica comes bundled with a number of libraries required for the application to work. However, it is best that you use PEAR or you distribution to manage libraries instead, as they tend to provide security updates faster, and may offer improved performance.

On Debian based distributions, such as Ubuntu, use a package manager (such as "aptitude", "apt-get", and "synaptic") to install the package listed.

On RPM based distributions, such as Red Hat, Fedora, CentOS, Scientific Linux, Yellow Dog Linux and Oracle Enterprise Linux, use a package manager (such as "yum", "apt-rpm", and "up2date") to install the package listed.

On servers without a package manager (such as Windows), or if the library is not packaged for your distribution, you can use PHP's PEAR to install the library. Simply run "pear install <name>".

Absent Libraries