|
|
|
|
@ -29,22 +29,15 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{ |
|
|
|
|
return is_file($this->datadir.$path); |
|
|
|
|
} |
|
|
|
|
public function stat($path) { |
|
|
|
|
$fullPath = $this->datadir.$path; |
|
|
|
|
$fullPath = $this->datadir . $path; |
|
|
|
|
$statResult = stat($fullPath); |
|
|
|
|
|
|
|
|
|
// special case for 32-bit systems |
|
|
|
|
if (PHP_INT_SIZE===4) { |
|
|
|
|
if (!(strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')) |
|
|
|
|
$size = (float)exec('stat -c %s '. escapeshellarg ($fullPath)); |
|
|
|
|
else{ |
|
|
|
|
$fsobj = new COM("Scripting.FileSystemObject"); |
|
|
|
|
$f = $fsobj->GetFile($fullPath); |
|
|
|
|
$size = $f->Size; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($statResult['size'] < 0) { |
|
|
|
|
$size = self::getFileSizeFromOS($fullPath); |
|
|
|
|
$statResult['size'] = $size; |
|
|
|
|
$statResult[7] = $size; |
|
|
|
|
} |
|
|
|
|
return $statResult; |
|
|
|
|
|
|
|
|
|
return $statResult; |
|
|
|
|
} |
|
|
|
|
@ -59,7 +52,13 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{ |
|
|
|
|
if($this->is_dir($path)) { |
|
|
|
|
return 0; |
|
|
|
|
}else{ |
|
|
|
|
return filesize($this->datadir.$path); |
|
|
|
|
$fullPath = $this->datadir . $path; |
|
|
|
|
$fileSize = filesize($fullPath); |
|
|
|
|
if ($fileSize < 0) { |
|
|
|
|
return self::getFileSizeFromOS($fullPath); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $fileSize; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public function isReadable($path) { |
|
|
|
|
@ -173,6 +172,30 @@ class OC_Filestorage_Local extends OC_Filestorage_Common{ |
|
|
|
|
return $return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function getFileSizeFromOS($fullPath) { |
|
|
|
|
$name = strtolower(php_uname('s')); |
|
|
|
|
// Windows OS: we use COM to access the filesystem |
|
|
|
|
if (strpos($name, 'win') !== false) { |
|
|
|
|
if (class_exists('COM')) { |
|
|
|
|
$fsobj = new COM("Scripting.FileSystemObject"); |
|
|
|
|
$f = $fsobj->GetFile($fullPath); |
|
|
|
|
return $f->Size; |
|
|
|
|
} |
|
|
|
|
} else if (strpos($name, 'bsd') !== false) { |
|
|
|
|
if (\OC_Helper::is_function_enabled('exec')) { |
|
|
|
|
return (float)exec('stat -f %z ' . escapeshellarg($fullPath)); |
|
|
|
|
} |
|
|
|
|
} else if (strpos($name, 'linux') !== false) { |
|
|
|
|
if (\OC_Helper::is_function_enabled('exec')) { |
|
|
|
|
return (float)exec('stat -c %s ' . escapeshellarg($fullPath)); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
OC_Log::write('core', 'Unknown OS: '.$name, OC_Log::ERROR); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function hash($path, $type, $raw=false) { |
|
|
|
|
return hash_file($type, $this->datadir.$path, $raw); |
|
|
|
|
} |
|
|
|
|
|