Bug #72317 [Fbk->Nab]: tempnam fails with prefix "php"

From: Date: Mon, 06 Jun 2016 11:36:22 +0000
Subject: Bug #72317 [Fbk->Nab]: tempnam fails with prefix "php"
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-201473@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=72317&edit=1 ID: 72317 Updated by: cmb@php.net Reported by: flip101 at gmail dot com Summary: tempnam fails with prefix "php" -Status: Feedback +Status: Not a bug Type: Bug Package: *Directory/Filesystem functions Operating System: Windows 10 64 bits PHP Version: 5.6.20 -Assigned To: +Assigned To: cmb Block user comment: N Private report: N New Comment: > I have 65.535 files which look like php####.tmp where #### can > be 1 to 4 characters and seem to be counting up. […] and assumed > php would delete the file if i don't use it […] Well, that is documented[1]: | If PHP cannot create a file in the specified dir parameter, it | falls back on the system default. On NTFS this also happens if | the specified dir contains more than 65534 files. In this case there's no fallback on the system default, because that has already been explicitly requested. And: | Note, that you need to remove the file in case you need it no | more, it is not done automatically. > But i think the issue is resolved at this point. ACK. Thanks for your quick feedback. :) [1] <http://php.net/manual/en/function.tempnam.php> Previous Comments: ------------------------------------------------------------------------ [2016-06-06 11:25:31] flip101 at gmail dot com Hi ab, i captured the output of Sysinternals Process Monitor. I noticed that when trying to generate a file the file already exist (i went into the directory and indeed the file is there). I have 65.535 files which look like php####.tmp where #### can be 1 to 4 characters and seem to be counting up. However all these files were created on the day that i reported this issue. What i think happened is that i had the tempnamp() in a while loop (which had a wrong stop condition) and assumed php would delete the file if i don't use it (because i thought the file was temporary because of the function name). When i was getting errors there i started making the test case which of course failed as well. Let me know if you want to have the output of Process Monitor, or @cmb if you want to test this with a different php version. But i think the issue is resolved at this point. ------------------------------------------------------------------------ [2016-06-06 07:44:17] ab@php.net Thanks for the report. Can't reproduce as well. Also it's unlikely an issue with exactly x64 PHP5, as the I/O layer is same. @flip101 does the same happen when using a dir different from temp? For one, could you please post the relevant part of the procmon output when running into this issue? The Process Monitor is fetcheable from sysinternals.com. Thanks. ------------------------------------------------------------------------ [2016-06-03 15:12:04] cmb@php.net > My exact php version is this one: php-5.6.20-Win32-VC11-x64.zip Running your latest test script on this very version: bool(true) bool(true) string(31) "C:\Users\cmb\AppData\Local\Temp" string(43) "C:\Users\cmb\AppData\Local\Temp\phpB8D1.tmp" string(43) "C:\Users\cmb\AppData\Local\Temp\aaaB8E2.tmp" So, I still can't reproduce the issue. Anyhow, note[1]: | The x64 builds of PHP 5 for Windows are experimental, I suggest you try with an x86 build of PHP 5.6.22. [1] <http://windows.php.net/download/> ------------------------------------------------------------------------ [2016-06-03 13:57:27] flip101 at gmail dot com Forgot to change the username in my output, but it's the same user .. ------------------------------------------------------------------------ [2016-06-03 13:20:44] flip101 at gmail dot com I double check error reporting it's on E_ALL both in my php.ini (and i double check that i was viewing the right php.ini by checking which one was loaded) and also i put error_reporting(E_ALL); at the top (new script at the bottom of this comment). I don't see any warnings or notices, exact output at bottom of comment. My exact php version is this one: php-5.6.20-Win32-VC11-x64.zip ==== Script <?php error_reporting(E_ALL); var_dump( file_exists(sys_get_temp_dir()), is_writable(sys_get_temp_dir()), sys_get_temp_dir(), tempnam(sys_get_temp_dir(), 'php'), tempnam(sys_get_temp_dir(), 'aaa') ); ==== End script ==== Console C:\dev>php test.php bool(true) bool(true) string(34) "C:\Users\plagas\AppData\Local\Temp" bool(false) string(46) "C:\Users\plagas\AppData\Local\Temp\aaaE26E.tmp" ==== End Console ------------------------------------------------------------------------ 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=72317 -- Edit this bug report at https://bugs.php.net/bug.php?id=72317&edit=1

« previous php.bugs (#201473) next »