[php] Function undefined na include

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een common.php file met (nu nog maar 1) common functions.

common.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
function show_example($filename)
{
echo "<code>Source:</code><br>";
show_source("$filename");
echo "\n<br>\n<br>\n";
echo "<code>Output:<br>\n";
include("$filename");
echo "<code>";
}
?>


Als ik deze include in een file voor een tutorial en dan aanroep verderop in de script dan krijg ik een error message.

tutorial.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
require('http://' . $_SERVER['HTTP_HOST'] . '/include/common.php');
echo ('http://' . $_SERVER['HTTP_HOST'] . '/include/common.php');
?>

..............
Lap HTML zooi
.............

<?php
show_example('example1.php');
?>
Fatal error: Call to undefined function: show_example() in D:\web\v2\phpreference\1\0.php on line 28
PS: Die Echo is om te kijken of hij de fileURL wel goed doet.

Acties:
  • 0 Henk 'm!

  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08 23:34
bij een include is het niet de bedoeling dat je de URL opgeeft, maar gewoon het path naar de file op uw webserver.

bv: include "/includes/common.php";

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13:04
En het liefst natuurlijk met een relatieve URL: include('../includes/common.php');

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Maar dit werkt wel voor andere includes.
Het gaat er mij om waarom de functie niet aangeroepen kan worden

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Andere includes spugen zeker alleen html uit?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Dat werkt niet bij andere includes en ook niet bij deze. Je include namelijk niet de source, maar het resultaat!

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!

Verwijderd

Topicstarter
Janoz schreef op 03 June 2003 @ 13:31:
Dat werkt niet bij andere includes en ook niet bij deze. Je include namelijk niet de source, maar het resultaat!
Juist, daar zit ik ff fout dan,
Hoe zou ik dit dan voor elkaar krijgen, moet ik die functie dan boven aan ieder pagina zetten ipv includen ??

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Professionele website nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou, om het nog wat moeilijker te maken, de te includen file staat in een folder lager dan dan de file waarin ik hem include.
ik krijg bij deze "oplossing alleen maar meldingen dat hij de files niet kan vinden.
Warning: main(/include/common.php) [function.main]: failed to create stream: No such file or directory in D:\web\v2\phpreference\1\0.php on line 23

Warning: main() [function.main]: Failed opening '/include/common.php' for inclusion (include_path='.;c:\php\web') in D:\web\v2\phpreference\1\0.php on line 23
ik dacht dat ik de functie gewoon in zijn geheel in een file kon zetten en dat hergebruiken in een script, maar dan moet dus of de hele structuur van de folders veranderen, of allerlei variabelen mee gaan sturen van de relatieve sites.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dat zal ook wel kunnen, maar niet als je domweg een voorbeeldje overneemt en denkt dat dat zeker zal werken.

/include zal niet zo gauw bestaan, wellicht dat ./include of ../include wel bestaat.
Of .\include of ..\include ofzo.

Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 13:04
Post 1 na jouw vraag geeft een goed antwoord, ik geef in post 2 het antwoord al op jouw vraag hier aan het eind...

[ Voor 3% gewijzigd door sjroorda op 03-06-2003 13:57 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In de topic start beschrijf ik hoe ik een probleem heb met het includen van een FUNCTIE. Dit schijnt dus niet te kunnen, want hij parst de HTML code en niet de functie ..... TOCH ?

Dus ik neem de include optie over:
Even voor de duidelijkheid (En laten we hopen dat ik het niet verkeerd aan het lezen ben) .... maar de antwoorden die ik krijg gaan er over hoe ik de file moet includen en men denkt dat ik de common.php niet in mijn script geinclude krijg.

DAT IS DUS NIET HET PROBLEEM. :P

Het probleem is dat hij daarna de $filename niet juist aanroept. hij zoekt hem in de zelfde folder als de common.php file, maar daar staat hij dus niet. Dat is wat ik bedoelde met de relatieve sites meesturen of veranderen.

Ik begrijp dat als ik een include doe dat de functies in die include wel worden gedaan relatief aan de folder waar ze staan en niet de folder waar ze worden geinclude, IS DAT JUIST ???

En hier zit denk ook het probleem.

Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
Wat heeft in godsnaam een functie te maken met de plaats waar die staat? Je includet 'm, dan kan je die functie gebruiken. Includen van een php file binnen de server zorgt ervoor dat de SOURCE geinclude wordt, wordt dus niet geparsed, onafhankelijk van of die geinclude file in dezelfde directory zit of niet!

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz schreef op 03 June 2003 @ 13:31:
Dat werkt niet bij andere includes en ook niet bij deze. Je include namelijk niet de source, maar het resultaat!
Rotjeknor schreef op 03 juni 2003 @ 14:10:
.............. Includen van een php file binnen de server zorgt ervoor dat de SOURCE geinclude wordt, wordt dus niet geparsed, .................
8)7 Denk je dat ik nu nog snap
8)7

[ Voor 33% gewijzigd door Verwijderd op 03-06-2003 14:20 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Nee, maar wat snap je uberhaupt wel van include?

Een include laad functionaliteit in door een stuk php code in te laden en te parsen. Als de 'file' die je inlaad een remote-file is, dan zal de remote-server dat als een gewone request behandelen (en dit kan ook niet anders en zal ook nooit anders worden) en de php-file parsen. Van die geparste php-file wordt dan het resultaat opgestuurd en niet de inhoud.

Een include op het lokale filesystem werkt exact hetzelfde, met dien verstande dat er geen externe webserver tussenzit en dus de php-files niet tussendoor geparsed worden.
Jij wilt functionaliteit van je lokale filesystem laden, dat ergens anders staat.

Daarvoor zul je de files waar die functionaliteit in staat moeten includen. Als die file een directory "terug" staan dan moet je die file ook daarvandaan laden.
Als de files in dezelfde dir staat, daarvandaan, etc.

Acties:
  • 0 Henk 'm!

  • Rotjeknor
  • Registratie: April 2001
  • Laatst online: 01-04-2023
PHP:
1
require('http://' . $_SERVER['HTTP_HOST'] . '/include/common.php');

Uitleg:
Je include de file via de webserver (door die http), hierdoor wordt ie geparsed. Je include hier dus de output, de HTML. Er staat geen echo in je common.php, daardoor zie je niks extra's en je function kan je niet gebruiken.
PHP:
1
require('include/common.php');

Uitleg:
Nu include je de file, geen tussenkomst van de server, dus je include hier de PHP source. Je functie is bruikbaar in je code.

Zo duidelijk genoeg? :P

Edit: Zie ook de post voor mij van ACM voor de theorie :)

[ Voor 11% gewijzigd door Rotjeknor op 03-06-2003 14:28 ]

Ook Knor is aangestoken met het ligfietsvirus!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ACM en Rotjeknor, Thanx.

Ik denk dat ik nu het verschil begrijp. Dat remote include (http) en lokaal include is nogal een verschil en daarin zit hem ook de fout.
Ik ga ermee aan de slag.

:)
edit:

pppfffff, Het iss gelukt

[ Voor 10% gewijzigd door Verwijderd op 03-06-2003 14:37 ]

Pagina: 1