将PHP代码实现到函数中

时间:2013-02-05 23:22:46

标签: php function ssh phpseclib

我想要将一些代码添加到函数中,因为我想将它与代码的不同部分和不同的页面一起使用,而且我不希望在任何地方都有代码。我正在使用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);

但是,这会导致服务器错误。这个功能可以吗?或者我应该在每次想要使用它时将代码放在我需要的地方吗?

2 个答案:

答案 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
    ");
}