[wp-trac] [WordPress Trac] #36776: Theme update error: "Download failed. Could not open handle for fopen() to ..." (file name too long)
WordPress Trac
noreply at wordpress.org
Fri May 6 12:39:05 UTC 2016
#36776: Theme update error: "Download failed. Could not open handle for fopen() to
..." (file name too long)
--------------------------+-----------------------------
Reporter: JanR | Owner:
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: General | Version: 4.5.1
Severity: normal | Keywords:
Focuses: |
--------------------------+-----------------------------
Note: I'm still investigating and debugging this issue.
A theme update fails with the following error:
> Download failed. Could not open handle for fopen() to ...
when two conditions are met:
1. hosted on Windows Server
2. extreme long temporary name for the update file
In the case of one of our customers, the temporary filename is
`D:\www\example.com\www/wp-content/enfold
.zipAWSAccessKeyIdAKIAJYG5ROGJ6X7Z3M6QExpires1462528521SignaturevVcIoALl287s8b4Ema4weAdA5yI3Dresponse-
content-dispositionattachment3Bfilename3Dthemeforest-4519990-enfold-
responsive-multipurpose-theme-wordpress-theme-YPRt5D.tmp` (slightly
edited).
This is well over 260 characters which is the maximum
[https://msdn.microsoft.com/en-
us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath MAX_PATH] in the
Windows API. The missing question mark (''enfold.zipAWSA''...) and missing
percent signs (%, ''3B'' instead of ''%3B'') feels like
urlencode/urldecode gone bad.
In this specific case, the update file is downloaded from an extremely
long Envato/ThemeForest URL:
https://s3.amazonaws.com/marketplace-
downloads.envato.com/files/184010637/enfold.zip?AWSAccessKeyId=(AccessKey)&Expires=(Expires)&Signature=(Signature)%3D
&response-content-disposition=attachment%3B+filename%3Dthemeforest-4519990
-enfold-responsive-multipurpose-theme-wordpress-theme.zip
One ''could'' blame Envato for this extremely long URL, but that's not the
point of this ticket :-) Point is, we need to limit the maximum file
length for temporary downloaded files in WordPress. Hacking my way through
/wp-includes/class-wp-http-curl.php (bad idea), I was able to download the
theme update file. Simply strip everything after the question mark ('?').
On line 187, add:
`$r['filename'] = preg_replace("/(.*\.zip)?(.*)/", "$1", $r['filename']);`
`$this->stream_handle = fopen($r['filename'], 'w+' );`
However, the temporary file name is used in multiple places. This simply
resulted in /wp-admin/includes/file.php not being able to delete the file
(line 493).
PS: there is an older support thread describing this very issue (not
related to me or the client case I'm working on now), on kriesi.at:
http://www.kriesi.at/support/topic/enfold-theme-problem-with-fopen-when-
updating-the-theme/.
--
Ticket URL: <https://core.trac.wordpress.org/ticket/36776>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list