Graceful error handling and logging

Right now a failed "copyr" will result in the error log being spammed with not really helpful error messages. Also situations such as `$dir` returning `false` are not really caught.

This adds more error handling and logging to make debugging such situations easier.

Signed-off-by: Lukas Reschke <lukas@statuscode.ch>
This commit is contained in:
Lukas Reschke 2016-09-25 18:58:05 +02:00
parent a086011e00
commit 19ad11cce4
No known key found for this signature in database
GPG key ID: B9F6980CF6E759B1

View file

@ -336,7 +336,16 @@ class OC_Util {
* @return void
*/
public static function copyr($source, \OCP\Files\Folder $target) {
$logger = \OC::$server->getLogger();
// Verify if folder exists
$dir = opendir($source);
if($dir === false) {
$logger->error(sprintf('Could not opendir "%s"', $source), ['app' => 'core']);
return;
}
// Copy the files
while (false !== ($file = readdir($dir))) {
if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
if (is_dir($source . '/' . $file)) {
@ -344,7 +353,13 @@ class OC_Util {
self::copyr($source . '/' . $file, $child);
} else {
$child = $target->newFile($file);
stream_copy_to_stream(fopen($source . '/' . $file,'r'), $child->fopen('w'));
$sourceStream = fopen($source . '/' . $file, 'r');
if($sourceStream === false) {
$logger->error(sprintf('Could not fopen "%s"', $source . '/' . $file), ['app' => 'core']);
closedir($dir);
return;
}
stream_copy_to_stream($sourceStream, $child->fopen('w'));
}
}
}