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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: briethings at gmail dot com
New email:
PHP Version: OS:

 

 [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

Pull Requests

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-2025 The PHP Group
All rights reserved.
Last updated: Sat Jul 05 16:01:33 2025 UTC