I've stumbled upon the following pecularity:
$handle = fopen(realpath("../folder/files.php"), "r");
can't read a file, but as soon as I remove php tags from the file,
it becomes readable and my scripts prints non-empty file content on the page.
Also, file.php is never ever executed, so I wonder why it is the problem.
I guess somehow Apache or PHP doesn't let read files containing php tags PHP as just text.
How can I enable it for my particular file (course doing it globally would be unsecure)?
Using PHP 5.2.x and Apache 2.0
I got it. I was using Google chrome to debug the page, and I realized that when viewing the source, Chrome hides PHP tags for some reason. I ran the same test on Firefox, and viewing the source proved that everything was okay.
Here are the test details:
Code:
$fh = fopen("test.php","r");
while ($line = fgets($fh)){
echo $line;
}
File to be read (test.php):
testing <?php testing2 ?> testing3
Rendering (on both Chrome and firefox):
testing testing3
View source (using firefox):
testing <?php testing2 ?> testing3
View source (using Chrome - source of my mistake):
testing testing3
Are you sure you're interpreting the output correctly? If you print the file contents directly to your page output, a browser won't display text inside angle brackets because it thinks it's a tag. Serve your content as text/plain
, or use your browser's "view source" command to make sure you're looking at what's really there, and not just what the browser chose to display.
Hmm file_get_contents() is working for me. Is it issue only for fopen?
Edit: what error do you get exactly?
Wadih M. solved the issue. PHP tags hides the whole tag-enclosed php source output in the browser, but View Source shows them. Thanks!
I am using htmlspecialchars($line);
It solved the problem.
rename the file
read it
get your data
change them
rerename your file :)