我想要将一些代码添加到函数中,因为我想将它与代码的不同部分和不同的页面一起使用,而且我不希望在任何地方都有代码。我正在使用PHPseclib库和类。可以自行运行的代码是:
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('phpseclib/Net/SSH2.php');
$ssh = new Net_SSH2('$address');
if (!$ssh->login('$username', '$password')) {
exit('Login Failed');
}
$sPath = "minecraft/servers/";
$sSavingCode = "server.properties";
$motd = "test";
echo $ssh->exec("cat > $sPath$sSavingCode <<EOF
motd=".$motd."
EOF
");
我想把它变成一个函数,所以我试着这样做:
set_include_path(get_include_path()。PATH_SEPARATOR.'phpseclib'); 包括( 'phpseclib /净/ SSH2.php');
$ssh = new Net_SSH2('$address');
if (!$ssh->login('$username', '$password')) {
exit('Login Failed');
}
function test($motd)
{
$sPath = "minecraft/servers/";
$sSavingCode = "server.properties";
$ssh->exec("cat > $sPath$sSavingCode <<EOF
motd=".$motd."
EOF
");
}
其余代码在函数之外和之上。我试图调用函数:
$motd = "Server";
test($motd);
但是,这会导致服务器错误。这个功能可以吗?或者我应该在每次想要使用它时将代码放在我需要的地方吗?
答案 0 :(得分:4)
您的函数依赖于$ssh
,因此它应作为参数传递:
function test(Net_SSH2 $ssh, $motd)
{
$sPath = "minecraft/servers/";
$sSavingCode = "server.properties";
$ssh->exec("cat > $sPath$sSavingCode <<EOF
motd=".$motd."
EOF
");
}
$ssh = new Net_SSH2('$address');
// ...
test($ssh, $motd);
答案 1 :(得分:-1)
当您需要在函数外定义的$ ssh变量时,您正在访问本地$ ssh变量。
所以在你的函数声明'global $ ssh'并使用它,否则你试图在本地调用exec,这是未定义的。
$ssh = new Net_SSH2('$address');
if (!$ssh->login('$username', '$password')) {
exit('Login Failed');
}
function test($motd)
{
global $ssh;
$sPath = "minecraft/servers/";
$sSavingCode = "server.properties";
$ssh->exec("cat > $sPath$sSavingCode <<EOF
motd=".$motd."
EOF
");
}
或者,预定义的php数组$ Globals允许您在不定义局部变量
的情况下访问这些变量$ssh = new Net_SSH2('$address');
if (!$ssh->login('$username', '$password')) {
exit('Login Failed');
}
function test($motd)
{
$sPath = "minecraft/servers/";
$sSavingCode = "server.properties";
$GLOBALS['ssh']->exec("cat > $sPath$sSavingCode <<EOF
motd=".$motd."
EOF
");
}