我正在使用PHP export script from 1 and 1:
<?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);
我应该如何调整脚本?
答案 0 :(得分:4)
您应该在致电$output
之前定义exec
:
$output = array();
exec($command, $output, $worked);
发生错误是因为PHP不喜欢将当场创建的值作为引用传递(尽管在这种情况下,对于更高级的编译器来说,这应该是一个非常明显的问题)。
答案 1 :(得分:1)
不要在函数调用内部分配,只需调用它:
exec($command, $output, $worked);
顺便说一句,$ output var不必先被初始化。
答案 2 :(得分:1)
正如我在上面的评论中所强调的,这只是你犯的一个小错误,这很容易纠正。
通常,您只能通过引用传递变量,但是您传递了一个表达式pass-by-reference function parameter。
传递变量而不是表达式将解决您的问题并且警告将消失。
例如使用
$output # variable
而不是
$output = array() # expression
表示第二个参数。
有趣的事实: 引用参数返回的变量类型是return - not input - types。这意味着,在传递变量之前,您不需要使$output
成为数组。你只需要传递变量就可以得到一个数组。