Bug #72983 [Asn->Nab]: file_put_contents does not overwrite if file exists

From: Date: Sat, 03 Sep 2016 05:45:18 +0000
Subject: Bug #72983 [Asn->Nab]: file_put_contents does not overwrite if file exists
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-203763@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=72983&edit=1 ID: 72983 Updated by: requinix@php.net Reported by: jim dot michaels at Jesusnjim dot com Summary: file_put_contents does not overwrite if file exists -Status: Assigned +Status: Not a bug Type: Bug Package: Filesystem function related Operating System: vista x32 amd PHP Version: 7.1.0beta3 Assigned To: cmb Block user comment: N Private report: N New Comment: '\\\\' is interpreted by PHP to be two backslashes, which are then interpreted by PCRE to be a single escaped backslash. You need eight - count 'em EIGHT - backslashes to get two in the output. https://3v4l.org/oLENr Previous Comments: ------------------------------------------------------------------------ [2016-09-03 04:43:32] jim dot michaels at Jesusnjim dot com <?php $a="a / b"; $a=preg_replace('/\//','\\',$a); echo file_put_contents("rw.txt", $a); $a=preg_replace('/\//','\\\\',$a); echo file_put_contents("rw.txt", $a); ?> outputs 55 and rw.txt contains a \ b which it should not. no it's not open in an editor. create always is not enabled in the interpreter. 2nd write fails to write to file, same as before. 5==strlen($a). ------------------------------------------------------------------------ [2016-09-02 15:46:32] cmb@php.net Thanks for checking this issue, fernando. I don't know what's wrong in the OP's case, but I suggest to check the return values of all three functions. ------------------------------------------------------------------------ [2016-09-02 15:34:18] fernando at null-life dot com Can't reproduce this issue on a Windows 8 with PHP 7.1 Beta 3 from windows.php.net QA I tried with a local path and with a SMB remote path: <?php error_reporting(E_ALL); file_put_contents('test.txt', "HOLA"); var_dump(file_get_contents('test.txt') == "HOLA"); file_put_contents('test.txt', "ADIOS"); var_dump(file_get_contents('test.txt') == "ADIOS"); file_put_contents('\\\\server\folder\test.txt', "HOLA"); var_dump(file_get_contents('\\\\server\folder\test.txt') == "HOLA"); file_put_contents('\\\\server\folder\test.txt', "ADIOS"); var_dump(file_get_contents('\\\\server\folder\test.txt') == "ADIOS"); D:\fms\php710beta3>php file.php bool(true) bool(true) bool(true) bool(true) ------------------------------------------------------------------------ [2016-09-01 10:30:41] jmichae3 at yahoo dot com yes, error reporting was set for E_ALL. I cannot compile php. requires languages and utilities I do not have. I don't have linux. this is on windows vista. ------------------------------------------------------------------------ [2016-08-31 16:24:20] cmb@php.net > if file is open in programmer's editor, rw.txt file does not > refresh. Is it possible that this editor locks the file? Please enable error_reporting=E_ALL, and see if there are any warnings shown. > this could be related with c++ old gcc bug in fstream's > std::ios_base::creat notworking for while a number of years. Did you compile the php.exe binary with GCC? The officially distributed php.exes are compiled with Visual C++. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=72983 -- Edit this bug report at https://bugs.php.net/bug.php?id=72983&edit=1

« previous php.bugs (#203763) next »