ID: 41609 Updated by: [EMAIL PROTECTED] Reported By: zoe at uk dot ibm dot com Status: Open Bug Type: Filesystem function related Operating System: Windows XP PHP Version: 6CVS-2007-06-06 (snap) New Comment:
"file_put_contents creates a file with \r, whereas using fopen() doesn't. I tried using "wb" in fopen and got the same result." file_put_contents should be used with the new flag. I'm not sure what we should do for fopen, I think we should make it consistent. About forcing the binary mode if a binary string is given, this patch should do the trick for file_put_contents: http://blog.thepimp.net/misc/patches/php/bug41609_force_binary.txt Previous Comments: ------------------------------------------------------------------------ [2007-06-11 20:16:04] zoe at uk dot ibm dot com "Having to specify the mode just like you do with fopen is clear and not confusing." Well - this made me think of trying something else. In the following test case: <?php $file_path = dirname(__FILE__); $buffer = "text\nline of text\n"; $nbytes_fpc = file_put_contents( $file_path."/data_fpc.tmp", (binary)$buffer); $fh = fopen( $file_path."/data_owc.tmp", "w"); $nbytes_owc = fwrite ($fh, (binary)$buffer); fclose ($fh); echo "Bytes fpc = $nbytes_fpc Bytes owc = $nbytes_owc \n"; ?> file_put_contents creates a file with \r, whereas using fopen() doesn't. I tried using "wb" in fopen and got the same result. The interesting thing is that this behaviour is only seen with unicode.semantics=1, when unicode.semantics=0 the two files in the tescase above are identical. I'm not sure whether this makes it a doc or a code defect :-) Just more information.... ------------------------------------------------------------------------ [2007-06-11 18:25:38] [EMAIL PROTECTED] "I don't see that as magical.. If a binary string is given, you want it writen as-is, IMHO. I'm classifying back to a PHP bug, because I feel this needs more discussion." Yes, but it is still magic as it introduces possible confusions and wtf factors. Having to specify the mode just like you do with fopen is clear and not confusing. It is only in Unicode mode so no BC involved either. ------------------------------------------------------------------------ [2007-06-11 17:47:11] [EMAIL PROTECTED] "I'm pretty sure that FILE_BINARY solves your issue. It may use it automatically when a binary string is given, but I would find that trickier (magic++)" I don't see that as magical.. If a binary string is given, you want it writen as-is, IMHO. I'm classifying back to a PHP bug, because I feel this needs more discussion. ------------------------------------------------------------------------ [2007-06-11 12:15:56] [EMAIL PROTECTED] "*IF* there is some work needed on the docs is the right process to open another defect?" Good point, there is a lot of work to be done regarding php6 behaviors of each function. I'm not sure what the phpdoc team decided but I will let them comment here, if required. changed to open + documentation problem. ------------------------------------------------------------------------ [2007-06-11 11:30:25] zoe at uk dot ibm dot com Fair enough - I was wondering if it should also be either RTFM or WTFM? Just had a quick look at what I hope are the PHP6 docs and I can't see the new put_file_contents() flags documented yet. *IF* there is some work needed on the docs is the right process to open another defect? ------------------------------------------------------------------------ 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 http://bugs.php.net/41609 -- Edit this bug report at http://bugs.php.net/?id=41609&edit=1