PHP can't read files containing PHP code as te

2019-05-10 05:27发布

问题:

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

回答1:

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


回答2:

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.



回答3:

Hmm file_get_contents() is working for me. Is it issue only for fopen?

Edit: what error do you get exactly?



回答4:

Wadih M. solved the issue. PHP tags hides the whole tag-enclosed php source output in the browser, but View Source shows them. Thanks!



回答5:

I am using htmlspecialchars($line);

It solved the problem.



回答6:

rename the file read it get your data change them rerename your file :)