2

コードのさまざまな部分やさまざまなページで使用したいので、関数にしたいコードがいくつかあります。コードをどこにでも配置する必要はありません。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'); include('phpseclib / Net / 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);

しかし、それはサーバーエラーで戻ってきます。この機能は可能ですか?それとも、使用するたびに必要な場所にコードを配置する必要がありますか?

4

2 に答える 2

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);
于 2013-02-05T23:36:14.610 に答える
-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
    ");
}
于 2013-02-05T23:32:38.730 に答える