From b350164c3d205716cf56aa472099c5215a576286 Mon Sep 17 00:00:00 2001 From: Hendrik Leidinger Date: Mon, 16 Mar 2026 02:09:30 -0700 Subject: [PATCH] fix: manually set modified time to SFTP files after editing Signed-off-by: Hendrik Leidinger --- apps/files_external/lib/Lib/Storage/SFTP.php | 15 ++++++++++++++- .../lib/Lib/Storage/SFTPWriteStream.php | 6 ++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/apps/files_external/lib/Lib/Storage/SFTP.php b/apps/files_external/lib/Lib/Storage/SFTP.php index 6504ea610f3..91d3e77c810 100644 --- a/apps/files_external/lib/Lib/Storage/SFTP.php +++ b/apps/files_external/lib/Lib/Storage/SFTP.php @@ -333,7 +333,10 @@ class SFTP extends Common { $fh = fopen('sftpwrite://' . trim($absPath, '/'), 'w', false, $context); if ($fh) { $fh = CallbackWrapper::wrap($fh, null, null, function () use ($path): void { - $this->knownMTimes->set($path, time()); + $mtime = time(); + $this->knownMTimes->set($path, $mtime); + $this->getConnection()->touch($this->absPath($path), $mtime, $mtime); + $this->getConnection()->clearStatCache(); }); } return $fh; @@ -429,6 +432,11 @@ class SFTP extends Common { public function file_put_contents(string $path, mixed $data): int|float|false { /** @psalm-suppress InternalMethod */ $result = $this->getConnection()->put($this->absPath($path), $data); + $mtime = time(); + $this->knownMTimes->set($path, $mtime); + $this->getConnection()->touch($this->absPath($path), $mtime, $mtime); + $this->getConnection()->clearStatCache(); + if ($result) { return strlen($data); } else { @@ -448,6 +456,11 @@ class SFTP extends Common { /** @psalm-suppress InternalMethod */ $result = $this->getConnection()->put($this->absPath($path), $stream); fclose($stream); + $mtime = time(); + $this->knownMTimes->set($path, $mtime); + $this->getConnection()->touch($this->absPath($path), $mtime, $mtime); + $this->getConnection()->clearStatCache(); + if ($result) { if ($size === null) { throw new \Exception('Failed to get written size from sftp storage wrapper'); diff --git a/apps/files_external/lib/Lib/Storage/SFTPWriteStream.php b/apps/files_external/lib/Lib/Storage/SFTPWriteStream.php index d64e89b5462..c6713de193e 100644 --- a/apps/files_external/lib/Lib/Storage/SFTPWriteStream.php +++ b/apps/files_external/lib/Lib/Storage/SFTPWriteStream.php @@ -32,6 +32,8 @@ class SFTPWriteStream implements File { private $buffer = ''; + private string $path; + public static function register($protocol = 'sftpwrite') { if (in_array($protocol, stream_get_wrappers(), true)) { return false; @@ -71,6 +73,8 @@ class SFTPWriteStream implements File { } $remote_file = $this->sftp->_realpath($path); + + $this->path = $remote_file; if ($remote_file === false) { return false; } @@ -160,6 +164,8 @@ class SFTPWriteStream implements File { if (!$this->sftp->_close_handle($this->handle)) { return false; } + $this->sftp->touch($this->path, time(), time()); + return true; } }