#36290 [NoF->Csd]: tempnam() creates file on wrong drive

[email protected]
Newsgroups php.bugs
Message-ID <[email protected]>
 ID:               36290
 Updated by:       [email protected]
 Reported By:      info at silisoftware dot com
-Status:           No Feedback
+Status:           Closed
 Bug Type:         Filesystem function related
 Operating System: Windows XP Pro SP2
 PHP Version:      4.4.2
 New Comment:

Fixed in 5.3.x


Previous Comments:
------------------------------------------------------------------------

[2006-06-23 11:47:11] hanskrentel at yahoo dot de

I just checked this out on PHP Version 5.1.2 and the behavior for me is
the same, so this was not fixed.


reproduced with:
	$tempname = tempnam('', 'foo');
	echo $tempname.'<br>';
	echo realpath($tempname).'<br>';

output in my case:
	\foo5E0.tmp
	d:\foo5E0.tmp

d:\ is not my tempdir

anyway this function behaves inconsisten per default as discribben in
the current online documentaion:

>>Creates a file with a unique filename in the specified directory. If
the directory does not exist, tempnam() may generate a file in the
system's temporary directory, and return the name of that.<<
http://www.php.net/manual/en/function.tempnam.php

so the behavior is correct per definition but useless and i guess not
intended.

------------------------------------------------------------------------

[2006-02-13 01:00:04] php-bugs at lists dot php dot net

No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".

------------------------------------------------------------------------

[2006-02-05 10:31:29] [email protected]

Please try using this CVS snapshot:

  http://snaps.php.net/php5.1-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5.1-win32-latest.zip



------------------------------------------------------------------------

[2006-02-05 02:19:00] info at silisoftware dot com

Description:
------------
tempnam() returns a temp filename, and creates the file. However, it
creates it on the wrong drive. For example:

$tempname = tempnam('', 'foo');
echo $tempname.'<br>';
echo realpath($tempname).'<br>';

This outputs:

\foo49.tmp
e:\foo49.tmp

Notice the returned filename has no drive letter. The file is created
(to prevent race condition) in C:\ but realpath() resolves that to E:\
(the last drive letter of physical harddrives in this system).

For reference:
 getenv('TMP')    == 'C:\WINDOWS\TEMP'
 getenv('TMPDIR') == ''

Reproduce code:
---------------
$tempname = tempnam('', 'foo');
echo $tempname.'<br>';
echo realpath($tempname).'<br>';



Expected result:
----------------
c:\foo49.tmp
c:\foo49.tmp


Actual result:
--------------
\foo49.tmp
e:\foo49.tmp



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=36290&edit=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.