PHP - fwrite dans une fonction

Fermé
Tony - Modifié par Tony le 5/05/2012 à 20:30
 ReDLoG - 7 mai 2012 à 15:04
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.

<?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:

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
1
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... ;-)
0
Je prends note pour la suite
0
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é :

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 ...
0
Ceci fonctionne très bien :
<?php
function writeText($Text) {
    $handle=fopen('test.txt', 'a');
    fwrite($handle, $Text);
    fclose($handle);
}
writeText("Test1"); //ecrit Test1 dans le fichier test.php
?>
0
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...
-1
Flachy Joe Messages postés 2102 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 260
6 mai 2012 à 20:58
c'est justement le contraire : le mot clef global permet de récupérer la valeur d'une variable globale à l'intérieur de la fonction...
0
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 :

<?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"].
0
Flachy Joe Messages postés 2102 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 260
7 mai 2012 à 14:47
Et le contraire est donné ici : https://www.php.net/manual/fr/language.variables.scope.php
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 !
0
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
0