-1

1 と 1 の PHP エクスポート スクリプトを使用しています。

<?php
//ENTER THE RELEVANT INFO BELOW
$mysqlDatabaseName ='db123456789';
$mysqlUserName ='dbo123456789';
$mysqlPassword ='myPassword';
$mysqlHostName ='db1234.perfora.net';
$mysqlExportPath ='chooseFilenameForBackup.sql';

//DONT EDIT BELOW THIS LINE
//Export the database and output the status to the page
$command='mysqldump --opt -h' .$mysqlHostName .' -u' .$mysqlUserName .' -p' .$mysqlPassword .' ' .$mysqlDatabaseName .' > ~/' .$mysqlExportPath;
exec($command,$output=array(),$worked);
switch($worked){
    case 0:
        echo 'Database <b>' .$mysqlDatabaseName .'</b> successfully exported to <b>~/' .$mysqlExportPath .'</b>';
        break;
    case 1:
        echo 'There was a warning during the export of <b>' .$mysqlDatabaseName .'</b> to <b>~/' .$mysqlExportPath .'</b>';
        break;
    case 2:
        echo 'There was an error during export. Please check your values:<br/><br/><table><tr><td>MySQL Database Name:</td><td><b>' .$mysqlDatabaseName .'</b></td></tr><tr><td>MySQL User Name:</td><td><b>' .$mysqlUserName .'</b></td></tr><tr><td>MySQL Password:</td><td><b>NOTSHOWN</b></td></tr><tr><td>MySQL Host Name:</td><td><b>' .$mysqlHostName .'</b></td></tr></table>';
        break;
}
?>   

私がそれを実行している場合、取得Strict Standards: Only variables should be passed by reference inし、この行を指します

exec($command,$output=array(),$worked);

スクリプトをどのように適応させる必要がありますか?

4

3 に答える 3

5

$outputを呼び出す前に定義する必要がありますexec

$output = array();
exec($command, $output, $worked);

エラーが発生するのは、PHP がその場で作成された値を参照として渡されることを好まないためです (ただし、この場合、より高度なコンパイラにとっては、これが問題にならないことは明らかです)。

于 2013-01-23T09:23:43.700 に答える
1

関数呼び出し内で割り当てるのではなく、次のように呼び出します。

exec($command, $output, $worked);

ちなみに、$outputvarを最初に初期化する必要はありません。

于 2013-01-23T09:29:33.560 に答える
1

上記の私のコメントで強調されているように、これはあなたが犯したほんの少しの間違いであり、修正するのは非常に簡単です。

一般に、変数は参照によってのみ渡すことができますが、そのような参照渡し関数パラメーターの式を渡しました。

式を指定する代わりに変数を渡すと、問題が修正され、警告が消えます。

たとえば、

$output             # variable

それ以外の

 $output = array()  # expression

2番目のパラメーター。


おもしろ情報:このような参照パラメータによる戻りの変数タイプは、入力ではなく戻りタイプです。つまり$output 、変数を渡す前に配列にする必要はありません。変数を渡すだけで、配列が返されます。

于 2013-01-23T09:40:20.427 に答える