php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #76132 Documentation lacks a warning about file_put_contents()
Submitted: 2018-03-22 00:11 UTC Modified: 2018-03-22 03:02 UTC
From: briethings at gmail dot com Assigned:
Status: Not a bug Package: Filesystem function related
PHP Version: 5.6.34 OS: any
Private report: No CVE-ID: None
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
MUST BE VALID
Solve the problem:
34 - 27 = ?
Subscribe to this entry?

 
 [2018-03-22 00:11 UTC] briethings at gmail dot com
Description:
------------
---
From manual page: http://www.php.net/function.file-put-contents
---

Documentation doesn't mention that, if the directory specified in $filename doesn't exist, file_put_contents() *silently* fails, with not even a notice.

This can lead to situations where it may take time before realizing there is a simple type error!

So IMO, at least this should be mentioned, or a notice should be thrown.


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2018-03-22 01:58 UTC] requinix@php.net
-Status: Open +Status: Feedback
 [2018-03-22 01:58 UTC] requinix@php.net
You sure? Because on Windows I see
> Warning: file_put_contents(...): failed to open stream: No such file or directory

Maybe you have warnings hidden? Check your display_errors, error_log, and error_reporting settings.
 [2018-03-22 02:59 UTC] briethings at gmail dot com
-Status: Feedback +Status: Closed
 [2018-03-22 02:59 UTC] briethings at gmail dot com
Sorry, you're totally right!
However I had error_reporting set to E-ALL, but I fell into a stupid but interesting pitfall (so I'll report it to user-notes instead of bug!).

Here it is: the $filename arg was coded as $path.$file, with say $path = 'path/to' and $file = 'file.txt'.
You see that $path lacks its ending "/", so the resulting full path was 'path/tofile.txt': so file_put_contents() didn't fail but created the 'tofile.txt' in the *parent* directory of the one where I expected it, making me believe that nothing had happened!

Again, sorry for the false alert, and thanks for your vigilance.
 [2018-03-22 03:02 UTC] requinix@php.net
-Status: Closed +Status: Not a bug -Package: Documentation problem +Package: Filesystem function related
 
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Fri Sep 25 06:01:24 2020 UTC