From df29eec72b2b094acca97636c6b91ab2eafc245d Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 9 Feb 2014 16:16:01 +0100 Subject: [PATCH] Windows exec() implementation. --- lib/private/largefilehelper.php | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/private/largefilehelper.php b/lib/private/largefilehelper.php index 751e60de53..5f5e14aca3 100644 --- a/lib/private/largefilehelper.php +++ b/lib/private/largefilehelper.php @@ -92,17 +92,26 @@ class LargeFileHelper { public function getFilesizeViaExec($filename) { if (\OC_Helper::is_function_enabled('exec')) { $os = strtolower(php_uname('s')); + $arg = escapeshellarg($filename); $result = ''; if (strpos($os, 'linux') !== false) { - $result = trim(exec('stat -c %s ' . escapeshellarg($filename))); + $result = $this->exec("stat -c %s $arg"); } else if (strpos($os, 'bsd') !== false) { - $result = trim(exec('stat -f %z ' . escapeshellarg($filename))); - } - - if (ctype_digit($result)) { - return 0 + $result; + $result = $this->exec("stat -f %z $arg"); + } else if (strpos($os, 'win') !== false) { + $result = $this->exec("for %F in ($arg) do @echo %~zF"); + if (is_null($result)) { + // PowerShell + $result = $this->exec("(Get-Item $arg).length"); + } } + return $result; } return null; } + + protected function exec($cmd) { + $result = trim(exec($cmd)); + return ctype_digit($result) ? 0 + $result : null; + } }