PHP include

Pagina: 1
Acties:
  • 1.319 views

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 348660

Topicstarter
EDIT: OP aangepast, het was niet duidelijk voor sommige leden.

PHP include
Alle pagina's hebben een sidebar. Die sidebar bevat een block. Deze block wordt geinclude door een PHP bestandje. In dit bestandje staan 2 url's. Deze heb ik later op de FTP gezet en nu zijn ze zichtbaar op de startpagina van mijn website.

Als ik nu nog een pagina neerzet met <?php include ("files/pages.php"); ?> dan zijn die 2 url's ook zichtbaar op die aangemaakte pagina.

Het probleem
Nou is het zo dat ik voor elke pagina die ik aanmaak voor de site (disclaimer, contact, artikelen etc.) een aparte map wil aanmaken. In de map waar alle andere mapjes staan is er ook een map die files heet. Daar komen alle bestanden zoals include (waaronder dus ook mijn 'pages.php') en CSS bestanden. Dan heb ik allemaal mapjes, alleen de startpagina staat niet in een map. Maar omdat de map files 9met 'pages.php') niet in de map Disclaimer staat kan de pagina die zich in de map Disclaimer bevindt de map/bestand niet vinden waardoor hij niet kan includen.

[ Voor 87% gewijzigd door Anoniem: 348660 op 29-03-2010 17:31 ]


Acties:
  • 0 Henk 'm!

  • korgakos
  • Registratie: April 2008
  • Laatst online: 06-04 15:40
Ff google?

LINK

If the included file is one level higher than the web page with the inclusion directive you can use:

CODE
include('../header.php');

and if it's two levels higher:
CODE
include('../../header.php');

See also http://htmlhelp.com/faq/html/basics.html#relative-url

Acties:
  • 0 Henk 'm!

  • berendhaan
  • Registratie: Oktober 2006
  • Laatst online: 02-05 11:08
Naar mijn weten kun je geen remote PHP scripts inladen via Include.
http://php.net/manual/en/function.include.php

Acties:
  • 0 Henk 'm!

Anoniem: 28557

http://nl.php.net/manual/en/function.include.php
Onder het tweede codeblokje:
If "URL fopen wrappers" are enabled in PHP (which they are in the default configuration), you can specify the file to be included using a URL (via HTTP or other supported wrapper - see List of Supported Protocols/Wrappers for a list of protocols) instead of a local pathname.

Acties:
  • 0 Henk 'm!

  • sander85
  • Registratie: Mei 2003
  • Laatst online: 02-05 19:42
Let wel op dat als je include naar een website dat je eigenlijk de uitvoer van, in jouw geval http://www.windows7tweaking.nl/files/pages.php, gaat gebruiken voor de include. Niet de code binnen het bestand pages.php. (In tegenstelling tot de "include files/pages.php" want die include gaat niet via de webserver).

Tevens zie ik op http://php.net/manual/en/function.include.php dat dit moet zijn aangezet in PHP om een HTTP-adres te includen. (Zie ook de reactie van jeroenr)

Als je een HTTP-adres wilt includen zal je je adres wel moeten laten beginnen met http://. Anders zal PHP in jouw geval gaan zoeken naar de map www.windows7.tweaking.nl/files.

Verder zou ik een include via HTTP afraden denk ik, tenzij het echt niet anders kan. Mocht je ooit veel bezoekers krijgen dan krijgt je webserver het wat zwaarder te verduren met zo'n HTTP-include. Aangezien je voor elke bezoeker minimaal 2 maal de webserver aanroept via die include. Eenmaal als de bezoeker de site binnenkomt en nogmaals om die pagina op te halen via http://www.windows7tweaking.nl/files/pages.php.

Beter is het om de include gewoon op file-niveau uit te voeren. Dan belast je enkel het filesysteem.

Het riekt niet echt naar efficientie. ;) (Ik ben niet heel bekend met includen op deze manier.)

[ Voor 28% gewijzigd door sander85 op 29-03-2010 15:30 ]


Acties:
  • 0 Henk 'm!

Anoniem: 348660

Topicstarter
Korgakos: Dit werkte niet. (Doesn't work)

Berendhaan: Jawel hoor, je kunt andere pagina's inladen. Ga maar naar mijn website (in het blok nieuws), die is "geinclude".

Sander85: Mijn adres begon altijd met http: maar dat maakte niks uit.

[ Voor 17% gewijzigd door Anoniem: 348660 op 29-03-2010 15:26 ]


Acties:
  • 0 Henk 'm!

  • korgakos
  • Registratie: April 2008
  • Laatst online: 06-04 15:40
Oh je wilt echt een externe site includen... (lees php inhoud)

dat gaat inderdaad niet werken, alleen de html/javascript zul je dan includen...


edit...ik denk toch dat je vraagstelling mij niet duidelijk genoeg is..Wat wil je nu precies bereiken? Wat lukt nu niet? wat heb je geprobeerd?

[ Voor 39% gewijzigd door korgakos op 29-03-2010 15:27 ]


Acties:
  • 0 Henk 'm!

Anoniem: 348660

Topicstarter
Ja, tis tekst gemaakt in kladblok verder niks. (Mocht er ooit een foutje in zitten hoef ik niet constant elke pagina aan te passen)

EDIT: Ik wil alle pagina's (de startpagina, de nieuws pagina etc.) wil ik in 1 keer kunnen aanpassen. Ik wil bijvoorbeeld nieuwe nieuwsberichten in de sidebar zetten, en dat moet dan op de hele site zichtbaar zijn. Ik kan niet alle pagina's afzonderlijk aanpassen. Kost namelijk tijd.

Het lukt niet om een url in mijn PHP include te zetten. Wel als het PHP bestandje in dezelfde map staat.

[ Voor 63% gewijzigd door Anoniem: 348660 op 29-03-2010 15:30 ]


Acties:
  • 0 Henk 'm!

  • korgakos
  • Registratie: April 2008
  • Laatst online: 06-04 15:40
Oke je hebt dus een template met daarin een apart gedeelte wat kan veranderen.
De content wat hierin komt verkrijg je op het moment met een include, toch?

Je hebt je content gewoon als text ergens in een bestandje neergezet, en die wil je includen.

Nu lukt het je om 1 tekst te includen, maar je wilt hem niet in dezelfde map plaatsen.

Is dit het probleem?

Acties:
  • 0 Henk 'm!

Anoniem: 348660

Topicstarter
Klopt,

Zie startpagina, daar lukt het namelijk wel om te includen omdat ik via de startpagina op FTP (in include) kan verwijzen naar de map files. (Files en de startpagina staan in dezelfde map, in mijn geval staan ze in httpdocs). Alleen als ik een aparte map aanmaak met bijvoorbeeld de pagina Disclaimer dan wordt de tekst in het include bestandje niet geinclude omdat de include niet kan verwijzen naar files omdat het niet meer in verband staat met files.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 01-05 17:00

Janoz

Moderator Devschuur®

!litemod

Ten eerste heeft dit niks met Software Engineering & Architecture te maken. Het topic verplaats ik daarom naar programming. Verder staat alles omtrent het includen van een bestand middels een url keurig beschreven in het linkje dat berendhaan aangehaald heeft. Ik snap dus niet precies wat je probleem nu is.

Heb je twee verschillende domeinen en wil je op 1 domein de content hebben die je op het andere domein ook inlaad? Daar lijkt het wel op wanneer je het over inladen via de http handler hebt. Echter heb je het verder enkel over je windows7 site en de verschillende pagina's op die site.

Ik wil je daarom vragen je probleem wat duidelijker uit te leggen. Geef even een schematische weergave van de directory structuur. Waar je welke bestanden hebt staan en welke bestanden je wilt includen in welke andere bestanden.

Tot slot is het handiger om te vertellen wat er gebeurt en waarin dit verschilt met hetgeen je verwacht. Geef aan of je een foutmelding krijgt en vertel ook welke dit is. Alleen maar zeggen "Werkt niet" hebben we helemaal niks aan.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 12:47

Matis

Rubber Rocket

Anoniem: 348660 schreef op maandag 29 maart 2010 @ 15:37:
Klopt,

Zie startpagina, daar lukt het namelijk wel om te includen omdat ik via de startpagina op FTP (in include) kan verwijzen naar de map files. (Files en de startpagina staan in dezelfde map, in mijn geval httpdocs). Alleen als ik een aparte map aanmaak met bijvoorbeeld de pagina Disclaimer dan wordt de tekst in het include bestandje niet geinclude omdat de include niet kan verwijzen naar files omdat het niet meer in verband staat met files.
Dat is duidelijk, je kunt natuurlijk ook een include-path toevoegen aan je script. Op die manier kun je gewoon vanuit je root blijven includen, ongeacht in welke subdirectory je zit.

http://php.net/manual/en/function.set-include-path.php

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • korgakos
  • Registratie: April 2008
  • Laatst online: 06-04 15:40
Laat eens zien wat je mappenstructuur is en wat je hebt geprobeerd.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Je moet geen URL gebruiken als je wil includen van hetzelfde domein, dat werkt alleen maar trager omdat hij dan de bestanden via http gaat binnenhalen. Specificeer gewoon het absolute pad, of gebruik "../" als het een map hoger staat.
Anoniem: 348660 schreef op maandag 29 maart 2010 @ 15:23:
Korgakos: Dit werkte niet. (Doesn't work)
Geef dan eens aan wát er niet werkt. Foutmeldingen (zet het niveau op E_ALL), logs...

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 12:47

Matis

Rubber Rocket

Wat de TS volgens mij doet, is middels een mappenstructuur SEO-friendly URL's te krijgen. Het is natuurlijk geen oplossing, maar IMO een nettere work-around om middels htaccess SEO-friendly URL's te krijgen, opdat je php-bestanden in de zelfde map kunnen staan, zonder dat je losse mappen etc. moet aanmaken.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

Anoniem: 348660

Topicstarter
Om er even duidelijkheid in te brengen:

PHP include
Alle pagina's hebben een sidebar. Die sidebar bevat een block. Deze block wordt geinclude door een PHP bestandje. In dit bestandje staan 2 url's. Deze heb ik later op de FTP gezet en nu zijn ze zichtbaar op de startpagina van mijn website.

Als ik nu nog een pagina neerzet met <?php include ("files/pages.php"); ?> dan zijn die 2 url's ook zichtbaar op die aangemaakte pagina.

Het probleem
Nou is het zo dat ik voor elke pagina die ik aanmaak voor de site (disclaimer, contact, artikelen etc.) een aparte map wil aanmaken. In de map waar alle andere mapjes staan is er ook een map die files heet. Daar komen alle bestanden zoals include (waaronder dus ook mijn 'pages.php') en CSS bestanden. Dan heb ik allemaal mapjes, alleen de startpagina staat niet in een map. Maar omdat de map files 9met 'pages.php') niet in de map Disclaimer staat kan de pagina die zich in de map Disclaimer bevindt de map/bestand niet vinden waardoor hij niet kan includen.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Matis schreef op maandag 29 maart 2010 @ 15:47:
Wat de TS volgens mij doet, is middels een mappenstructuur SEO-friendly URL's te krijgen. Het is natuurlijk geen oplossing, maar IMO een nettere work-around om middels htaccess SEO-friendly URL's te krijgen, opdat je php-bestanden in de zelfde map kunnen staan, zonder dat je losse mappen etc. moet aanmaken.
Ah ja, dat maak ik hier nu ook uit op:
Anoniem: 348660 schreef op maandag 29 maart 2010 @ 15:37:
Alleen als ik een aparte map aanmaak met bijvoorbeeld de pagina Disclaimer dan wordt de tekst in het include bestandje niet geinclude
Dan moet je, zoals ik hierboven al zei, in de index.php in de map Disclaimer de verwijzing naar het in te sluiten bestand wijzigen naar "../files/pages.php".

Of je gaat op zoek naar een constructievere oplossing, want code kopiëren is in negen van de tien gevallen gewoon een verkeerd ontwerp :)

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:29

Creepy

Tactical Espionage Splatterer

En toen je http://php.net/manual/en/function.set-include-path.php hebt bekeken, heb je toen het volgende stukje maar volledig genegeerd?
If a path is defined (full or relative), the include_path will be ignored altogether. For example, if a filename begins with ../, the parser will look in the parent directory to find the requested file.
Dus op twee manieren kan je het oplossen: een (relatief) pad opgeven, of iets met het include_path doen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • korgakos
  • Registratie: April 2008
  • Laatst online: 06-04 15:40
Dus je hebt
.................[htdocs]
.......................|
[HOME]....[DISCLAIMER]...[CONTACT]
.....|................... |......................|..........
[FILES].........[FILES]...........[ FILES]
.....|................... |......................|
pages.php.......pages.php...... pages.php
Beetje rare opbouw niet?

Acties:
  • 0 Henk 'm!

Anoniem: 348660

Topicstarter
CodeCaster schreef op maandag 29 maart 2010 @ 15:50:

Dan moet je gaat op zoek naar een constructievere oplossing, want code kopiëren is in negen van de tien gevallen gewoon een verkeerd ontwerp :)
Wat bedoel je eigenlijk?


Korgakos:

dit heb ik
.................[httpdocs]
.......................|
[HOME.HTM]....[DISCLAIMER]...[CONTACT]...[FILES]
.....|................... |......................|..................|
index.php............index.php.........index.php.......................pages.php (include file)

[ Voor 7% gewijzigd door Anoniem: 348660 op 29-03-2010 15:58 ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Hoe maak je nu een nieuwe pagina aan? Je moet een nieuwe map maken, bestanden kopiëren, en daar misschien een paar regels in aanpassen.

Met behulp van bijvoorbeeld mod_rewrite kun je wat jij aan het doen bent veel eenvoudiger realiseren.

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • 0 Henk 'm!

  • ERIKvanPAASSEN
  • Registratie: September 2006
  • Laatst online: 21-04 21:18

ERIKvanPAASSEN

Bug Killer

Ik weet niet of ik je goed begrijp, maar misschien kun je dit gebruiken:

PHP:
1
dirname(__FILE__);


Bovenstaande code geeft je het pad van de directory waarin de file staat die wordt uitgevoerd.
Met onderstaande code kun je bijvoorbeeld, ongeacht je include_path, relatief files includen.

PHP:
1
include(dirname(__FILE__) . '/../files/pages.php');

Acties:
  • 0 Henk 'm!

  • korgakos
  • Registratie: April 2008
  • Laatst online: 06-04 15:40
Hoe geef je dan door op welke pagina je zit? je hebt toch ergens een variable die dit bijhoud, niet?


anders is het toch makkelijk?

PHP:
1
2
$var="MAPNAAM";
include ($var."/index.php");

Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

korgakos schreef op maandag 29 maart 2010 @ 16:09:
Hoe geef je dan door op welke pagina je zit? je hebt toch ergens een variable die dit bijhoud, niet?


anders is het toch makkelijk?

PHP:
1
2
$var="MAPNAAM";
include ($var."/index.php");
Punt is waarschijnlijk. Dat de gestartte include de files die die include weer include. Vat je hem nog? :P

De include gaat dan dus opzoek naar bestanden in de map waar die wordt uitgevoerd /disclaimer/ terwijl de bestanden die die moet hebben staan in: /files/

De Ts krijg z'n include dus wel gestart, maar die haalt ook weer bestanden op, en die kan die dus niet vinden.

Althans, tot zo ver ik de spagethi-soup nog kan volgen :P

Acties:
  • 0 Henk 'm!

Anoniem: 348660

Topicstarter
Dit klopt helemaal

Bovenstaande codes hebben niet geholpen :/ sorry.

Acties:
  • 0 Henk 'm!

  • korgakos
  • Registratie: April 2008
  • Laatst online: 06-04 15:40
Tja "de meest logische opbouw van een site "- Award gaat het hem dus niet worden....

Maar goed, ik dacht dat ik het nog vatte, maar als dit zo is niet meer...
Als ik jou was zou ik eens naar andere sites kijken, hoe daar de opbouw is.


Bad-Workaround:
Als je include na include na include doet.. Moet je een var bijhouden die zich bij elke include verhoogt en dan elke keer weer een extra [code]..[/code] erbij zet..



Met andere woorden, opnieuw nadenken hoe je de site gaat maken :)

edit:
Denk maar eens goed erover na en ga dan pas verder vragen

[ Voor 8% gewijzigd door korgakos op 29-03-2010 16:21 ]


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 12:47

Matis

Rubber Rocket

Anoniem: 348660 schreef op maandag 29 maart 2010 @ 16:15:
Dit klopt helemaal

Bovenstaande codes hebben niet geholpen :/ sorry.
Er zijn twee oplossingen aangedragen, maar die heb je volgens mij beide nog niet gelezen, gezien, of willen zien.

De eerste is een modrewrite in Apache. De andere is het toevoegen van een include_path.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

Anoniem: 348660

Topicstarter
Matis, ik heb dit wel gelezen alleen ik weet niet of dit de juiste oplossing is, overigens zie ik op de site WebSonic dat bij elk nieuwsbericht een klein archief staat, deze word ook in 1 keer aangepast neem ik aan. Dat wil ik dus.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 12:47

Matis

Rubber Rocket

Anoniem: 348660 schreef op maandag 29 maart 2010 @ 16:20:
Matis, ik heb dit wel gelezen alleen ik weet niet of dit de juiste oplossing is, overigens zie ik op de site WebSonic dat bij elk nieuwsbericht een klein archief staat, deze word ook in 1 keer aangepast neem ik aan. Dat wil ik dus.
Ik denk dat WebSonic beide oplossingen naast elkaar gebruikt, aangezien ze meer verstand lijken te hebben van webdevelopment (nofi).

Daarnaast denk doet de een include-path toevoegen exact wat je wilt van je applicatie. Dus ik weet dat dat een juiste oplossingen is.

[ Voor 14% gewijzigd door Matis op 29-03-2010 16:31 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

Anoniem: 348660

Topicstarter
Op een of andere manier begrijp ik die uitleg van die include path gewoon niet. En omdat het iedereen duidelijk is dat helemaal geen professionele webdesigner ben ...

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 12:47

Matis

Rubber Rocket

Met behulp van de functie set_include_path(), voeg je het absolute pad toe van de root van je website (dat doe ik althans), van daaruit kun je dan je bestanden includen, zonder dat je rekening hoeft te houden met parent/child-folders tov van je huidige php-bestand.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Een webdesigner is sowieso iets anders dan een webdeveloper maar dat terzijde ;)

Je include_path bepaalt waar bestanden vanaf ingeladen kunnen worden als jij includes/requires uitvoert. Normaal is het zo dat het include_path ingesteld staat op de map waar jij je script vanaf draait. dus als jij index.php aanroept kun je met require_once 'include.php' het bestand include.php inladen die in dezelfde map staat. Als deze een map hoger staat dan kun je het include_path uitbreiden met die map erbij zodat include.php zowel in dezelfde map als in de map erboven aangeroepen kan worden.

code:
1
2
index.php
include.php


Nu kun je dus include.php in index.php require-en en zal het werken.

code:
1
2
www/index.php
include.php


Nu hetzelfde doen zal niet werken (include.php kan ie nu niet vinden) maar als je de hogere map toevoegt aan je include_path zal het wel weer werken. Hoe je dat doet kun je precies vinden in de documentatie op www.php.net Succes :)

Acties:
  • 0 Henk 'm!

Anoniem: 348660

Topicstarter
Goed ik heb er even naar gekeken, ik heb daarna de oplossing van iemand gekregen. Dit kan ik doen met htaccess.

Allemaal bedankt voor jullie inzet en tijd, sorry voor eventuele verwarring.

[ Voor 26% gewijzigd door Anoniem: 348660 op 29-03-2010 17:38 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 15:08

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Anoniem: 348660 schreef op maandag 29 maart 2010 @ 17:33:
Allemaal bedankt voor jullie inzet en tijd, sorry voor eventuele verwarring.
Het zou al héél veel schelen als je eens duidelijk bent. Ik zie je steeds "nee, werkt niet" posten. Als je dan eens wat concreter bent en aangeeft wat je dan precies hebt gedaan en wat er dan precies niet werkt dan kunnen we je al veel beter helpen. Lees je eigen replies in dit topic nog maar eens door om te zien wat ik bedoel. Je zult ons moeten helpen jezelf te helpen. Simple as that.

Anyhow. Dit lijkt me wel afgehandeld.

[ Voor 16% gewijzigd door RobIII op 29-03-2010 19:31 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.