Исключите ping из апачских журналов ошибок (работал от должностного лица PHP),

Я не уверен, как полнофункциональный Ваш взгляд, но у Вас есть Вы, попробовал Zimbra. Очень полнофункциональный и мощный (возможно, больше, чем Ваш поиск), и имеет выпуск с открытым исходным кодом.

0
задан 31 December 2010 в 13:53
2 ответа

необходимо изменить что-то в функцию - в основном, должностное лицо не фиксирует стандартную ошибку, которая записана в файл журнала - необходимо изменить функцию следующим образом

function PingHost($strIpAddr) {
    exec(escapeshellcmd('ping -q -W 1 -c 1 '.$strIpAddr.' 2>&1'), $dataresult, $returnvar);
    if (substr($dataresult[4],0,3) == "rtt") {
            //We got a ping result, lets parse it.
                    $arr = explode("/",$dataresult[4]);
                    return ereg_replace(" ms","",$arr[4]);
    } elseif (substr($dataresult[3],35,16) == "100% packet loss") {
            //Host is down!
                    return "Down";
    } elseif ($returnvar == "2") {
            return "No DNS";
    }
    if($returnvar == 68)
            return "Unknown host";

}

1
ответ дан 4 December 2019 в 14:59

Это довольно старый пост, но, когда я нашел его, погружаясь в аналогичную проблему, с которой я столкнулся, я подумал, что это может помочь кому-то другому поделиться.

Я написал следующая функция для обработки всех вызовов функций командной строки в моем приложении. Он ведет себя аналогично exec с несколькими полезными дополнениями:

  • Принимает ассоциативный массив аргументов, которые экранируются с помощью escapeshellarg , а затем заменяются в команду с помощью strtr
  • . Сама команда оболочки с использованием escapeshellcmd
  • Перенаправляет stderr на стандартный вывод с помощью 2> & 1 , как упомянуто выше silviud

Функция выглядит следующим образом:

/**
 * @param string   $command Use ':param_key' to escape arguments.
 * @param string[] $output
 * @param int|null $return
 * @param string[] $args    Use format [ 'param_key' => 'param_value' ].
 *
 * @return string
 */
function safe_exec( $command, &$output = null, &$return = null, $args = array() ) {
    // Escape all args
    foreach( $args as $arg_key => $arg_value ) {
        $args[ ':' . $arg_key ] = escapeshellarg( $arg_value );
        unset( $args[ $arg_key ] );
    }

    // Escape command and replace params
    $command = strtr( escapeshellcmd( $command ), $args ) . ' 2>&1';

    // Exec and return
    return exec( $command, $output, $return );
} // safe_exec

Для быстрого примера использования , вот как я использую его для получения статуса лотка наших принтеров Ricoh:

/**
 * These values are entered by the user (which is why we escape them), 
 * but for example:
 * 
 * $address = '10.243.224.42'
 * $tray = 1
 */

$oid = '1.3.6.1.4.1.367.3.2.1.2.20.2.2.1.11.2.' . $tray;

$command = "snmpwalk -v 2c -c public :address :oid";
safe_exec( $command, $output, $return, array(
    'address' => $address,
    'oid' => $oid,
) );
1
ответ дан 4 December 2019 в 14:59

Теги

Похожие вопросы