php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #64178 move_uploaded_file() sometimes executes a copy followed by a move unnecessarily
Submitted: 2013-02-09 02:20 UTC Modified: 2013-02-17 00:22 UTC
Votes:1
Avg. Score:4.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: jbrown at bluedroplet dot com Assigned:
Status: Open Package: Streams related
PHP Version: 5.4.11 OS: Ubuntu 12.10
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2013-02-09 02:20 UTC] jbrown at bluedroplet dot com
Description:
------------
move_uploaded_file() executes a copy followed by a move when stream wrapper URIs are used, even the source and destination are on the same file system

See http://drupal.org/node/1395524


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2013-02-15 23:14 UTC] cataphract@php.net
You mean copy followed by a delete? In which case, PHP just calls rename(2) and, if that fails, moves on to copy+delete. Apart from the case where the destination is actually a file:// URL, I don't see any situation where the copy is unnecessary and PHP could detect it. Can you elaborate on that point?
 [2013-02-15 23:14 UTC] cataphract@php.net
-Status: Open +Status: Feedback
 [2013-02-17 00:22 UTC] jbrown at bluedroplet dot com
I used to run a transcoding server and it would fall over if a 1GB file was uploaded. Pre-resolving the private:// URI before passing it to move_uploaded_file() would prevent this from happening as it would issue a rename instead of a copy followed by a delete.

In general, when moving a file between stream wrappers it makes sense to attempt to resolve them both. If they do both resolve then an rename can be issued instead of a copy followed by a delete. If source and destination are on the same filesystem then this will be extremely cheap.
 [2013-02-17 00:22 UTC] jbrown at bluedroplet dot com
-Status: Feedback +Status: Open
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Sun Jun 16 20:01:28 2019 UTC