由于某种原因,该代码无法在我的编译器中运行。目的(作为大型项目的一部分)是要对特定主机执行ping 3次或直到成功为止,以先到者为准。它不会产生任何错误,只是终止。如果我从while语句中删除第二个条件,它就可以正常工作,但是如果成功执行ping操作,终止循环将需要更复杂的操作。我已经有一段时间没有接触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");
答案 0 :(得分:5)
你会踢自己:
while( ( $pass < 3 ) && ( $result = 0 ) ) {
应该使用双精度等于-这是一个比较,而不是赋值:
while( ( $pass < 3 ) && ( $result == 0 ) ) {
答案 1 :(得分:4)
您不需要第二个变量 (?s) # Dot-all modifier
^ # BOS
\[ # Open [
\s* # optional wsp
" # Open dbl quote
[^"\\]* # optional not dbl quote nor escape
(?: \\ . [^"\\]* )* # optional escape anything, not dlb quote nor escape
" # Close dbl quote
(?: # Cluster
\s* , \s* # opt wsp, comma, opt wsp
" # Same as above
[^"\\]*
(?: \\ . [^"\\]* )*
"
)* # End cluster, do 0 to many times
\s* # optional wsp
\] # Close ]
。请改用https://regex101.com/r/mT66Nd/1。
$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";
}
}
答案 2 :(得分:0)
您的第二个条件写错了。将其更改为$result === 0
答案 3 :(得分:0)
使用不等于的运算符。
while( ( $pass < 3 ) && ( $result == 0 ) )
这应该有效。