Вот расширенный подход к этому. Я добавил проверку isCLI()
, если вы запустили свой скрипт как в CLI, так и на веб-сервере. В противном случае сервер мог бы использовать мою функцию. Это решение будет запрашивать у пользователя, проверять ввод и повторно запрашивать пользователя для фиксированного ввода, если это необходимо. I rtrim()
, потому что, если пользователь использует возврат, чтобы отправить свою запись, которая может быть добавлена к записи. Проверка не нужна, просто не передавайте функцию в этом случае.
function isCLI() {
return (php_sapi_name() === 'cli' OR defined('STDIN'));
}
function userPrompt($message, $validator=null) {
if (!isCLI()) return null;
print($message);
$handle = fopen ('php://stdin','r');
$line = rtrim(fgets($handle), "\r\n");
if (is_callable($validator) && !call_user_func($validator, $line)) {
print("Invalid Entry.\r\n");
return userPrompt($message, $validator);
} else {
print("Continuing...\r\n");
return $line;
}
}
// Example =====================
function validateSetLangCode($str) {
return preg_match("/^[A-Z0-9]{3}-[A-Z]{2}$/", $str);
}
$code = userPrompt("Please enter the set / language codes. Use the format 'SET-EN', where SET is the three-letter set code and EN is the two-letter lang code. \r\n", 'validateSetLangCode') ?: 'SET-EN';
var_dump($code);
Взгляните на класс NetworkInformation.Ping .
Пример:
Использование:
PingTimeAverage("stackoverflow.com", 4);
Реализация:
public static double PingTimeAverage(string host, int echoNum)
{
long totalTime = 0;
int timeout = 120;
Ping pingSender = new Ping ();
for (int i = 0; i < echoNum; i++)
{
PingReply reply = pingSender.Send (host, timeout);
if (reply.Status == IPStatus.Success)
{
totalTime += reply.RoundtripTime;
}
}
return totalTime / echoNum;
}
Так же, как Sidenote для этого. У SourceForge уже есть проект на SourceForge, что вы хотите. Это также включало внедрение ICMP (RFC 792)