Re: use GET in include [message #174513 is a reply to message #174505] |
Wed, 15 June 2011 12:01 |
Denis McMahon
Messages: 634 Registered: September 2010
Karma:
|
Senior Member |
|
|
On Wed, 15 Jun 2011 10:04:08 +0200, Erwin Moller wrote:
> 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.
Erwin
If his basic requirement is to make variables from including file
available in included file, then surely any variable that's set in the
including file before the include occurs will be available to the
included code?
eg:
includer.php:
<?php
// including file
$value = "text";
include "included.php";
?>
included.php:
<?php
if (!isset($value)) $value="\$value was not set";
echo $value . "\n";
?>
and testing:
$php includer.php
text
$
although it would probably be a good idea to use:
if (!isset($var)) $var=default_value;
in included.php for every expected var.
Rgds
Denis McMahon
|
|
|