Это может быть легко, но не для меня.
У меня есть эта функция:
function pingAddress($ip) {
// Read from file
$lines = file('F:\share\result.txt');
foreach($lines as $line)
{
// Check if the line contains the string we're looking for, and print if it does
if (strpos($line, $ip) !== false)
echo $line;
}
}
Текстовый файл выглядит так:
192.168.50.104 UP
192.168.50.105 UP
192.168.50.106 DOWN
192.168.50.107 UP
Если я даю ip 192.168.50.1, например, он возвращает все строки от 192.168.50.1 до 192.168.50.199, и мне нужно, чтобы он возвращал только эту конкретную строку и, если возможно, только то, что после ip: UP или DOWN.
Помощь была бы кстати :-)
Просто добавьте «возврат»; после "echo $line;" Функция останавливается после того, как найдена искомая строка.
function pingAddress($ip) {
// Read from file
$lines = file('F:\share\result.txt');
foreach($lines as $line)
{
// Check if the line contains the string we're looking for, and print if it does
if (strpos($line, $ip) !== false)
echo $line;
return;
}
}
Вам нужно будет проверить, что после IP-адреса есть пробел, чтобы убедиться, что это полный адрес, а не часть другого IP-адреса.
Я также изменил это так, чтобы он читал файл построчно, поэтому, если он находит IP-адрес, он прекращает чтение (и возвращает UP или DOWN). Это экономит чтение всего файла перед поиском...
function pingAddress($ip) {
// Add space for search
$ip .= ' ';
$fp = fopen("a.csv", "r");
while ( $line = fgets($fp) )
{
// Check if the line contains the string we're looking for, and print if it does
if (strpos($line, $ip) !== false)
return trim(substr($line, strlen($ip)));
}
fclose($fp);
return '';
}
Используя strpos(), вы принимаете частичные совпадения, в результате чего 192.168.50.1 будет соответствовать всем вашим примерам.
Вместо этого разделите строку на пробел и проверьте полное соответствие IP. Затем вы можете вернуть часть UP или DOWN.
function pingAddress($ip) {
// Read from file
$lines = file('F:\share\result.txt');
foreach($lines as $line){
$parts = explode(' ', $line);
if ($parts[0] == $ip){
return $parts[1];
}
}
}
echo pingAddress('192.168.50.1'); // nothing returned
echo pingAddress('192.168.50.105'); // UP
Да, если вы сохраняете возвращаемое значение в переменной, вы можете использовать простой if/else, например if ($result == 'UP'){ // echo lime } else { // echo red }
Можно ли также добавить цвет фона для UP и DOWN? как echo "<p style='background-color:lime'>"; и echo "<p style='background-color:red'>";