Bekijk Volledige Versie : [php] include probleem
Paul van der Vlis
10/12/03, 15:00
Hoi,
Ik heb een raar probleem met include.
Ik wil een pagina inlezen in een variabele, zoiets:
$pagina1 = include ('pagina1.inc');
Maar dit gaat niet goed, in plaats daarvan geeft dit de inhoud van
pagina1.inc weer.
Ook dit werkt niet:
$pagina1 = "include ('pagina1.inc')";
Volgens de manual zou het gewoon moeten kunnen:
http://nl2.php.net/manual/nl/function.include.php
Iemand een idee wat er fout is? "pagina1.inc" is een php pagina (hij
begint met <?php ), maar heeft een .inc extentie.
Groetjes,
Paul.
Paul van der Vlis wrote:
> Maar dit gaat niet goed, in plaats daarvan geeft dit de inhoud van
> pagina1.inc weer.
>
> Ook dit werkt niet:
> $pagina1 = "include ('pagina1.inc')";
>
> Volgens de manual zou het gewoon moeten kunnen:
> http://nl2.php.net/manual/nl/function.include.php
>
> Iemand een idee wat er fout is? "pagina1.inc" is een php pagina (hij
> begint met <?php ), maar heeft een .inc extentie.
Misschien wordt *.inc niet herkend als een bestand dat geparst moet
worden door PHP? Als je Apache gebruikt, probeer eens iets als
AddType application/x-httpd-php .inc
toe te voegen aan een .htaccess of httpd.conf.
--
Raf
Op Wed, 10 Dec 2003 14:57:32 +0100 schreef Paul van der Vlis
<paul@vandervlis.nl>:
>Ik wil een pagina inlezen in een variabele, zoiets:
>$pagina1 = include ('pagina1.inc');
>
>Maar dit gaat niet goed, in plaats daarvan geeft dit de inhoud van
>pagina1.inc weer.
>
>Ook dit werkt niet:
>$pagina1 = "include ('pagina1.inc')";
>
>Volgens de manual zou het gewoon moeten kunnen:
>http://nl2.php.net/manual/nl/function.include.php
>
>Iemand een idee wat er fout is? "pagina1.inc" is een php pagina (hij
>begint met <?php ), maar heeft een .inc extentie.
>
$pagina1 = file('pagina1.inc')
http://nl.php.net/manual/nl/function.file.php
--
Greetz,
De Snor
Paul van der Vlis
10/12/03, 15:30
miseryman wrote:
> Paul van der Vlis wrote:
>
>
>>Maar dit gaat niet goed, in plaats daarvan geeft dit de inhoud van
>>pagina1.inc weer.
>>
>>Ook dit werkt niet:
>>$pagina1 = "include ('pagina1.inc')";
>>
>>Volgens de manual zou het gewoon moeten kunnen:
>>http://nl2.php.net/manual/nl/function.include.php
>>
>>Iemand een idee wat er fout is? "pagina1.inc" is een php pagina (hij
>>begint met <?php ), maar heeft een .inc extentie.
>
>
> Misschien wordt *.inc niet herkend als een bestand dat geparst moet
> worden door PHP?
Dat wordt inderdaad niet herkent als te parsen bestand, maar dat wil ook
(uit veiligheidsredenen). Ik wil dat het pas geparst wordt in het
bestand met de include.
Groetjes,
Paul.
Paul van der Vlis
10/12/03, 16:30
De Snor wrote:
> Op Wed, 10 Dec 2003 14:57:32 +0100 schreef Paul van der Vlis
> <paul@vandervlis.nl>:
>
>
>>Ik wil een pagina inlezen in een variabele, zoiets:
>>$pagina1 = include ('pagina1.inc');
>>
>>Maar dit gaat niet goed, in plaats daarvan geeft dit de inhoud van
>>pagina1.inc weer.
>>
>>Ook dit werkt niet:
>>$pagina1 = "include ('pagina1.inc')";
>>
>>Volgens de manual zou het gewoon moeten kunnen:
>>http://nl2.php.net/manual/nl/function.include.php
>>
>>Iemand een idee wat er fout is? "pagina1.inc" is een php pagina (hij
>>begint met <?php ), maar heeft een .inc extentie.
>
> $pagina1 = file('pagina1.inc')
> http://nl.php.net/manual/nl/function.file.php
Dit zet de gegevens in een array en niet in een string.
Via deze functie kwam ik bij file_get_contents() wat dat wel doet. Maar
daar zit ik met het probleem dat de php niet geparsed wordt.
Groet,
Paul.
Jan Ehrhardt
10/12/03, 17:00
Paul van der Vlis in nl.internet.www.server-side (Wed, 10 Dec 2003
15:28:43 +0100):
>Dat wordt inderdaad niet herkent^Hd als te parsen bestand, maar dat wil ik ook
>(uit veiligheidsredenen). Ik wil dat het pas geparst wordt in het
>bestand met de include.
Dat kun je toch ook anders regelen. Bijvoorbeeld:
Zet $includes = 1 in het bestand dat de *.inc aanroept
Begin de *.inc met: if (!$includes) die("In je dromen");
Jan
--
Look, Ma. No tables - http://www.steenbergen-stichting.nl/enbio.html
Daniel Tryba
10/12/03, 18:30
Paul van der Vlis <paul@vandervlis.nl> wrote:
> Ik wil een pagina inlezen in een variabele, zoiets:
> $pagina1 = include ('pagina1.inc');
>
> Maar dit gaat niet goed, in plaats daarvan geeft dit de inhoud van
> pagina1.inc weer.
Dat is precies wat include dient te doen.
> Ook dit werkt niet:
> $pagina1 = "include ('pagina1.inc')";
>
> Volgens de manual zou het gewoon moeten kunnen:
> http://nl2.php.net/manual/nl/function.include.php
Waar lees je dat? include() heeft geen return value!
Ik snap eigenlijk niet wat je wilt bereiken. Je wilt de "inhoud" van
pagina1.inc gebruiken als string in je script maar het moet wel de door
PHP geinterpreteerde "inhoud" van pagina1.inc zijn, maar .inc mag niet
als php worden geinterpreteerd?
Als dit inderdaad is wat je wilt (maar ik kan me niet voorstellen waarom
dit op zo'n omweg wilt doen). Dan moet je inderdaad file() of
aanverwanten gebruiken en dan de resulterende string eval-en. Maar als
er iets goor is dan is het het gebruik van eval.
--
Daniel Tryba
Paul van der Vlis
10/12/03, 18:45
Daniel Tryba wrote:
> Paul van der Vlis <paul@vandervlis.nl> wrote:
>
>>Ik wil een pagina inlezen in een variabele, zoiets:
>>$pagina1 = include ('pagina1.inc');
>>
>>Maar dit gaat niet goed, in plaats daarvan geeft dit de inhoud van
>>pagina1.inc weer.
>
>
> Dat is precies wat include dient te doen.
>
>
>>Ook dit werkt niet:
>>$pagina1 = "include ('pagina1.inc')";
>>
>>Volgens de manual zou het gewoon moeten kunnen:
>>http://nl2.php.net/manual/nl/function.include.php
>
>
> Waar lees je dat? include() heeft geen return value!
>
> Ik snap eigenlijk niet wat je wilt bereiken. Je wilt de "inhoud" van
> pagina1.inc gebruiken als string in je script maar het moet wel de door
> PHP geinterpreteerde "inhoud" van pagina1.inc zijn, maar .inc mag niet
> als php worden geinterpreteerd?
Ik wil niet dat mensen die pagina direct kunnen openen en dan de inhoud
van de variabelen zien.
Die include met resultaten wordt in allerlei pagina's gebruikt, maar ik
wil hem ook kunnen emailen. Om hem te kunnen emailen moet hij
geinterpreteerd in een variable komen. Misschien is het zo duidelijker ;-)
> Als dit inderdaad is wat je wilt (maar ik kan me niet voorstellen waarom
> dit op zo'n omweg wilt doen). Dan moet je inderdaad file() of
> aanverwanten gebruiken en dan de resulterende string eval-en.
Klinkt goed, ga ik bekijken.
> Maar als
> er iets goor is dan is het het gebruik van eval.
Waarom goor?
Groet,
Paul.
Daniel Tryba
10/12/03, 20:00
Paul van der Vlis <paul@vandervlis.nl> wrote:
>> Ik snap eigenlijk niet wat je wilt bereiken. Je wilt de "inhoud" van
>> pagina1.inc gebruiken als string in je script maar het moet wel de door
>> PHP geinterpreteerde "inhoud" van pagina1.inc zijn, maar .inc mag niet
>> als php worden geinterpreteerd?
>
> Ik wil niet dat mensen die pagina direct kunnen openen en dan de inhoud
> van de variabelen zien.
Dus laat je die pagina processen door php, de .inc vervangen door een
..php.
> Die include met resultaten wordt in allerlei pagina's gebruikt, maar ik
> wil hem ook kunnen emailen. Om hem te kunnen emailen moet hij
> geinterpreteerd in een variable komen. Misschien is het zo duidelijker ;-)
Aha. Maak er een php pagina van, door te kijken of __FILE__ overeenkomst
vertoont met $_SERVER['PHP_SELF'] kan je achterhalen of je pagina direct
wordt aangeroepen, andere benadering is door een script welke de include
file include() variabelen/constanten te zetten en aan de hand hiervan
deze afweging te maken. Als je de gerenderde output wilt hebben dan kan
je die als string ophalen met bv file/fopen|fgets te doen naar de http
url.
>> Dan moet je inderdaad file() of aanverwanten gebruiken en dan de
>> resulterende string eval-en.
>
> Klinkt goed, ga ik bekijken.
>
>> Maar als er iets goor is dan is het het gebruik van eval.
>
> Waarom goor?
Als je eval (denkt te) moet(en) gebruiken is je code fout.
--
Daniel Tryba
Paul van der Vlis
11/12/03, 10:30
Daniel Tryba wrote:
> Paul van der Vlis <paul@vandervlis.nl> wrote:
>
>>>Ik snap eigenlijk niet wat je wilt bereiken. Je wilt de "inhoud" van
>>>pagina1.inc gebruiken als string in je script maar het moet wel de door
>>>PHP geinterpreteerde "inhoud" van pagina1.inc zijn, maar .inc mag niet
>>>als php worden geinterpreteerd?
>>
>>Ik wil niet dat mensen die pagina direct kunnen openen en dan de inhoud
>>van de variabelen zien.
>
> Dus laat je die pagina processen door php, de .inc vervangen door een
> .php.
Normaal parst de aanroepende pagina de php code.
>>Die include met resultaten wordt in allerlei pagina's gebruikt, maar ik
>>wil hem ook kunnen emailen. Om hem te kunnen emailen moet hij
>>geinterpreteerd in een variable komen. Misschien is het zo duidelijker ;-)
>
> Aha. Maak er een php pagina van, door te kijken of __FILE__ overeenkomst
> vertoont met $_SERVER['PHP_SELF'] kan je achterhalen of je pagina direct
> wordt aangeroepen, andere benadering is door een script welke de include
> file include() variabelen/constanten te zetten en aan de hand hiervan
> deze afweging te maken. Als je de gerenderde output wilt hebben dan kan
> je die als string ophalen met bv file/fopen|fgets te doen naar de http
> url.
Dat lijkt inderdaad een methode, maar liever zou ik een .inc pagina
gebruiken (gewoon omdat alle includes bij mij een .inc achtervoegsel
hebben).
>>>Dan moet je inderdaad file() of aanverwanten gebruiken en dan de
>>>resulterende string eval-en.
>>
>>Klinkt goed, ga ik bekijken.
>>
>>>Maar als er iets goor is dan is het het gebruik van eval.
>>
>>Waarom goor?
>
> Als je eval (denkt te) moet(en) gebruiken is je code fout.
Ik kan me daar iets onder voorstellen, maar je maakt niet duidelijk of
en zo ja waarom het gebruik van die functie af te raden is.
Groetjes,
Paul.
Op Thu, 11 Dec 2003 10:18:17 +0100 schreef Paul van der Vlis
<paul@vandervlis.nl>:
<knip>
>Dat lijkt inderdaad een methode, maar liever zou ik een .inc pagina
>gebruiken (gewoon omdat alle includes bij mij een .inc achtervoegsel
>hebben).
>
Ooit wel eens ergens gelezen dat *.inc beveiligingsproblemen kan
opleveren en dat het beter is *.php of *.inc.php te gebruiken.
Ik meen dat het iets te maken had met dat de broncode zichtbaar was.
--
Greetz,
De Snor
Daniel Tryba
11/12/03, 11:45
Paul van der Vlis <paul@vandervlis.nl> wrote:
[.inc files met php code]
> Dat lijkt inderdaad een methode, maar liever zou ik een .inc pagina
> gebruiken (gewoon omdat alle includes bij mij een .inc achtervoegsel
> hebben).
Lekker, ik mag hopen dat je een hoging hebt gedaan om ervoor te zorgen
dat die dingen dus niet voor gebruikers toegangelijk zijn!
Maar nu span ik je probleem al weer niet meer. Je hebt 1 pagina die een
include file aanroept en je wilt de gerenderde output van die include
file ook nog eens als mail kunnen versturen? Dan heb je toch gewoon 2
scripts die beide de zelfde include aanroepen.
[eval is evil]
>> Als je eval (denkt te) moet(en) gebruiken is je code fout.
>
> Ik kan me daar iets onder voorstellen, maar je maakt niet duidelijk of
> en zo ja waarom het gebruik van die functie af te raden is.
Tsja, eval is voor mij het zelfde als goto, ik mis goto afentoe en ga
dan vloeken over het gemis (zeker aangezien een switch inprincipe een
goto constructie is), dan denk ik even na en zie de goto-loze oplossing
die ook nog eens beter leesbaar is.
eval is moeilijk te debuggen, een klein foutje en je hangt.
Dynamische funties creeren:
Op de php eval ref pagina staat bv dat je het handig kan gebruiken om
code in een database op te slaan, het lijkt me toch een stuk
consistenter om alleen de data in een database op te slaan en daarvoor
dus functies/classes te hebben als je er iets mee moet doen. Als je aan
je datastructuur gaat rotzooien zal je inderdaad je functies moeten
aanpassen, andersom hoeft dat wellicht weer niet.
Ik heb zelf een keer gedacht dat ik eval miste (in java), maar gelukkig
bleek dat mijn eigen onkunde te zijn :)
--
Daniel Tryba
Paul van der Vlis
11/12/03, 15:00
De Snor wrote:
> Op Thu, 11 Dec 2003 10:18:17 +0100 schreef Paul van der Vlis
> <paul@vandervlis.nl>:
>
> <knip>
>
>>Dat lijkt inderdaad een methode, maar liever zou ik een .inc pagina
>>gebruiken (gewoon omdat alle includes bij mij een .inc achtervoegsel
>>hebben).
>>
>
> Ooit wel eens ergens gelezen dat *.inc beveiligingsproblemen kan
> opleveren en dat het beter is *.php of *.inc.php te gebruiken.
> Ik meen dat het iets te maken had met dat de broncode zichtbaar was.
Ja, je moet er daarom geen paswoorden in zetten. Maar dat doe ik ook niet.
Groet,
Paul.
Paul van der Vlis
11/12/03, 15:15
Daniel Tryba wrote:
> Paul van der Vlis <paul@vandervlis.nl> wrote:
> [.inc files met php code]
>
>>Dat lijkt inderdaad een methode, maar liever zou ik een .inc pagina
>>gebruiken (gewoon omdat alle includes bij mij een .inc achtervoegsel
>>hebben).
>
> Lekker, ik mag hopen dat je een hoging hebt gedaan om ervoor te zorgen
> dat die dingen dus niet voor gebruikers toegangelijk zijn!
Ik begrijp je niet helemaal. Het gaat me erom dat de inhoud van de
variabelen niet zichtbaar is.
> Maar nu span ik je probleem al weer niet meer. Je hebt 1 pagina die een
> include file aanroept en je wilt de gerenderde output van die include
> file ook nog eens als mail kunnen versturen? Dan heb je toch gewoon 2
> scripts die beide de zelfde include aanroepen.
Dat wil ik dus graag bereiken, maar lukt nog niet erg (zonder eval). In
de php pagina's roep ik de include aan op een dergelijke manier:
<html>
blabla
<?php include('include.inc'); ?>
blabla
</html>
Maar in die email moet ik het bestand in een variabele zien te krijgen,
dat is dus wat anders. Daar is de situatie zoiets:
$body="blabla
blabla
<?php include('include.inc'); ?>
blabla
blabla";
En dat lukt niet.
> [eval is evil]
>
>>>Als je eval (denkt te) moet(en) gebruiken is je code fout.
>>
>>Ik kan me daar iets onder voorstellen, maar je maakt niet duidelijk of
>>en zo ja waarom het gebruik van die functie af te raden is.
>
> Tsja, eval is voor mij het zelfde als goto, ik mis goto afentoe en ga
> dan vloeken over het gemis (zeker aangezien een switch inprincipe een
> goto constructie is), dan denk ik even na en zie de goto-loze oplossing
> die ook nog eens beter leesbaar is.
>
> eval is moeilijk te debuggen, een klein foutje en je hangt.
Aha. Ik merk dat zo'n email in een variabele ook moeilijk debuggen is.
> Dynamische funties creeren:
> Op de php eval ref pagina staat bv dat je het handig kan gebruiken om
> code in een database op te slaan, het lijkt me toch een stuk
> consistenter om alleen de data in een database op te slaan en daarvoor
> dus functies/classes te hebben als je er iets mee moet doen. Als je aan
> je datastructuur gaat rotzooien zal je inderdaad je functies moeten
> aanpassen, andersom hoeft dat wellicht weer niet.
>
> Ik heb zelf een keer gedacht dat ik eval miste (in java), maar gelukkig
> bleek dat mijn eigen onkunde te zijn :)
Ik zal nog wat verder zoeken ;-)
Groet,
Paul.
Daniel Tryba
11/12/03, 16:15
Paul van der Vlis <paul@vandervlis.nl> wrote:
>> Lekker, ik mag hopen dat je een hoging hebt gedaan om ervoor te zorgen
>> dat die dingen dus niet voor gebruikers toegangelijk zijn!
>
> Ik begrijp je niet helemaal. Het gaat me erom dat de inhoud van de
> variabelen niet zichtbaar is.
Dat doe je door het ding .php te noemen (of iets anders dat als php
geparsed moet worden of juist een foutmelding geeft).
>> Maar nu span ik je probleem al weer niet meer. Je hebt 1 pagina die een
>> include file aanroept en je wilt de gerenderde output van die include
>> file ook nog eens als mail kunnen versturen? Dan heb je toch gewoon 2
>> scripts die beide de zelfde include aanroepen.
>
> Dat wil ik dus graag bereiken, maar lukt nog niet erg (zonder eval). In
> de php pagina's roep ik de include aan op een dergelijke manier:
>
> <html>
> blabla
> <?php include('include.inc'); ?>
> blabla
> </html>
>
> Maar in die email moet ik het bestand in een variabele zien te krijgen,
> dat is dus wat anders. Daar is de situatie zoiets:
>
> $body="blabla
> blabla
> <?php include('include.inc'); ?>
> blabla
> blabla";
>
> En dat lukt niet.
Goh! je creert een string. Dat werkt perfect. Maar is niet het resultaat
wat jij wilt. Maar zoals al zo vaak in deze thread gezegt is: in het 2de
geval moet je file/fopen/etc gebruiken.
BTW als je de php include refpagina goed had gelezen zou je het volgende
zijn opgevallen:
<q src='http://nl.php.net/include/'>
A few other ways to "include" files into variables are with fopen(),
file() or by using include() along with Output Control Functions.
</q>
Maar wat staat er nu eigenlijk in die include.inc? Het zou allemaal wat
makkelijker lopen indien je voorbeelden geeft met code en uitleg.
Mijn vermoeden is dat je aanpak fundamenteel fout is, begin eens met het
scheiden van data en code en structuur (bv het MCV principe):
-de include file dient alleen data te bevatten (functies/vars/consts/etc).
-de daadwerkelijke php paginas gebruiken deze data.
dus bv:
<?php
include('inc');
?>
<html>
<?php echo $title;?>
<body>
<?php echo renderbody();?>
</body>
</html>
en
<?php
include('inc');
$body='blabla'.$renderbody().'blabla';
mail($body);
?>
Jij wilt schijnbaar include files als templates gebruiken en dan die
templates nog eens op verschillende wijze gebruiken. Het is wellicht
verstandig om even de moeite te nemen een van de velen PHP template
engines te bestuderen en te gaan gebruiken (persoonlijk vind ik smarty
wel geschikt).
>> eval is moeilijk te debuggen, een klein foutje en je hangt.
>
> Aha. Ik merk dat zo'n email in een variabele ook moeilijk debuggen is.
>
Zend heetf een ontwikkelomgeving met debugger. Dat kan enorm helpen.
--
Daniel Tryba