123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- <?php
- /**
- * Utility function class
- *
- * @author Christopher Han <xiphux@gmail.com>
- * @copyright Copyright (c) 2010 Christopher Han
- * @package GitPHP
- */
- class GitPHP_Util
- {
- /**
- * Adds a trailing slash to a directory path if necessary
- *
- * @param string $path path to add slash to
- * @param boolean $filesystem true if this is a filesystem path (to also check for backslash for windows paths)
- * @return string path with a trailing slash
- */
- public static function AddSlash($path, $filesystem = true)
- {
- if (empty($path))
- return $path;
- $end = substr($path, -1);
- if (!(( ($end == '/') || ($end == ':')) || ($filesystem && GitPHP_Util::IsWindows() && ($end == '\\')))) {
- if (GitPHP_Util::IsWindows() && $filesystem) {
- $path .= '\\';
- } else {
- $path .= '/';
- }
- }
- return $path;
- }
- /**
- * Tests if this is running on windows
- *
- * @return bool true if on windows
- */
- public static function IsWindows()
- {
- return (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
- }
- public static function NullFile()
- {
- return self::IsWindows() ? 'NUL' : '/dev/null';
- }
- /**
- * Tests if this is a 64 bit machine
- *
- * @return bool true if on 64 bit
- */
- public static function Is64Bit()
- {
- return (strpos(php_uname('m'), '64') !== false);
- }
- /**
- * Turn a string into a filename-friendly slug
- *
- * @param string $str string to slugify
- * @return string slug
- */
- public static function MakeSlug($str)
- {
- $from = array(
- '/&'
- );
- $to = array(
- '--'
- );
- return str_replace($from, $to, $str);
- }
- /**
- * Get the filename of a given path
- *
- * Based on Drupal's basename
- *
- * @param string $path path
- * @param string $suffix optionally trim this suffix
- * @return string filename
- */
- public static function BaseName($path, $suffix = null)
- {
- $sep = '/';
- if (GitPHP_Util::IsWindows()) {
- $sep .= '\\';
- }
- $path = rtrim($path, $sep);
- if (!preg_match('@[^' . preg_quote($sep) . ']+$@', $path, $matches)) {
- return '';
- }
- $filename = $matches[0];
- if ($suffix) {
- $filename = preg_replace('@' . preg_quote($suffix, '@') . '$@', '', $filename);
- }
- return $filename;
- }
- /**
- * Provides a geshi language for a given filename
- *
- * @param string $filename file name
- * @return string language
- */
- public static function GeshiFilenameToLanguage($filename)
- {
- if (strncasecmp($filename, 'Makefile', 8) === 0) {
- return 'make';
- }
- return null;
- }
- /**
- * Recurses into a directory and lists files inside
- *
- * @param string $dir directory
- * @return string[] array of filenames
- */
- public static function ListDir($dir)
- {
- $files = array();
- if ($dh = opendir($dir)) {
- while (($file = readdir($dh)) !== false) {
- if (($file == '.') || ($file == '..')) {
- continue;
- }
- $fullFile = $dir . '/' . $file;
- if (is_dir($fullFile)) {
- $subFiles = GitPHP_Util::ListDir($fullFile);
- if (count($subFiles) > 0) {
- $files = array_merge($files, $subFiles);
- }
- } else {
- $files[] = $fullFile;
- }
- }
- }
- return $files;
- }
- /**
- * Get the base install url (without index)
- *
- * @param boolean $full true to return full url (include protocol and hostname)
- * @return string base url
- */
- public static function BaseUrl($full = false)
- {
- $baseurl = $_SERVER['SCRIPT_NAME'];
- if (substr_compare($baseurl, 'index.php', -9) === 0)
- $baseurl = dirname($baseurl);
- if ($full) {
- $baseurl = $_SERVER['HTTP_HOST'] . $baseurl;
- if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on'))
- $baseurl = 'https://' . $baseurl;
- else
- $baseurl = 'http://' . $baseurl;
- }
- if (GitPHP_Util::IsWindows())
- $baseurl = rtrim($baseurl, "\\");
- return rtrim($baseurl, "/");
- }
- /**
- * Tests whether a function is allowed to be called
- *
- * @param string $function functio name
- * @return true if allowed
- */
- public static function FunctionAllowed($function)
- {
- if (empty($function))
- return false;
- $disabled = @ini_get('disable_functions');
- if (!$disabled) {
- // no disabled functions
- // or ini_get is disabled so we can't reliably figure this out
- return true;
- }
- $disabledlist = explode(', ', $disabled);
- return !in_array($function, $disabledlist);
- }
- }
|