Warning: Call-time pass-by-reference... !?

Eléphant du PHP | 231 Messages

14 janv. 2006, 12:35

Voici ma fonction :
function list_folder($path, $array)
{
	global $count_glob;

	if($path != '.')
	{
		$array[$count_glob] = $path;
		$count_glob ++;
	}

	$rep = $path;

	$ptr = opendir($rep);

	while(false !== ($file = readdir($ptr)))
		if($file != "." && $file != ".." && $file != "data" && $file != "index.php" && $file != "conf.txt" && $file != "thumb")
			if(is_dir($rep.'/'.$file))
				list_folder($rep.'/'.$file, &$array);
	closedir($ptr);
}
L'erreur qu'elle me retourne :
Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /home/derniere/domains/derniere-bataille.net/public_html/test/galerie/index.php on line 69
La ligne 69 :
list_folder($rep.'/'.$file, &$array);
C'est la premiere fois que j'ai ce type d'erreur ...
Je comprend pas d'ou elle viens :roll:

Pouvez vous m'aider ? Merci :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

14 janv. 2006, 12:54

L'erreur vient du faite que tu passe l'argument (tableau) par référence => &
list_folder($rep.'/'.$file, &$array);
et que ce n'est pas précisé dans la fonction, change le parametre de la fonction en y ajoutant un &:
function list_folder($path, &$array) 
{
...

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 231 Messages

14 janv. 2006, 13:53


Mammouth du PHP | 1311 Messages

14 janv. 2006, 16:08

voici un debut de reponse
Notez qu'il n'y a pas de signe de référence dans l'appel de la fonction, uniquement sur sa définition. La définition de la fonction est suffisante pour passer correctement des arguments par référence. Dans les versions récentes de PHP, vous devriez recevoir une alerte disant que "Call-time pass-by-reference" est obsolète lorsque vous utilisez un & dans foo(&$a);.
tente
function list_folder($path, &$array)
{
    global $count_glob;

    if($path != '.')
    {
        $array[$count_glob] = $path;
        $count_glob ++;
    }

    $rep = $path;

    $ptr = opendir($rep);

    while(false !== ($file = readdir($ptr)))
        if($file != "." && $file != ".." && $file != "data" && $file != "index.php" && $file != "conf.txt" && $file != "thumb")
            if(is_dir($rep.'/'.$file))
                list_folder($rep.'/'.$file, $array);
    closedir($ptr);
}

Eléphant du PHP | 231 Messages

14 janv. 2006, 16:10

cool 8)

Merci

heu une autre question ... avec la fonction readdir comment on fait pour les fichiers soit retournée dans l'ordre alphabétique ? :roll:

Mammouth du PHP | 1311 Messages

14 janv. 2006, 16:19

tu met tes fichier dans un tableau et tu fait un tri

Eléphant du PHP | 231 Messages

14 janv. 2006, 16:21

heu :?

Mammouth du PHP | 19672 Messages

14 janv. 2006, 17:37

Dans un tableau (array())
Et le tri avec asort() ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 231 Messages

14 janv. 2006, 17:39

j'ai chopper une explication de comment faire : http://php.developpez.com/faq/?page=fic ... ographique

j'vous remercie :wink: