web-dev-qa-db-fra.com

PHP Erreur fatale: le délai de référence des appels a été supprimé.

J'ai un vieux script et dernièrement, j'obtiens cette erreur:

Fatal error: Call-time pass-by-reference has been removed in /****/******/public_html/****/cp-list-summary.php on line 100

Et cela ressemble à ceci autour de la ligne 100 de ce fichier:

if ($row[images])
{
    $image_set = array ();
    $result = mysql_query ('SELECT fname FROM ' . $dbimgs . ' WHERE listid=\'' . $_GET['id'] . '\' ORDER BY id ASC', $link);
    while ($images = mysql_fetch_array ($result))
    {
        array_Push (&$image_set, $images[fname]);
    }
}

Qu'est-ce qui cause l'erreur et comment y remédier? Je ne suis pas un développeur, alors veuillez ralentir.

9
Anton

Vous essayez de passer un pointeur sur votre tableau dans array_Push. C'est pourquoi l'erreur fatale est rencontrée. Utilisez simplement:

array_Push( $image_set, $images[fname] );

Remarque:array_Push()émettra un avertissement si le premier argument n'est pas un tableau.

11
hjpotter92

On dirait que votre site php a été mis à jour ou que vous réutilisez du code de <php 5.3

Supprimez simplement le & on (& $ image

Remarque: Il n'y a pas de signe de référence sur un appel de fonction - uniquement sur les définitions de fonction. Les définitions de fonction suffisent à elles seules pour transmettre correctement l'argument par référence. À partir de PHP 5.3.0, vous recevrez un avertissement indiquant que "le temps passé avec référence à l'appel" est obsolète lorsque vous utilisez & in foo (& $ a) ;. Et à compter de PHP 5.4.0, le délai de référence des appels a été supprimé. Son utilisation entraînerait une erreur fatale.

Aucune autre expression ne doit être passée par référence, car le résultat est indéfini.

23
Pascal

Entrez dans le répertoire racine de Joomla et exécutez:

find ./ -type f -name "*.php" -exec sed -i 's/\&\$/\$/g' {} +

Cela fonctionne pour moi.

0
yarzombo