2

私の問題は、次のように配列値をサーバーの名前に設定することです。

$appserver[$i]=`grep $ip[2] /etc/hosts |awk '{print $2}'`;

後で、サーバーが稼働しているかどうかを確認するテストを行います (wget を使用)。テストが失敗した場合、touch を使用してその名前のファイルを作成することで、そのサーバーがダウンしていることを追跡します。

$touch=`touch /home/steve/data/$appserver[$i];

ファイルが正常に作成されます。後でファイルが存在するかどうかをテストするときに、true と評価されることはありません。

if(file_exists('/home/steve/data/$appserver[$i])) {

$appserver[$i] の新しい変数を作成し、それに対してテストするなど、いくつかの異なることを試しましたが、これも機能しません。

RHEL 5 で php 5.1.6 を実行しています。

完全なコードは次のとおりです。

  $appserver[$i]=`grep $ip[2] /etc/hosts |awk '{print $2}'`;
  echo "appserver[i] = $appserver[$i]\n";
   $get=`wget $key->url 2> /dev/null`;
   if(file_exists('/home/user/Start')) {
            $color[$i]="green";
            $rm=`rm -rf /home/user/Start`;
    }
    else {
            $color[$i]="red";
            if($hostname=="xxxxx" ) {
                    **if(file_exists('/home/user/data/$appserver[$i]))**  {**
                        echo "do nothing appserver file exists\n";
                        $touch=`touch /home/steve/data/notmailed`;
                        }
                    else {
                    echo "No app file mailed alert\n";
                    $touch=`touch /home/user/data/$appserver[$i]`;
                    }
            }
    }

ありがとうございました。

4

3 に答える 3

1

そのはず:

if(file_exists("/home/steve/data/$appserver[$i]")) {
于 2012-09-19T14:17:56.780 に答える
1
if(file_exists('/home/steve/data/$appserver[$i]')) {

'引用符で囲まれた文字列は変数値を補間しないため、リテラル名が$appserver[$i]. "代わりに引用符を使用してください:

if(file_exists("/home/steve/data/$appserver[$i]")) {
于 2012-09-19T14:18:21.350 に答える
0

これを試して:

$appserver[$i] = "grep $ip[2] /etc/hosts |awk '{print $2}'";

//...

if(file_exists("/home/steve/data/$appserver[$i]"))
{
    //...
}

"宣言された文字列に解析された変数の内容が必要な場合は、必ずdouble-qoutes ( ) を使用してください。

于 2012-09-19T14:18:06.893 に答える