Bug #69990 [Com]: file_get_contents broken on symlinks

From: Date: Wed, 02 Sep 2015 13:08:17 +0000
Subject: Bug #69990 [Com]: file_get_contents broken on symlinks
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-195699@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=69990&edit=1

 ID:                 69990
 Comment by:         rombismith at cuvox dot de
 Reported by:        michael dot mckeever at bosch dot com
 Summary:            file_get_contents broken on symlinks
 Status:             Open
 Type:               Bug
 Package:            *Directory/Filesystem functions
 Operating System:   Windows 7
 PHP Version:        Irrelevant
 Block user comment: N
 Private report:     N

 New Comment:

We're having exactly the same issue, but not on a Win7 but on a WinServer 2008 and WinServer
2008R2.


Previous Comments:
------------------------------------------------------------------------
[2015-07-03 18:01:12] michael dot mckeever at bosch dot com

Description:
------------
I used:
- php 5.5.26 ts 32bit VC11 as SAPI
- apache 2.4.12 32bit VC11
- windows 7 sp1
On Windows 7 (have only tested it on Windows 7) the file_get_contents function does sometimes return
false instead of returning the actual file content when used on symlinks. This happens only in
conjunction with Apache. The cli versions are not affected. All types of links are affected:
- mklink
- mklink /J
- mklink /D

To repoduce the bug create the three symlink types above to a file of your choice containing the
string "asdf" and apply the paths to your the test script below and use the abs.exe
command (shipped with apache) to simulate 800 request with a concurency of 200 users:
abs.exe -n 800 -c 200 http://localhost/yourTestScript.php

If needed I can provide a fully virtual machine with the whole reproducable scenario in it (virtual
box).

Test script:
---------------
$files =
[
	"file" => "C:/Development/phpdir/phpfile.txt",
	"filelink" => "C:/Development/phpdir/phpfilelink.txt",
	"dirlink" => "C:/Development/phpdirlink/phpfile.txt",
	"dirjunc" => "C:/Development/phpdirjunc/phpfile.txt",
];

foreach($files as $linkType => $filePath) {
	if( @file_get_contents($filePath) !== "asdf" ) {
		if( @file_get_contents("C:/Development/$linkType") === false )
			file_put_contents("C:/Development/$linkType", 0);
		file_put_contents("C:/Development/$linkType",
((int)file_get_contents("C:/Development/$linkType"))+1);
	}
}

Expected result:
----------------
No files should appear in the directory "C:/Development/".

Actual result:
--------------
There are laying three files namely 'filelink', 'dirlink' and
'dirjunc' containing the number of file_get_contents failing to succeed.


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



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


Thread (7 messages)

« previous php.bugs (#195699) next »