web-dev-qa-db-ja.com

PHP致命的なエラー:呼び出し時の参照渡しが削除されました

古いスクリプトがあり、最近このエラーが発生します。

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

そして、そのファイルの100行目付近は次のようになります。

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]);
    }
}

エラーの原因と修正方法を教えてください。私は開発者ではないので、ゆっくりと読んでください。

9
Anton

_array_Push_で配列へのポインターを渡そうとしています。そのため、致命的なエラーが発生します。単に使用:

_array_Push( $image_set, $images[fname] );
_

注:array_Push()は、最初の引数が配列でない場合に警告を発します。

11
hjpotter92

サイトのphpがアップグレードされているか、<php 5.3のコードを再利用しているようです

on(&$ image

注:関数呼び出しに参照記号はありません-関数定義にのみあります。関数定義だけでも、参照によって引数を正しく渡すのに十分です。 PHP 5.3.0以降では、foo(&$ a);で&を使用すると、「call-time pass-by-reference」は非推奨であるという警告が表示されます。 of PHP 5.4.0、call-time pass-by-referenceが削除されたため、これを使用すると致命的なエラーが発生します。

結果は未定義であるため、他の式は参照渡ししないでください。

23
Pascal

Joomlaルートディレクトリに移動して実行します。

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

これでうまくいきます。

0
yarzombo