diff options
author | Paul Arthur <paul.arthur@flowerysong.com> | 2013-05-30 14:42:33 -0400 |
---|---|---|
committer | Paul Arthur <paul.arthur@flowerysong.com> | 2013-05-30 14:42:33 -0400 |
commit | 69dcc79e94bd509fb539714ab1a49fd4567439ce (patch) | |
tree | 36bbd7fc2c5836c8612fe085eca6347c583f1bdc /lib/class | |
parent | 53aff101bf61807c9341a09b5df54e3211573c38 (diff) | |
download | ampache-69dcc79e94bd509fb539714ab1a49fd4567439ce.tar.gz ampache-69dcc79e94bd509fb539714ab1a49fd4567439ce.tar.bz2 ampache-69dcc79e94bd509fb539714ab1a49fd4567439ce.zip |
Add and use Core::is_readable()
bea34c42 fixed one use of is_readable, but Windows users encountering
this issue would still be affected in other cases. This commit fixes
all of the important is_readable calls within Ampache; I'm not going
to hack this into external modules, so if they're broken people will
have to live with it.
Diffstat (limited to 'lib/class')
-rw-r--r-- | lib/class/catalog.class.php | 12 | ||||
-rw-r--r-- | lib/class/core.class.php | 56 |
2 files changed, 45 insertions, 23 deletions
diff --git a/lib/class/catalog.class.php b/lib/class/catalog.class.php index 73e8b479..89167eca 100644 --- a/lib/class/catalog.class.php +++ b/lib/class/catalog.class.php @@ -217,13 +217,11 @@ class Catalog extends database_object { // Make sure the path is readable/exists if ($data['type'] == 'local') { - $handle = opendir($path); - if ($handle === false) { + if (!Core::is_readable($path)) { debug_event('catalog', 'Cannot add catalog at unopenable path ' . $path, 1); Error::add('general', sprintf(T_('Error: %s is not readable or does not exist'), scrub_out($data['path']))); return false; } - closedir($handle); } // Make sure this path isn't already in use by an existing catalog @@ -501,7 +499,7 @@ class Catalog extends database_object { Error::add('catalog_add', sprintf(T_('Error: Unable to get filesize for %s'), $full_file)); } // file_size check - if (!is_readable($full_file)) { + if (!Core::is_readable($full_file)) { // not readable, warn user debug_event('read', "$full_file is not readable by ampache", 2); /* HINT: FullFile */ @@ -1175,7 +1173,7 @@ class Catalog extends database_object { * Removes local songs that no longer exist. */ private function clean_local_catalog() { - if (!is_readable($this->path)) { + if (!Core::is_readable($this->path)) { // First sanity check; no point in proceeding with an unreadable // catalog root. debug_event('catalog', 'Catalog path:' . $this->path . ' unreadable, clean failed', 1); @@ -1288,7 +1286,7 @@ class Catalog extends database_object { $dead[] = $results['id']; } //if error - else if (!is_readable($results['file'])) { + else if (!Core::is_readable($results['file'])) { debug_event('clean', $results['file'] . ' is not readable, but does exist', 1); } } @@ -1373,7 +1371,7 @@ class Catalog extends database_object { UI::update_text('verify_dir_' . $this->id, scrub_out($file)); } - if (!is_readable($row['file'])) { + if (!Core::is_readable($row['file'])) { Error::add('general', sprintf(T_('%s does not exist or is not readable'), $row['file'])); debug_event('read', $row['file'] . ' does not exist or is not readable', 5); continue; diff --git a/lib/class/core.class.php b/lib/class/core.class.php index 55e594d5..5619225c 100644 --- a/lib/class/core.class.php +++ b/lib/class/core.class.php @@ -41,27 +41,27 @@ class Core { /** * autoload - * This function automatically loads any missing classes as they are - * needed so that we don't use a million include statements which load - * more than we need. + * This function automatically loads any missing classes as they are + * needed so that we don't use a million include statements which load + * more than we need. */ public static function autoload($class) { - // Lowercase the class - $class = strtolower($class); + // Lowercase the class + $class = strtolower($class); - $file = Config::get('prefix') . "/lib/class/$class.class.php"; + $file = Config::get('prefix') . "/lib/class/$class.class.php"; - // See if it exists - if (is_readable($file)) { - require $file; - if (is_callable($class . '::_auto_init')) { - $class::_auto_init(); - } - } - // Else log this as a fatal error - else { - debug_event('autoload', "'$class' not found!", 1); + // See if it exists + if (Core::is_readable($file)) { + require $file; + if (is_callable($class . '::_auto_init')) { + $class::_auto_init(); } + } + // Else log this as a fatal error + else { + debug_event('autoload', "'$class' not found!", 1); + } } // autoload /** @@ -164,5 +164,29 @@ class Core { } // image_dimensions + /* + * is_readable + * + * Replacement function because PHP's is_readable is buggy: + * https://bugs.php.net/bug.php?id=49620 + */ + public static function is_readable($path) { + if (is_dir($path)) { + $handle = opendir($path); + if ($handle === false) { + return false; + } + closedir($handle); + return true; + } + + $handle = fopen($path, 'rb'); + if ($handle === false) { + return false; + } + fclose($handle); + return true; + } + } // Core ?> |