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

顺便说一下,$output 变量不必先初始化。

于 2013-01-23T09:29:33.560 回答
1

正如我在上面的评论中强调的那样,这只是你犯的一个小错误,很容易纠正。

一般来说,您只能通过引用传递变量,但您为这种按引用传递函数参数传递了一个表达式。

传递变量而不是给出表达式将解决您的问题,并且警告将消失。

例如使用

$output             # variable

代替

 $output = array()  # expression

对于第二个参数。


有趣的事实:这种通过引用参数返回的变量类型是返回类型,而不是输入类型。这意味着,您不需要$output 在传递变量之前创建一个数组。你只需要传递变量,你就会得到一个数组。

于 2013-01-23T09:40:20.427 回答