По какой-то причине этот код не запускается в моем компиляторе. Намерение (как часть более крупного проекта) состоит в том, чтобы пинговать конкретный хост 3 раза или до успешного завершения, в зависимости от того, что наступит раньше. Ошибок не возникает, просто завершается. Он отлично работает, если я удалю второе условие из оператора while, но тогда мне понадобится что-то более сложное, чтобы завершить цикл при успешном пинге. Я давно не касался PHP, так что, наверное, упустил какую-то глупость.
<?php
function pingAddress($ip) {
//Set variable to limit loops and end if live
$pass = 0;
$result = 0;
//Create conditions for while loop
while( ( $pass < 3 ) && ( $result = 0 ) ) {
//Count loops
$pass++;
//Execute ping
$output=shell_exec('ping -n 1 '.$ip);
//Display ping results for testing purposes
echo "<pre>$output</pre>";
//Check for "TTL" presence
if (strpos($output, 'TTL') !== false)
{
//Notate positive result
$result++;
//Display for testing
echo "Alive";
}
//Display negative result for testing
else
{
echo "Dead";
}
}
}
PingAddress("8.8.8.8");
Возможный дубликат 3 разных равных
Вы можете использовать en.wikipedia.org/wiki/Yoda_conditions, чтобы избежать этой ошибки.






Вы пнете себя:
while( ( $pass < 3 ) && ( $result = 0 ) ) {
Следует использовать двойное равенство - это сравнение, а не присвоение:
while( ( $pass < 3 ) && ( $result == 0 ) ) {
Ваше второе условие написано неправильно. Меняем его на $result === 0
Использовать оператор равенства, а не назначать.
while( ( $pass < 3 ) && ( $result == 0 ) )
Это должно сработать.
Вторая переменная $result вам не нужна. Вместо этого используйте перерыв.
while($pass < 3) {
//Count loops
$pass++;
//Execute ping
$output=shell_exec('ping -n 1 '.$ip);
//Display ping results for testing purposes
echo "<pre>$output</pre>";
//Check for "TTL" presence
if (strpos($output, 'TTL') !== false)
{
//Display for testing
echo "Alive";
break; //exiting while loop
}
//Display negative result for testing
else
{
echo "Dead";
}
}
Вы даже можете писать меньше кода с помощью
while($pass++ < 3) {
Нужен двойной == в
$result = 0, это просто присвоение 0 результату $, а не его тестирование.