use GET in include [message #174502] |
Wed, 15 June 2011 04:09 |
cerr
Messages: 33 Registered: September 2010
Karma: 0
|
Member |
|
|
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
|
|
|
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: 0
|
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
|
|
|
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: 0
|
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
|
|
|
Re: use GET in include [message #174518 is a reply to message #174513] |
Wed, 15 June 2011 13:21 |
Erwin Moller
Messages: 228 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 6/15/2011 2:01 PM, Denis McMahon wrote:
> 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
>
Hello Dennis,
> 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?
Absolutely. It can be done. Hence my option 2). ;-)
I think it is just ugly.
Ugly because the included file depends on variables outside itself.
Compared to using a function or class it is needlessly fragile.
(At least, I do not see any advantages doing it that way.)
>
> 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.
Yes, I know the approach. Used it a few times myself in the past, but
nowadays I think it is very ugly. ;-)
Regards,
Erwin Moller
>
> Rgds
>
> Denis McMahon
--
"That which can be asserted without evidence, can be dismissed without
evidence."
-- Christopher Hitchens
|
|
|
Re: use GET in include [message #174524 is a reply to message #174518] |
Wed, 15 June 2011 16:02 |
Jerry Stuckle
Messages: 2598 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 6/15/2011 9:21 AM, Erwin Moller wrote:
> On 6/15/2011 2:01 PM, Denis McMahon wrote:
>
> Hello Dennis,
>
>
>> 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?
>
> Absolutely. It can be done. Hence my option 2). ;-)
>
> I think it is just ugly.
> Ugly because the included file depends on variables outside itself.
>
> Compared to using a function or class it is needlessly fragile.
> (At least, I do not see any advantages doing it that way.)
>
>
You are correct, Erwin. Making the code in the included file a function
or a class decouples it from the rest of the logic. This makes the code
more robust, easier to maintain and, if coded correctly, reusable.
Definitely an advantage over just including a file which then depends on
other variables outside of itself.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
|
|
|
Re: use GET in include [message #174530 is a reply to message #174505] |
Thu, 16 June 2011 04:58 |
cerr
Messages: 33 Registered: September 2010
Karma: 0
|
Member |
|
|
On Jun 15, 1:04 am, Erwin Moller
<Since_humans_read_this_I_am_spammed_too_m...@spamyourself.com> 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 implemented option 2 so far and it works well - why would thast be
bad anyways?
Thanks! :)
Ron
|
|
|
Re: use GET in include [message #174532 is a reply to message #174530] |
Thu, 16 June 2011 11:14 |
Jerry Stuckle
Messages: 2598 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 6/16/2011 12:58 AM, cerr wrote:
> On Jun 15, 1:04 am, Erwin Moller
> <Since_humans_read_this_I_am_spammed_too_m...@spamyourself.com> 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 implemented option 2 so far and it works well - why would thast be
> bad anyways?
> Thanks! :)
>
> Ron
The code now depends on variables set in other files, making it harder
to maintain and less reusable.
Functions are much better and cleaner.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
|
|
|