|
Posted by Puzzled on 10/19/05 15:23
Oli Filth wrote:
>Puzzled said the following on 18/10/2005 17:54:
>> This is a weird problem, but perhaps someone else has seen it before
>> (I hope!)
>>
>> If I use a fully qualified include call
>>
>> include ( 'http://localhost/subtree/filename.php')
>>
>> I get an 'undefined function' error when calling a routine that's
>> defined in that file.
>
>AAARGH! This question comes up practically every week!
>
>This is an absolute *HTTP* URL, not an absolute *filesystem* URL. So it
>obtains filename.php by performing an HTTP request to the specified
>server, which just happens to be "localhost" in this case.
>
>And of course, a server set up to parse and execute PHP files will parse
>and execute filename.php when it's requested, so all your include() call
>sees is the output result of filename.php.
Thanks much for your quick reply.
I think I must be missing something important still, because I don't
understand what you said. Check me on this, would you?
A URL is just another filesystem reference, but using a highly
generalized syntax that's independent of o/s and physical
location--like NFS, but more general. So any processing that would
be done or not done to a file would be independent of the type of
reference used to retrieve it.
When the php interpreter knows it's operating on an include file, it
should know enough not to start a new symbol table, but instead add
things like function definitions to the existing symbol table it
started building when it read up the outermost file.
But that doesn't appear to be what's happening. It looks to me as
though it's treating the .php extension as being more important than
the fact the file is being included, so instead of continuing the same
symbol table, it's building a special one for that file and then
discarding it.
Is that what's causing the problem, the fact that I'm using a .php
extension on the include file?
That would make a crazy sort of sense, since the php interpreter would
do its own filesystem fetches, but might hand any url reference, even
one for an include, off to Apache to satisfy. And somewhere in that
process, the fact that it's just an include file is getting pushed and
the file is being interpreted as though it were a completely new job.
Whereas if it had some .inc or .foo extension, Apache wouldn't try to
pass it through the interpreter, but would just hand it over.
still Puzzled, but struggling
--
(To mail me, please change .not.invalid to .net, first.
Apologies for the inconvenience.)
Navigation:
[Reply to this message]
|