RE: [PHP] include-problem
| From: | Wouter van Vliet | Date: | Mon, 01 Dec 2003 12:15:44 +0000 |
| Subject: | RE: [PHP] include-problem | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-171455@lists.php.net to get a copy of this message | ||
Rasmus Lerdorf wrote:
> On Mon, 1 Dec 2003, Sophie Mattoug wrote:
>> Victor Spång Arthursson wrote:
>>
>>> Hi!
>>>
>>> I'm having a problem with including files. What I want to achieve is
>>> to execute a PHP-script on another server, and then to include the
>>> result (which will be XML-output) in another PHP-script (currently
>>> on my local computer).
>>>
>>> On the server I have the file
> http://server.com/test/echo.php with
>>> the content
>>>
>>> ---
>>> <?php
>>> echo 'xyz';
>>>>
>>> ---
>>>
>>> Locally I've a file with the following content:
>>>
>>> ---
>>> <?php
>>> echo "!!!";
>>> include ("http://server.com/test/echo.php");
>>> echo "???";
>>>>
>>> ---
>>>
>>> I was expecting the output from my locally testfile to be something
>>> like:
>>>
>>> ---
>>> !!!???
>>> ---
>>>
>>> but rather it is
>>>
>>> ---
>>> !!!xyz???
>>> ---
>>>
>>> I've also tried with a $fp = readfile("http
") with the same result,
>>> which is output of the echo-statement in the remote file which I am
>>> expecting to be evaluated remotely.
>>>
>>> How can I do to include the PHP-script and have it to be ran before
>>> it is included?
>>>
>>> Sincerely
>>>
>>> Victor
>>
>>
>> This is a perfectly normal behaviour ! See www.php.net/include to
>> understand what this function does. (comparing to
>> www.php.net/require)
>
> It's perfectly normal, yes, but it has nothing to do with include vs.
> require.
>
> I guess I don't really understand the question. I assume you
> realize that an include 'http://server.com/file.php'
> is going
> to send an HTTP request to server.com asking for file.php and
> if server.com is configured to execute php for file.php then
> what will come back across the wire is the result of php
> running the script in file.php. As such, when you do:
>
> echo '!!!';
> include 'http://server.com/file.php';
> echo '???';
>
> you will of course see: !!!xyz??? because that is exactly
> what you have asked it to do. Print !!!, then send an HTTP
> request to server.com and include the output of that script
> right here, and finally print out ???.
> So I don't understand why this output is surprising you and I
> don't understand your question about expecting it to be
> evaluated remotely.
> file.php was of course evaluated remotely on server.com. If
> file.php had written something to the filesysts, for example,
> then that something would be on server.com not on your server.
>
> -Rasmus
You can use the output buffer functions to catch the "xyz" into a var:
<?php
print "!!!";
ob_start();
include 'http://server.com/test/echo.php';
$XML = ob_get_clean(); // or use ob_get_contents(); and ob_end_clean() for
PHP < 4.3
print "???";
print '[Between this you'll get your XYZ]';
print $XML;
print '[Between this you'll get your XYZ]';
?>
Hope it helps ya,
Wouter