Discussion:
Problème : include ou require statique ?
(trop ancien pour répondre)
Jean Francois Ortolo
2014-05-28 10:59:24 UTC
Permalink
Bonjour

J'ai un traitement répétitif ( = une boucle principale externe ) à
faire dans un script php.

Le problème, est que ce scripts php contient d'autres scripts php
inclus ( tous dans le même répertoire que le script initial ), avec
l'instruction include("script.php");

Cepndant, ces include sont contenus dans des blocs de code du script
initial, qui ne sont rencontrés à l'exécution, que dans des conditions
du type :

if($condition)
{ // bloc de code
include("script.php");
}


Comme l'exécution du script initial passera parfois avec certitude
sur ces conditions, ( parfois réalisées parfois non ), est-ce que je
peux être sûr, que ces scripts inclus, ont déjà leur code php inclus à
la compilation dans le script initial, et qu'il n'y aura pas d'effet de
bord quelconque, à faire ces includes ?

Sinon, est-ce-que des require sont ou des includes sont plus indiqués
pour que les inclusions soient "statiques", donc pour les codes inclus
donnent un script d'ensemble fixe quelles que soient les conditions
rencontrées lors de son exécution ?

Il me semble que cette question est classique, mais j'ai l'impression
que le PHP Manual est devenu depuis quelques temps, plus difficile à
comprendre.

Merci beaucoup de vos réponses.

Amicalement.

Jean François Ortolo
Olivier Miakinen
2014-05-28 21:45:33 UTC
Permalink
Bonjour,
Post by Jean Francois Ortolo
J'ai un traitement répétitif ( = une boucle principale externe ) à
faire dans un script php.
Le problème, est que ce script php contient d'autres scripts php
inclus ( tous dans le même répertoire que le script initial ), avec
l'instruction include("script.php");
Avant d'aller plus loin, est-ce que les scripts inclus définissent
des fonctions qu'il suffit de définir une fois pour toute, ou bien
s'agit-il de code qui doit vraiment être inclus plusieurs fois ?

Si c'est le dernier cas, permets-moi de douter que ce soit une bonne
façon de procéder. Je me trompe peut-être (et je ne demande qu'à être
convaincu du contraire) mais je pense qu'il doit y avoir un moyen
d'optimiser les choses : par exemple une fonction définie dans un
fichier inclus une seule fois, puis N appels à cette fonction lors
du traitement répétitif.

Si c'est le premier cas (et je suppose que c'est bien ça), peut-être
ne connais-tu pas la fonction include_once.

Une petite doc sur Alsacreations :
<http://www.alsacreations.com/actu/lire/254-le-point-sur-la-fonction-include-php.html>
Post by Jean Francois Ortolo
Cepndant, ces include sont contenus dans des blocs de code du script
initial, qui ne sont rencontrés à l'exécution, que dans des conditions
if($condition)
{ // bloc de code
include("script.php");
}
Comme l'exécution du script initial passera parfois avec certitude
sur ces conditions, ( parfois réalisées parfois non ), est-ce que je
peux être sûr, que ces scripts inclus, ont déjà leur code php inclus à
la compilation dans le script initial, et qu'il n'y aura pas d'effet de
bord quelconque, à faire ces includes ?
Tu veux dire, s'il y a une erreur dans l'un des scripts, le sauras-tu
même si l'inclusion est dans un if dont la condition est fausse ? Si
j'en crois la doc, c'est non pour include mais oui pour require :

<http://www.apc.univ-paris7.fr/~revenu/DocPhp/php/function.require.html>
Contrairement à include(), require() va toujours lire dans le fichier
cible, même si la ligne n'est jamais exécutée. Si vous souhaitez une
inclusion conditionnelle, utilisez include(). La condition ne va jamais
affecter require(). Cependant, si la ligne de require() n'est jamais
exécutée, le code du fichier ne le sera jamais non plus.
</>
Post by Jean Francois Ortolo
Sinon, est-ce-que des require sont ou des includes sont plus indiqués
pour que les inclusions soient "statiques", donc pour les codes inclus
donnent un script d'ensemble fixe quelles que soient les conditions
rencontrées lors de son exécution ?
Il me semble que cette question est classique, mais j'ai l'impression
que le PHP Manual est devenu depuis quelques temps, plus difficile à
comprendre.
Je ne suis pas sûr moi-même d'avoir compris ta question... ;-)

N'hésite pas à reformuler si jamais j'ai compris de travers.

Cordialement,
--
Olivier Miakinen
Jean Francois Ortolo
2014-05-29 07:42:41 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Post by Jean Francois Ortolo
J'ai un traitement répétitif ( = une boucle principale externe ) à
faire dans un script php.
Le problème, est que ce script php contient d'autres scripts php
inclus ( tous dans le même répertoire que le script initial ), avec
l'instruction include("script.php");
Avant d'aller plus loin, est-ce que les scripts inclus définissent
des fonctions qu'il suffit de définir une fois pour toute, ou bien
s'agit-il de code qui doit vraiment être inclus plusieurs fois ?
Bonjour Monsieur

En fait, j'ai changé mon problème, en utilisant directement le script
en question ( en y incorporant la boucle externe ).

Cependant, dans ce script, il y a des include dans le code du script,
mais les portions de code dans lesquels ces include apparaissent, sont
dans des conditions if-else.

Mais, le site AlsaCreations, dont vous me donnez l'url, dit qu'un
include est strictement équivalent à un copié-collé du code du script
inclus, dans le script ou figure l'include.

Donc... Même si ces include sont dans des portions de code ( du
script externe ), qui peuvent être rencontrés plusieurs fois *à
l'exécution du script* , chaque includes, équivalents à des
copiés-collé, seront seulement inclus ( dans le code source du script ),
une seule fois par include, et non pas autant de fois qu'ils seront
rencontrés lors de l'exécution ?

Donc... Les include sont exécutés à la compilation du script externe
, et non pas à son exécution ?

Merci beaucoup de me dire si tout n'est pas clair dans ma demande.

En passant, aucun de mes include ne sont dans une fonction.

Merci beaucoup pour votre réponse.

Jean François Ortolo
Post by Olivier Miakinen
Si c'est le dernier cas, permets-moi de douter que ce soit une bonne
façon de procéder. Je me trompe peut-être (et je ne demande qu'à être
convaincu du contraire) mais je pense qu'il doit y avoir un moyen
d'optimiser les choses : par exemple une fonction définie dans un
fichier inclus une seule fois, puis N appels à cette fonction lors
du traitement répétitif.
Si c'est le premier cas (et je suppose que c'est bien ça), peut-être
ne connais-tu pas la fonction include_once.
<http://www.alsacreations.com/actu/lire/254-le-point-sur-la-fonction-include-php.html>
Post by Jean Francois Ortolo
Cepndant, ces include sont contenus dans des blocs de code du script
initial, qui ne sont rencontrés à l'exécution, que dans des conditions
if($condition)
{ // bloc de code
include("script.php");
}
Comme l'exécution du script initial passera parfois avec certitude
sur ces conditions, ( parfois réalisées parfois non ), est-ce que je
peux être sûr, que ces scripts inclus, ont déjà leur code php inclus à
la compilation dans le script initial, et qu'il n'y aura pas d'effet de
bord quelconque, à faire ces includes ?
Tu veux dire, s'il y a une erreur dans l'un des scripts, le sauras-tu
même si l'inclusion est dans un if dont la condition est fausse ? Si
<http://www.apc.univ-paris7.fr/~revenu/DocPhp/php/function.require.html>
Contrairement à include(), require() va toujours lire dans le fichier
cible, même si la ligne n'est jamais exécutée. Si vous souhaitez une
inclusion conditionnelle, utilisez include(). La condition ne va jamais
affecter require(). Cependant, si la ligne de require() n'est jamais
exécutée, le code du fichier ne le sera jamais non plus.
</>
Post by Jean Francois Ortolo
Sinon, est-ce-que des require sont ou des includes sont plus indiqués
pour que les inclusions soient "statiques", donc pour les codes inclus
donnent un script d'ensemble fixe quelles que soient les conditions
rencontrées lors de son exécution ?
Il me semble que cette question est classique, mais j'ai l'impression
que le PHP Manual est devenu depuis quelques temps, plus difficile à
comprendre.
Je ne suis pas sûr moi-même d'avoir compris ta question... ;-)
N'hésite pas à reformuler si jamais j'ai compris de travers.
Cordialement,
Jean Francois Ortolo
2014-05-29 08:39:54 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Post by Jean Francois Ortolo
J'ai un traitement répétitif ( = une boucle principale externe ) à
faire dans un script php.
Le problème, est que ce script php contient d'autres scripts php
inclus ( tous dans le même répertoire que le script initial ), avec
l'instruction include("script.php");
Avant d'aller plus loin, est-ce que les scripts inclus définissent
des fonctions qu'il suffit de définir une fois pour toute, ou bien
s'agit-il de code qui doit vraiment être inclus plusieurs fois ?
Si c'est le dernier cas, permets-moi de douter que ce soit une bonne
façon de procéder. Je me trompe peut-être (et je ne demande qu'à être
convaincu du contraire) mais je pense qu'il doit y avoir un moyen
d'optimiser les choses : par exemple une fonction définie dans un
fichier inclus une seule fois, puis N appels à cette fonction lors
du traitement répétitif.
Si c'est le premier cas (et je suppose que c'est bien ça), peut-être
ne connais-tu pas la fonction include_once.
<http://www.alsacreations.com/actu/lire/254-le-point-sur-la-fonction-include-php.html>
Post by Jean Francois Ortolo
Cepndant, ces include sont contenus dans des blocs de code du script
initial, qui ne sont rencontrés à l'exécution, que dans des conditions
if($condition)
{ // bloc de code
include("script.php");
}
Comme l'exécution du script initial passera parfois avec certitude
sur ces conditions, ( parfois réalisées parfois non ), est-ce que je
peux être sûr, que ces scripts inclus, ont déjà leur code php inclus à
la compilation dans le script initial, et qu'il n'y aura pas d'effet de
bord quelconque, à faire ces includes ?
Tu veux dire, s'il y a une erreur dans l'un des scripts, le sauras-tu
même si l'inclusion est dans un if dont la condition est fausse ? Si
<http://www.apc.univ-paris7.fr/~revenu/DocPhp/php/function.require.html>
Contrairement à include(), require() va toujours lire dans le fichier
cible, même si la ligne n'est jamais exécutée. Si vous souhaitez une
inclusion conditionnelle, utilisez include(). La condition ne va jamais
affecter require(). Cependant, si la ligne de require() n'est jamais
exécutée, le code du fichier ne le sera jamais non plus.
</>
Rebonjour Monsieur

Celà semble indiquer, que la fonction require() est ce que je
recherche : Une inclusion non conditionnelle ( = faite à la compilation
), et le code inclus figure dans tous les cas à l'endroit où il a été
inclus, même si la condition ne permet pas que le code inclus soit
rencontré à l'exécution.

Donc... La fonction require() permet une telle inclusion "statique",
c'est-à-dire à la compilation.

Respectueusement.

Jean François Ortolo
Post by Olivier Miakinen
Post by Jean Francois Ortolo
Sinon, est-ce-que des require sont ou des includes sont plus indiqués
pour que les inclusions soient "statiques", donc pour les codes inclus
donnent un script d'ensemble fixe quelles que soient les conditions
rencontrées lors de son exécution ?
Il me semble que cette question est classique, mais j'ai l'impression
que le PHP Manual est devenu depuis quelques temps, plus difficile à
comprendre.
Je ne suis pas sûr moi-même d'avoir compris ta question... ;-)
N'hésite pas à reformuler si jamais j'ai compris de travers.
Cordialement,
Otomatic
2014-05-29 15:30:59 UTC
Permalink
Post by Jean Francois Ortolo
Donc... La fonction require() permet une telle inclusion "statique",
c'est-à-dire à la compilation.
Désolé, mais les fonctions include() et require() sont strictement
identiques à une seul exception près au niveau de la gestion des
erreurs.

L'instruction de langage include inclut et exécute le fichier spécifié
en argument.

Cette documentation s'applique aussi à l'instruction de langage require.

Les fichiers sont inclus suivant le chemin du fichier fourni ; si aucun
n'est fourni, l'include_path sera vérifié. Si le fichier n'est pas
trouvé dans l' include_path, include vérifiera dans le dossier du script
appelant et dans le dossier de travail courant avant d'échouer.
L'instruction include enverra une erreur de type warning si elle ne peut
trouver le fichier; ce comportement est différent de require, qui
enverra une erreur de niveau fatal.

Pourquoi n'allez-vous pas lire les documentations de PHP sur le sujet :
http://fr2.php.net/manual/fr/function.include.php
--
Ce n'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont forcément raison. Coluche
Jean Francois Ortolo
2014-05-30 16:39:30 UTC
Permalink
Post by Otomatic
Post by Jean Francois Ortolo
Donc... La fonction require() permet une telle inclusion "statique",
c'est-à-dire à la compilation.
Désolé, mais les fonctions include() et require() sont strictement
identiques à une seul exception près au niveau de la gestion des
erreurs.
L'instruction de langage include inclut et exécute le fichier spécifié
en argument.
Cette documentation s'applique aussi à l'instruction de langage require.
Les fichiers sont inclus suivant le chemin du fichier fourni ; si aucun
n'est fourni, l'include_path sera vérifié. Si le fichier n'est pas
trouvé dans l' include_path, include vérifiera dans le dossier du script
appelant et dans le dossier de travail courant avant d'échouer.
L'instruction include enverra une erreur de type warning si elle ne peut
trouver le fichier; ce comportement est différent de require, qui
enverra une erreur de niveau fatal.
http://fr2.php.net/manual/fr/function.include.php
Bonjour Monsieur

J'ai mieux que le PHP Manual, ( que j'ai déjà lu je m'empresse de le
dire ).

Le commencement de la page dont Monsieur Miakinen me donne l'url (
Université Paris V ) :

----------------------------------------------------------------------

require() n'est pas vraiment une fonction PHP : c'est plus une
instruction du langage. Elle ne fonctionne pas comme les fonctions
standards. Par exemple, require() est indépendante des structures de
contrôle (cela ne sert à rien de la placer dans une condition, elle sera
toujours exécutée). De plus, elle ne retourne aucune valeur. Lire une
valeur retournée par un require() retourne une erreur d'analyse.

Contrairement à include(), require() va toujours lire dans le fichier
cible, même si la ligne n'est jamais exécutée. Si vous souhaitez une
inclusion conditionnelle, utilisez include(). La condition ne va jamais
affecter require(). Cependant, si la ligne de require() n'est jamais
exécutée, le code du fichier ne le sera jamais non plus.

Les boucles n'affectent pas le comportement de require(). Même si le
code contenu dans le fichier source est appelé dans la boucle, require()
n'est exécuté qu'une fois.

----------------------------------------------------------------------

Merci à Monsieur Miakinen de confirmer ce que je disais.

Respectueusement.

Jean François Ortolo
Pierre Maurette
2014-05-31 07:38:03 UTC
Permalink
Post by Jean Francois Ortolo
Post by Otomatic
Post by Jean Francois Ortolo
Donc... La fonction require() permet une telle inclusion "statique",
c'est-à-dire à la compilation.
Désolé, mais les fonctions include() et require() sont strictement
identiques à une seul exception près au niveau de la gestion des
erreurs.
L'instruction de langage include inclut et exécute le fichier spécifié
en argument.
Cette documentation s'applique aussi à l'instruction de langage require.
Les fichiers sont inclus suivant le chemin du fichier fourni ; si aucun
n'est fourni, l'include_path sera vérifié. Si le fichier n'est pas
trouvé dans l' include_path, include vérifiera dans le dossier du script
appelant et dans le dossier de travail courant avant d'échouer.
L'instruction include enverra une erreur de type warning si elle ne peut
trouver le fichier; ce comportement est différent de require, qui
enverra une erreur de niveau fatal.
http://fr2.php.net/manual/fr/function.include.php
Bonjour Monsieur
J'ai mieux que le PHP Manual, ( que j'ai déjà lu je m'empresse de le dire
).
Le commencement de la page dont Monsieur Miakinen me donne l'url (
----------------------------------------------------------------------
require() n'est pas vraiment une fonction PHP : c'est plus une instruction du
langage. Elle ne fonctionne pas comme les fonctions standards. Par exemple,
require() est indépendante des structures de contrôle (cela ne sert à rien de
la placer dans une condition, elle sera toujours exécutée). De plus, elle ne
retourne aucune valeur. Lire une valeur retournée par un require() retourne
une erreur d'analyse.
Contrairement à include(), require() va toujours lire dans le fichier
cible, même si la ligne n'est jamais exécutée. Si vous souhaitez une
inclusion conditionnelle, utilisez include(). La condition ne va jamais
affecter require(). Cependant, si la ligne de require() n'est jamais
exécutée, le code du fichier ne le sera jamais non plus.
Les boucles n'affectent pas le comportement de require(). Même si le code
contenu dans le fichier source est appelé dans la boucle, require() n'est
exécuté qu'une fois.
----------------------------------------------------------------------
Vous devriez pourtant faire confiance au manuel. Le texte en référence
me semble bien être un tissu d'âneries. Déjà écrire require() avec
parenthèses pour préciser que ce n'est "pas vraiment" une fonction,
alors que simplement *ce n'est pas* une fonction...
Tout le reste est soit incompréhensible soit faux. Ceci dit, je ne suis
pas expert PHP, je ne connais rien des très anciennes versions et un
truc doit m'échapper.
--
Pierre Maurette
Jean Francois Ortolo
2014-05-31 08:06:45 UTC
Permalink
Post by Pierre Maurette
Post by Jean Francois Ortolo
Post by Otomatic
Post by Jean Francois Ortolo
Donc... La fonction require() permet une telle inclusion "statique",
c'est-à-dire à la compilation.
Désolé, mais les fonctions include() et require() sont strictement
identiques à une seul exception près au niveau de la gestion des
erreurs.
L'instruction de langage include inclut et exécute le fichier spécifié
en argument.
Cette documentation s'applique aussi à l'instruction de langage require.
Les fichiers sont inclus suivant le chemin du fichier fourni ; si aucun
n'est fourni, l'include_path sera vérifié. Si le fichier n'est pas
trouvé dans l' include_path, include vérifiera dans le dossier du script
appelant et dans le dossier de travail courant avant d'échouer.
L'instruction include enverra une erreur de type warning si elle ne peut
trouver le fichier; ce comportement est différent de require, qui
enverra une erreur de niveau fatal.
http://fr2.php.net/manual/fr/function.include.php
Bonjour Monsieur
J'ai mieux que le PHP Manual, ( que j'ai déjà lu je m'empresse de
le dire ).
Le commencement de la page dont Monsieur Miakinen me donne l'url
----------------------------------------------------------------------
require() n'est pas vraiment une fonction PHP : c'est plus une
instruction du langage. Elle ne fonctionne pas comme les fonctions
standards. Par exemple, require() est indépendante des structures de
contrôle (cela ne sert à rien de la placer dans une condition, elle
sera toujours exécutée). De plus, elle ne retourne aucune valeur. Lire
une valeur retournée par un require() retourne une erreur d'analyse.
Contrairement à include(), require() va toujours lire dans le
fichier cible, même si la ligne n'est jamais exécutée. Si vous
souhaitez une inclusion conditionnelle, utilisez include(). La
condition ne va jamais affecter require(). Cependant, si la ligne de
require() n'est jamais exécutée, le code du fichier ne le sera jamais
non plus.
Les boucles n'affectent pas le comportement de require(). Même si le
code contenu dans le fichier source est appelé dans la boucle,
require() n'est exécuté qu'une fois.
----------------------------------------------------------------------
Vous devriez pourtant faire confiance au manuel. Le texte en référence
me semble bien être un tissu d'âneries. Déjà écrire require() avec
parenthèses pour préciser que ce n'est "pas vraiment" une fonction,
alors que simplement *ce n'est pas* une fonction...
Tout le reste est soit incompréhensible soit faux. Ceci dit, je ne suis
pas expert PHP, je ne connais rien des très anciennes versions et un
truc doit m'échapper.
Bonjour Monsieur

Je n'ai rien à dire à ce que vous dites, si ce n'est que ce n'est pas
très précis. ;)

Le PHP Manual non plus d'ailleurs. Il n'est plus ce que c'était.

Ce type d'informations ne s'y trouve pas.

Il s'agit de l'Université Paris 7 ( Paris Diderot ), et non pas Paris
V. Pardonnez-moi pour mon "lapsus".


Peut-être Monsieur Miakinen pourra-t-il m'éclairer par rapport au
contenu de cette page ? ;)

Il est bien indiqué, que le require(), équivaut à un copié-collé du
code, si celà devait en,lever d'un doute...

Par ailleurs, si vous avez des arguments *techniques*, merci de m'en
faire part ?

Bien amicalement.

Jean François Ortolo
Otomatic
2014-05-31 08:40:00 UTC
Permalink
Post by Jean Francois Ortolo
Le commencement de la page dont Monsieur Miakinen me donne l'url (
Date de près de dix ans.
C'était peut-être (Et j'en doute fortement) vrai du temps de PHP 3.

- D'une part, je ne me base QUE sur les documentations officielles PHP
et non sur tout ce qu'on peut trouver comme cochoncetées sur tout un tas
de sites, même si ça provient d'une université.
- D'autre part, rien ne vous empêche d'effectuer vous-même des essais
pour confirmer ou infirmer ce que vous lisez ici ou là.

--------------------------------------
Essais effectués avec un script essais_include.php
<?php
$pour_test = 22;

echo "<p>Include et Require conditionnels if ".$pour_test." ==
12</p>\n";
if($pour_test == 12) {
include('inc_toto_1.php');
require('inc_toto_1.php');
include('inc_toto_2.php');
require('inc_toto_2.php');
include('inc_toto_3.php');
require('inc_toto_3.php');
}
echo "<p>Fin test conditionnel</p>\n";

echo "<p>Include et Require conditionnels if ".$pour_test." ==
22</p>\n";
if($pour_test == 22) {
include('inc_toto_1.php');
require('inc_toto_1.php');
include('inc_toto_2.php');
require('inc_toto_2.php');
include('inc_toto_3.php');
require('inc_toto_3.php');
}
echo "<p>Fin test conditionnel</p>\n";
?>

Les trois fichiers inc_toto_1, 2 et 3 contiennent :
<?php
$fichier = basename(__FILE__);
echo "<p>Fichier ".$fichier."</p>\n";
?>

Voilà le résultat obtenu :

Include et Require conditionnels if 22 == 12
Fin test conditionnel

Include et Require conditionnels if 22 == 22
Fichier inc_toto_1.php
Fichier inc_toto_1.php
Fichier inc_toto_2.php
Fichier inc_toto_2.php
Fichier inc_toto_3.php
Fichier inc_toto_3.php
Fin test conditionnel

Exactement le même résultat avec PHP 5.3.28, PHP 5.4.29, PHP 5.5.13 et
PHP 5.6.b3

Donc, comme le dit si justement la documentation PHP, include et require
se comportent EXACTEMENT de la même manière sauf pour la gestion des
erreurs.

RTFM & CQFD
--
Ce n'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont forcément raison. Coluche
Jean Francois Ortolo
2014-05-31 09:45:36 UTC
Permalink
Post by Otomatic
Post by Jean Francois Ortolo
Le commencement de la page dont Monsieur Miakinen me donne l'url (
Date de près de dix ans.
C'était peut-être (Et j'en doute fortement) vrai du temps de PHP 3.
- D'une part, je ne me base QUE sur les documentations officielles PHP
et non sur tout ce qu'on peut trouver comme cochoncetées sur tout un tas
de sites, même si ça provient d'une université.
- D'autre part, rien ne vous empêche d'effectuer vous-même des essais
pour confirmer ou infirmer ce que vous lisez ici ou là.
--------------------------------------
Essais effectués avec un script essais_include.php
<?php
$pour_test = 22;
echo "<p>Include et Require conditionnels if ".$pour_test." ==
12</p>\n";
if($pour_test == 12) {
include('inc_toto_1.php');
require('inc_toto_1.php');
include('inc_toto_2.php');
require('inc_toto_2.php');
include('inc_toto_3.php');
require('inc_toto_3.php');
}
echo "<p>Fin test conditionnel</p>\n";
echo "<p>Include et Require conditionnels if ".$pour_test." ==
22</p>\n";
if($pour_test == 22) {
include('inc_toto_1.php');
require('inc_toto_1.php');
include('inc_toto_2.php');
require('inc_toto_2.php');
include('inc_toto_3.php');
require('inc_toto_3.php');
}
echo "<p>Fin test conditionnel</p>\n";
?>
<?php
$fichier = basename(__FILE__);
echo "<p>Fichier ".$fichier."</p>\n";
?>
Include et Require conditionnels if 22 == 12
Fin test conditionnel
Include et Require conditionnels if 22 == 22
Fichier inc_toto_1.php
Fichier inc_toto_1.php
Fichier inc_toto_2.php
Fichier inc_toto_2.php
Fichier inc_toto_3.php
Fichier inc_toto_3.php
Fin test conditionnel
Exactement le même résultat avec PHP 5.3.28, PHP 5.4.29, PHP 5.5.13 et
PHP 5.6.b3
Donc, comme le dit si justement la documentation PHP, include et require
se comportent EXACTEMENT de la même manière sauf pour la gestion des
erreurs.
RTFM & CQFD
Bonjour Monsieur

Si je comprend bien, vous assimilez l'exécution du code contenu dans
ces fichiers inclus, à l'inclusion des-dits fichiers ?

Et vous constatez que dans les cas où l condition n'est pas réalisée,
le code n'apparaît pas ?

C'est précisément ce que dit la page en question.

Voir la fin de mon entière citation. ;)

A plus.

Jean François Ortolo
Yannick VOYEAUD
2014-05-31 12:58:12 UTC
Permalink
Bonjour,

Pour moi require = requiert donc présence obligatoire du fichier. Si
absence de celui-ci le script appelant s'arrête!
Pour moi include = inclure donc présence non impérative Si pas présent
on peut continuer le script appelant.

Enfin c'est dans cet esprit que j'utilise ces deux commandes.

Amitiés
--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
Otomatic
2014-05-31 13:28:18 UTC
Permalink
Post by Jean Francois Ortolo
Et vous constatez que dans les cas où l condition n'est pas réalisée,
le code n'apparaît pas ?
C'est précisément ce que dit la page en question.
NON
Elle dit :
Contrairement à include(), require() va toujours lire dans le fichier
cible, même si la ligne n'est jamais exécutée. Si vous souhaitez une
inclusion conditionnelle, utilisez include().

EOF
Fred
2014-05-31 14:02:20 UTC
Permalink
Post by Olivier Miakinen
Post by Jean Francois Ortolo
Et vous constatez que dans les cas où l condition n'est pas réalisée,
le code n'apparaît pas ?
C'est précisément ce que dit la page en question.
NON
Contrairement à include(), require() va toujours lire dans le fichier
cible, même si la ligne n'est jamais exécutée. Si vous souhaitez une
inclusion conditionnelle, utilisez include().
EOF
Cette doc de l'univ-paris7 concerne php 3/4 et elle est périmée.

En PHP5, on peut mettre indiférement include ou require dans une
boucle et le fichier ne sera lu que si include ou require sont
réellement executés.
C'est vérifiable avec fileatime().

Fred
Jean Francois Ortolo
2014-05-31 16:16:49 UTC
Permalink
Post by Olivier Miakinen
Post by Jean Francois Ortolo
Et vous constatez que dans les cas où l condition n'est pas réalisée,
le code n'apparaît pas ?
C'est précisément ce que dit la page en question.
NON
Contrairement à include(), require() va toujours lire dans le fichier
cible, même si la ligne n'est jamais exécutée. Si vous souhaitez une
inclusion conditionnelle, utilisez include().
EOF
Rebonjour Monsieur

Encore une fois, vous entendez par : "lire dans le fichier",
l'équivalent de "exécuter le fichier".

Or, la page dit exactement le contraire.

Elle dit : "Le code du fichier n'est exécuté que si la condition est
réalisée". ( résumé ).

Bien à vous.

Amicalement.

Jean François Ortolo
Denis Beauregard
2014-05-31 16:40:00 UTC
Permalink
Le Sat, 31 May 2014 18:16:49 +0200, Jean Francois Ortolo
Post by Jean Francois Ortolo
Encore une fois, vous entendez par : "lire dans le fichier",
l'équivalent de "exécuter le fichier".
Or, la page dit exactement le contraire.
Elle dit : "Le code du fichier n'est exécuté que si la condition est
réalisée". ( résumé ).
À mon avis, il y a 2 situations différentes.


if condition
include ou require
fin de condition


Si la condition est vraie, le fichier est inclus.

Si la condition est fausse, le fichier n'est pas inclus. Cela
signifie 2 possibilités.
==> Soit la ligne de code n'est pas exécutée, donc un require sans
fichier ne donnera pas d'erreur,
==> soit les include et require sont exécutés de toutes façons mais
leur code interne est ignoré.

Il me semble que le 2e cas signifie en fait que PHP a un préprocesseur
puis un processeur indépendants, alors que le 1er cas, qu'il y a un
seul processur. C'est ce qu'on appelle une grosse différence entre 2
versions majeures d'un logiciel (entre 3/4 et 5 mais pas entre 3 et
3.1).

Vérifions ce que fait PHP 5 (celui que j'ai sur mon ordi).

<?php

if (0) {
require ("toto.php");
}

?>

toto.php n'existe pas et cela ne génère pas d'erreur. Donc, on n'a pas
de préprocesseur séparé. Avec if (1), il y a erreur.


Denis

Denis Beauregard
2014-05-28 21:56:55 UTC
Permalink
Le Wed, 28 May 2014 12:59:24 +0200, Jean Francois Ortolo
Post by Jean Francois Ortolo
Bonjour
J'ai un traitement répétitif ( = une boucle principale externe ) à
faire dans un script php.
Le problème, est que ce scripts php contient d'autres scripts php
inclus ( tous dans le même répertoire que le script initial ), avec
l'instruction include("script.php");
Je ne comprends pas la question.

Si c'est pour inclure une seule fois un fichier parce qu'on y définit
des fonctions, il suffit d'utiliser cette structure :

include_once('script.php');


Denis
Loading...