fonction RETURN inopérante

WRInaute discret
Bonjour
Ca parait tout simple et pourtant ça ne marche pas
1. Dans un fichier externe situé 1 niveau plus haut que le fichier appelant, disons fonctions.php :
Code:
function scan($chemin)
  {
    $nb = 0;
    $repertoire = opendir($chemin);
    while($fichier = readdir($repertoire))
      {
        if ($fichier != "." && $fichier != "..") $nb++;
      }
    closedir($repertoire);
    echo $nb; // juste pour vérifier et ça marche
    return $nb;
  }
2. Dans le fichier appelant, disons page.php :
Code:
include(../fonctions.php);
$cumul = 0;
scan("repertoire_1");
$cumul += $nb;
scan("repertoire_2");
$cumul += $nb;
...
echo $cumul;
$cumul reste désespérément vide (les $nb intermédiaires aussi)
le return est inopérant
readfile avec adresse absolue ne marche pas mieux
Merci de votre attention
 
WRInaute passionné
Vu que tu retourne une valeur cette valeur doit être inscrite dans une variable.

Code:
include(../fonctions.php);
$cumul = 0;
$nb=scan("repertoire_1");
$cumul += $nb;
$nb2=scan("repertoire_2");
$cumul += $nb2;
...
echo $cumul;
 
WRInaute passionné
ou alors il faut donner à $nb une visibilité globale en la déclarant "global" dans fonction:
Code:
function scan($chemin)
  {
    global $nb = 0;
    $repertoire = opendir($chemin);
    while($fichier = readdir($repertoire))
      {
        if ($fichier != "." && $fichier != "..") $nb++;
      }
    closedir($repertoire);
    echo $nb; // juste pour vérifier et ça marche
  }
dans ce cas,pas besoin de return, et ton code du premier post ($cumul +=$nb;) fonctionnera.
Cette technique peut être intéressante si tu dois réutiliser le résultat de la fonction plusieurs fois. Au lieu de l'appeler plusieurs fois, ou bien d'avoir à faire une copie locale, le résultat du dernier appel reste disponible.
 
WRInaute discret
Merci de votre aide

ABCWEB : inchangé malgré déclaration $cumul = 0;
MikeR : apparemment mon serveur (dédié Sivit) n'aime pas global > erreur 500

Problème Apache ? (n'y connait que pouic !)
 
WRInaute passionné
T'as enlevé le echo de la fonction?

Pas sur que ça lui plaise quand tu le passes dans une variable
 
WRInaute discret
ABCWEB :
non pas supprimé car j'affiche là le nombre rencontré dans chaque catégorie ($chemin)
Ma fonction est un chouia plus compliquée :
Code:
function scantexte($chemin, $titre, $count)
	{
		$nb = 0;
		$repertoire = opendir($chemin);
		while($fichier = readdir($repertoire))
			{
				if (substr($fichier,-4) == ".gif" && $fichier != "." && $fichier != "..") $nb++;
			}
		closedir($repertoire);
		echo '<span style="color:#666666;">&#9658;</span><a href="'.$chemin.'/index.php">'.str_replace(" ", "&nbsp;", $titre).'</a>';
		if ($count == "1")
			{
				echo '<sup>&nbsp;('.$nb.')</sup> ';
				return $nb;
			}
		else echo ' ';
	}
Et j'ai plusieurs fonctions du même type dans le fichier (pour les images ...)
Voir exemple sur http://www.animated-gifs.eu/category_animals/animals-fr-b.php
(fonction appliquée pour catégorie précédées d'un triangle flèche gris)
 
WRInaute passionné
dans ce cas essaie ça

Code:
function scantexte($chemin, $titre, $count)
   {
      $nb = 0;
      $repertoire = opendir($chemin);
      while($fichier = readdir($repertoire))
         {
            if (substr($fichier,-4) == ".gif" && $fichier != "." && $fichier != "..") $nb++;
         }
      closedir($repertoire);
      echo '<span style="color:#666666;">&#9658;</span><a href="'.$chemin.'/index.php">'.str_replace(" ", "&nbsp;", $titre).'</a>';
      if ($count == "1")
         {
            echo '<sup>&nbsp;('.$nb.')</sup> ';
            $GLOBALS["nb"]=$nb;
         }
      else echo ' ';
   }
 
Discussions similaires
Haut