From cfc0d9249bf53449dc8daed9c9811dc78fe7086c Mon Sep 17 00:00:00 2001 From: Boris Rybalkin Date: Thu, 29 Sep 2016 10:10:35 +0100 Subject: fixing php 32 bit (arm) filemtime on large file issue (#18971) (#25428) * fixing php 32 bit (arm) filemtime on large file issue (#18971) * cast to int --- lib/private/Files/Storage/Local.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'lib/private/Files/Storage/Local.php') diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php index 0d63fd46ecc..97201621645 100644 --- a/lib/private/Files/Storage/Local.php +++ b/lib/private/Files/Storage/Local.php @@ -173,8 +173,15 @@ class Local extends \OC\Files\Storage\Common { } public function filemtime($path) { - clearstatcache($this->getSourcePath($path)); - return $this->file_exists($path) ? filemtime($this->getSourcePath($path)) : false; + $fullPath = $this->getSourcePath($path); + clearstatcache($fullPath); + if (!$this->file_exists($path)) { + return false; + } + if (PHP_INT_SIZE === 4) { + return (int) exec ('stat -c %Y '. escapeshellarg ($fullPath)); + } + return filemtime($fullPath); } public function touch($path, $mtime = null) { -- cgit v1.2.3 From 459477e2c3981d28605f6cb304afedd8ec6f5a3b Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 25 Oct 2016 11:42:16 +0200 Subject: Move function to LargeFileHelper Signed-off-by: Lukas Reschke --- lib/private/Files/Storage/Local.php | 3 ++- lib/private/LargeFileHelper.php | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'lib/private/Files/Storage/Local.php') diff --git a/lib/private/Files/Storage/Local.php b/lib/private/Files/Storage/Local.php index 97201621645..294e3d0a34c 100644 --- a/lib/private/Files/Storage/Local.php +++ b/lib/private/Files/Storage/Local.php @@ -179,7 +179,8 @@ class Local extends \OC\Files\Storage\Common { return false; } if (PHP_INT_SIZE === 4) { - return (int) exec ('stat -c %Y '. escapeshellarg ($fullPath)); + $helper = new \OC\LargeFileHelper(); + return $helper->getFileMtime($fullPath); } return filemtime($fullPath); } diff --git a/lib/private/LargeFileHelper.php b/lib/private/LargeFileHelper.php index 9d0fe864033..b75cdcc210e 100644 --- a/lib/private/LargeFileHelper.php +++ b/lib/private/LargeFileHelper.php @@ -187,6 +187,20 @@ class LargeFileHelper { return $result; } + /** + * Returns the current mtime for $fullPath + * + * @param string $fullPath + * @return int + */ + public function getFileMtime($fullPath) { + if (\OC_Helper::is_function_enabled('exec')) { + return $this->exec('stat -c %Y ' . escapeshellarg($fullPath)); + } + + return filemtime($fullPath); + } + protected function exec($cmd) { $result = trim(exec($cmd)); return ctype_digit($result) ? 0 + $result : null; -- cgit v1.2.3