Re: use GET in include [message #174505 is a reply to message #174502] |
Wed, 15 June 2011 08:04 |
Erwin Moller
Messages: 228 Registered: September 2010
Karma:
|
Senior Member |
|
|
On 6/15/2011 6:09 AM, cerr wrote:
> Hi There, I would like to pass variables with GET to a file i include
> in my source file but it doesn't work, I get something like
> "Warning: include(./getfile.php?dir=headers11) [function.include]:
> failed to open stream: No such file or directory in /mnt/stor5-wc2-
> dfw1/479383/493261/www.quaaoutlodge.com/web/content/themes/Quaaout11-
> dev/photoshuffler.js.php on line 29"
> But when I remove the "?dir=" part from the url it works just fine.
> What would that be?
> Line 29 looks like:
> blablabla<?php include "./getfile.php?dir=".$_GET['dir'];?>
>
> Thank you for hints& suggestions!
>
> Ron
Hi Ron,
You are confusing a http request with an include.
They are different beasts.
A http request look like:
http://www.example.com/yourphpfile.php
and you can add info to an URL by adding name/value pairs, like this:
http://www.example.com/yourphpfile.php?name=ron&favcol=blue
In $_GET you will find 2 keys:
$_GET["name"] will contain ron
$_GET["favcol"] will contain blue
Now to the include:
If you include a file, you include a file. :-)
No http or apache involved. So no GET superglobal is set. (And that is
the reason things don't work as you expected.)
Unless you use http-wrappers, like
include ("http://www.example.com/getfile.php?file=...");
WARNING: the above is REALLY poor programming to get information into
your include file: you make a trip using the http-protocol/apache/new
PHP instance/etc to get the info into your included file).
How to solve this?
Depending on your situation, in general:
1) Make the included file contain a function or an class, and use that
function or class from your main file.
Something like (for Object):
require_once ("class_myFileFetcher.php");
$myFileFetcher = new FileFetcher();
$myFileFetcher->setFile(..);
$myFileFetcher->setHearder(..);
$myFileFetcher->stream(..);
The above is just fantasycode of course.
Or with a function:
require_once ("myfunctions/myFileFetcherFunction.php");
fetchFileAndStream("/some/path/some/file");
option 2 (ugly in my opinion):
Simply set a variable, then the include. Let the code in the include use
that variable.
So:
$theUglyWayFileName = "/some/path/some/file";
require_once ("myFileFetcher.php");
And let the code in myFileFetcher.php use the variable named:
$theUglyWayFileName.
I advise you to both avoid http-wrappers and also to avoid option 2.
Go with a function or a class.
Good luck.
Regards,
Erwin Moller
--
"That which can be asserted without evidence, can be dismissed without
evidence."
-- Christopher Hitchens
|
|
|