... actually i forgot that the default fopen mode is "rb" ... anyhow, here is what's supposed to happen: $ touch bug.txt; chmod 0777 bug.txt; php -r '$o=new SplFileObject("bug.txt");var_dump($o->fwrite("test"));var_dump(error_get_last());' PHP Notice: SplFileObject::fwrite(): Write of 4 bytes failed with errno=9 Bad file descriptor in Command line code on line 1 bool(false) array(4) { ["type"]=> int(8) ["message"]=> string(81) "SplFileObject::fwrite(): Write of 4 bytes failed with errno=9 Bad file descriptor" ["file"]=> string(17) "Command line code" ["line"]=> int(1) } changing the code to SplFileObject("bug.txt", "rb"); makes the code work, but there's still the issue with cygwin's php's SplFileObject::fwrite() not noticing the write error On Sat, 1 Oct 2022 at 18:47, Hans Henrik Bergan wrote: > running PHP 7.3.7 in Cygwin 3.3.6, and SplFileObject::fwrite seems > completely broken. > to reproduce: > $ touch bug.txt; chmod 0777 bug.txt; php -r '$o=new > SplFileObject("bug.txt");var_dump($o->fwrite("test"));var_dump(error_get_last());' > int(0) > NULL > > so both fwrite() and error_get_last() failed to pick up that there was an > error, > but strace reveals: > 67 487251 [main] php 1693 __set_errno: ssize_t write(int, const void*, > size_t):1350 setting errno 9 > 60 487311 [main] php 1693 write: -1 = write(3, 0x6FFFFFE65BF8, 4), errno 9 > > errno 9 probably means: 9 EBADF Bad file descriptor. >