Edit report at https://bugs.php.net/bug.php?id=61002&edit=1

 ID:                 61002
 Updated by:         a...@php.net
 Reported by:        feedbee at gmail dot com
 Summary:            Windows symlink resolution differs between mkdir and
                     file_put_contents
-Status:             Open
+Status:             No Feedback
 Type:               Bug
 Package:            Unknown/Other Function
 Operating System:   Windows 7 SP1
 PHP Version:        5.3.10
 Block user comment: N
 Private report:     N

 New Comment:

No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Re-Opened". Thank you.




Previous Comments:
------------------------------------------------------------------------
[2012-02-13 20:26:42] mattfic...@php.net

I don't see any problem here. I get the output you expected.

I don't get a warning for file_put_contents(). On the 2nd+ runs I get a warning 
about directory existing.

I run it using 5.3.10-nts-vc9 and I get:

C:\61002>c:\php-5.3.10-nts-Win32-VC9-x86\php repro.php
Is Dir exists? No
Create Dir
Is Dir exists NOW? Yes
OK
C:\61002>c:\php-5.3.10-nts-Win32-VC9-x86\php repro.php
Is Dir exists? Yes
Create Dir

Warning: mkdir(): File exists in C:\61002\repro.php on line 7
Is Dir exists NOW? Yes
OK
C:\61002>

'file' gets created in directory 'g:\new' (I modified your script (only) to use 
g:\ instead of d:\ b/c on my machines d:\ is the CD-R drive).

I get the same results on both Win7sp1-x64 and Win7sp1-x86 (the 2 versions I 
tested).



That's all I did. Am I missing something you did to get a different result?

------------------------------------------------------------------------
[2012-02-07 11:00:19] feedbee at gmail dot com

Description:
------------
d:/link/ is a windows symlink to d:/a/b/c

mkdir('d:/link/../new') creates link in d:/ - that OK.

file_put_contents('d:/link/../new', 'OK'); tries to create file in d:/a/b 
(because d:/link/ resolved to d:/a/b/c, and d:/a/b/c/../new now points to 
d:/a/b/new).

This difference between mkdir and file_put_contents was not expected.

Test script:
---------------
<?php

$dirname = 'd:/link/../new';
$realDirname = 'd:/new';

echo "Is Dir exists? ", is_dir($realDirname) ? 'Yes' : 'No', PHP_EOL, 'Create 
Dir', PHP_EOL;
mkdir($dirname);
echo "Is Dir exists NOW? ", is_dir($realDirname) ? 'Yes' : 'No', PHP_EOL;
file_put_contents("$dirname/file", 'OK');
echo 'OK';

Expected result:
----------------
Is Dir exists? No
Create Dir
Is Dir exists NOW? Yes
OK

Actual result:
--------------
Is Dir exists? No
Create Dir
Is Dir exists NOW? Yes
<br />
<b>Warning</b>:  file_put_contents(d:/link/../new/file) [<a 
href='function.file-put-contents'>function.file-put-contents</a>]: failed to 
open stream: No such file or directory in <b>D:\test.php</b> on line 
<b>10</b><br />
OK


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



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=61002&edit=1

Reply via email to