PHP - fwrite dans une fonction
Tony
-
ReDLoG -
ReDLoG -
Bonjour,
Je n'arrive pas exécuter ce petit code en PHP. Cela vient de ma fonction car sans elle, le code s'exécute bien.
La notion "globale" ne m'a jamais posé de problème jusqu'alors. Quelqu'un sait-il pourquoi, dans ce contexte là, cela ne fonctionne pas ?
Par avance merci
Je n'arrive pas exécuter ce petit code en PHP. Cela vient de ma fonction car sans elle, le code s'exécute bien.
<?php /* Logs */ $filename = 'L:\Projet MIN\XML PHP\log.txt'; $mode = 'w'; $fichier_log = fopen($filename, $mode); fwrite($fichier_log, "Debut du script"); function Log($texte_a_loguer) { global $fichier_log; fwrite($fichier_log, utf8_encode($texte_a_loguer)); } fclose($fichier_log); ?>
La notion "globale" ne m'a jamais posé de problème jusqu'alors. Quelqu'un sait-il pourquoi, dans ce contexte là, cela ne fonctionne pas ?
Par avance merci
A voir également:
- PHP - fwrite dans une fonction
- Fonction si et - Guide
- Easy php - Télécharger - Divers Web & Internet
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Expert php pinterest - Télécharger - Langages
3 réponses
Merci !
Je viens de comprendre. Le nom de fonction "Log" posait problème à PHP.
Tout ces neurones grillés pour ça ...
Merci encore !!!
Sujet Résolu
Je viens de comprendre. Le nom de fonction "Log" posait problème à PHP.
Tout ces neurones grillés pour ça ...
Merci encore !!!
Sujet Résolu
ReDLoG
Si tu avais respecté une convention d'écriture des noms de fonction en associant verbe+nom avec syntaxe camel case, tu aurais "évité" le piège... ;-)
Tony
Je prends note pour la suite
J'ai réussi à créer des requêtes SQL dans des fonction en me servant de séquences initialisées en dehors de la même fonction. Cela ne m'a posé aucun problème. Donc je ne pense pas que cela vienne de là.
Les éléments suivants au sein de la fonction ont également échoué :
Et
J'ai essayé également d'initialiser l'ensemble des variables requises dans la fonction mais toujours KO :
Le truc c'est que :
- si je commente la fonction il écrit dans le fichier le "test1"
- si je dé-commente la fonction il écrit rien du tout
Je sèche ...
Les éléments suivants au sein de la fonction ont également échoué :
fwrite($GLOBALS['fichier_log'], $texte_a_loguer);
Et
global $fichier_log; $fichier = $fichier_log; fwrite($fichier, $texte_a_loguer);
J'ai essayé également d'initialiser l'ensemble des variables requises dans la fonction mais toujours KO :
<?php /* Logs */ $filename = "L:\Projet MIN\XML PHP\log.txt"; $mode = 'a'; $texte_a_loguer = "\nTest1"; $fichier_log = fopen($filename, $mode); fwrite($fichier_log, $texte_a_loguer); fclose($fichier_log); function Log() { $filename = "L:\Projet MIN\XML PHP\log.txt"; $mode = 'a'; $texte_a_loguer = "\nTest2"; $fichier_log = fopen($filename, $mode); fwrite($fichier_log, $texte_a_loguer); fclose($fichier_log); } Log(); ?>
Le truc c'est que :
- si je commente la fonction il écrit dans le fichier le "test1"
- si je dé-commente la fonction il écrit rien du tout
Je sèche ...
global $fichier_log déclare une variable qui pourra être utilisée en-dehors de la fonction, problème c'est que tu affectes une valeur à $fichier_log EN-DEHORS de la fonction, donc fwrite($fichier_log, utf8_encode($texte_a_loguer)); ne fonctionne pas car $fichier_log est vide à l'intérieur de la fonction Log(), enfin ce n'est que mon avis...
Extrait de l'article consultable sur http://www.phpdebutant.org/article41.php
8 . Variables globales et statiques
Nous avons vu comment passer des variables à une fonction, il existe 2 types particuliers de variables utilisées souvent dans les fonctions. Ce sont les variables globales et statiques.
Une variable globale déclarée à l'intérieur d'une fonction à l'aide de l'instruction global permet à une variable d'être accessible en dehors de la fonction, vous pouvez accéder à cette fonction par son nom ou à l'aide du tableau $GLOBALS.
1 - Variables globales :
Ici $cpt sera accessible en dehors de glob_fonc après son appel et il aura la valeur 1, vous pouvez aussi y accéder avec sa valeur dans le tableau de globales c'est à dire $GLOBALS["cpt"].
8 . Variables globales et statiques
Nous avons vu comment passer des variables à une fonction, il existe 2 types particuliers de variables utilisées souvent dans les fonctions. Ce sont les variables globales et statiques.
Une variable globale déclarée à l'intérieur d'une fonction à l'aide de l'instruction global permet à une variable d'être accessible en dehors de la fonction, vous pouvez accéder à cette fonction par son nom ou à l'aide du tableau $GLOBALS.
1 - Variables globales :
<?php function glob_fonc() { global $cpt; $cpt = 1; } ?>
Ici $cpt sera accessible en dehors de glob_fonc après son appel et il aura la valeur 1, vous pouvez aussi y accéder avec sa valeur dans le tableau de globales c'est à dire $GLOBALS["cpt"].
Et le contraire est donné ici : https://www.php.net/manual/fr/language.variables.scope.php
Extrait : Exemple avec global
Le script ci-dessus va afficher la valeur 3. En déclarant globales les variables $a et $b locales de la fonction somme(), toutes les références à ces variables concerneront les variables globales.
Malgré l'interprétation erronée, ton exemple fonctionne car la variable globale $cpt n'étant pas définie, elle est créée au moment de l'appel de la fonction.
En revanche mon exemple infirme ton interprétation du fait que les variables $a et $b sont déclarée avant l'interprétation du code de la fonction et donc du global.
Bonne prog !
Extrait : Exemple avec global
<?php $a = 1; $b = 2; function somme() { global $a, $b; $b = $a + $b; } somme(); echo $b; ?>
Le script ci-dessus va afficher la valeur 3. En déclarant globales les variables $a et $b locales de la fonction somme(), toutes les références à ces variables concerneront les variables globales.
Malgré l'interprétation erronée, ton exemple fonctionne car la variable globale $cpt n'étant pas définie, elle est créée au moment de l'appel de la fonction.
En revanche mon exemple infirme ton interprétation du fait que les variables $a et $b sont déclarée avant l'interprétation du code de la fonction et donc du global.
Bonne prog !
Ok je ne connaissais pas cette particularité de PHP, comme j'apprends (et je continue d'apprendre, la preuve...) en autodidacte à partir de tutos PHP sur le net, ta remarque m'apprends une chose en plus. Merci d'avoir prit le temps de l'explication et le lien de la source documentaire!
Bonne continuation
Bonne continuation