if (strpos(trim($status_line), "OK", 4) !== false)
{
$status = "ok_image";
}
else
{
$status = "error_image";
}
Генерация иконки для репорта на PHP
Такая ситуация:
У меня есть репорт в формате html, он генерится из под Юникса.
Есть страничка на сайте, на которой должна отображатся иконка статуса этого репорта (Ok или ERROR).
Подскажите плс, как на РНР сделать так чтобы из этого html файла вычитывалось значение какой-то переменной (Ok или Error) - оно тоже будет передаватся из юникса в эту стрн., но будет заккоменчено, и соответственно выбирало б какую иконку грузить.
Заранее спасибо.
в чем именно проблема? как открыть файл и прочитать строку из него?
Код:
$n=file("report.html");
$n=trim($n[0]);
if ($n == "ok") echo '<img src="ok.gif">';
else echo '<img src="err.gif">';
$n=trim($n[0]);
if ($n == "ok") echo '<img src="ok.gif">';
else echo '<img src="err.gif">';
В более сложном случае нужно парсить файл (тоже элементарно)
Да, броблема именно в том как открыть файл и прочитать строку из него. Вот кусок кода:
---------------------------------
report.html
[COLOR="Red"]!!! Здесь будет закоменчена переменная типа:[/COLOR] [COLOR="Blue"]<!-- status="OK/Error" --> [/COLOR]
<html><head><title>Report page</title></head><body><pre>
<a name="TOP"><b><center><h4>Systems check report</h4></center></b></a><hr color=black>
<a href="#ARE001"><h5>Blabla1 check report</a>
<font color='red'>Test has Errors</font>
<a href="#ENV001">Blabla2 check report</a>
<font color='red'>Test has Errors</font>
<a href="#PAT001">Blabla3 check report</a>
<font color='green'>Test Passed</font>
<a href="#RPT001">Blabla4 check report</a>
<font color='green'>Test Passed</font>
<a href="#SEC001">Blabla5 check report</a>
<font color='green'>Test Passed</font>
<hr color=black>
---------------------------------
Репорт состоит из где-то 10 страниц. И вот нужно как-то вычитать эту переменную.
to: int
trim не подходит так как файл содержит дофига инфы, и сама иконка будет показывать статус (общий) репорта, а также являтся ссылкой на сам репорт.
<?
$handle = fopen("report.html", "r");
$status = ltrim(rtrim(fscanf($handle, "%s\n"), "-->"),"<!--");
if ($status=="OK")....
?>
to t-34:
Твой метод мне понятен, но не могу понять почему после долгих испытаний переменная $status все время принимает значение "Array".
to int:
Буду наверное статус репорта кидать в отдельный файл, и воспользуюсь твоей подсказкой, хотя не хочется создавать еще пару десятков лишних файлов, т.к. репортов очень много.
В общем, всем огромное спасибо.
[COLOR="DarkGreen"]<?php
[COLOR="Blue"]$handle[/COLOR] = fopen ("[COLOR="Red"]report.htm[/COLOR]", "r");
while (!feof ([COLOR="Blue"]$handle[/COLOR])) {
[COLOR="blue"]$line[/COLOR] = fgets ([COLOR="blue"]$handle[/COLOR], 1024);
if (eregi ("<!--(.*)-->", [COLOR="blue"]$line[/COLOR], [COLOR="blue"]$out[/COLOR])) {
[COLOR="blue"]$status[/COLOR] = [COLOR="blue"]$out[/COLOR][1];
break;
}
}
fclose([COLOR="blue"]$handle[/COLOR]);
if ([COLOR="blue"]$status[/COLOR] == "OK") echo '[COLOR="red"]<img src="files/ok.jpg">[/COLOR]';
else echo '[COLOR="red"]<img src="files/er.jpg">[/COLOR]';
?>[/COLOR]
Главное, что работает.
можно было намного проще без всяких регулярок (тем более убогих ereg) с помощью обычных строковых функций...
Цитата: kotelius
Если кому-то интересно, то вот как я все это реализовал:
[COLOR=DarkGreen]<?php
[COLOR=Blue]$handle[/COLOR] = fopen ("[COLOR=Red]report.htm[/COLOR]", "r");
while (!feof ([COLOR=Blue]$handle[/COLOR])) {
[COLOR=blue]$line[/COLOR] = fgets ([COLOR=blue]$handle[/COLOR], 1024);
if (eregi ("<!--(.*)-->", [COLOR=blue]$line[/COLOR], [COLOR=blue]$out[/COLOR])) {
[COLOR=blue]$status[/COLOR] = [COLOR=blue]$out[/COLOR][1];
break;
}
}
fclose([COLOR=blue]$handle[/COLOR]);
if ([COLOR=blue]$status[/COLOR] == "OK") echo '[COLOR=red]<img src="files/ok.jpg">[/COLOR]';
else echo '[COLOR=red]<img src="files/er.jpg">[/COLOR]';
?>[/COLOR]
Главное, что работает.
[COLOR=DarkGreen]<?php
[COLOR=Blue]$handle[/COLOR] = fopen ("[COLOR=Red]report.htm[/COLOR]", "r");
while (!feof ([COLOR=Blue]$handle[/COLOR])) {
[COLOR=blue]$line[/COLOR] = fgets ([COLOR=blue]$handle[/COLOR], 1024);
if (eregi ("<!--(.*)-->", [COLOR=blue]$line[/COLOR], [COLOR=blue]$out[/COLOR])) {
[COLOR=blue]$status[/COLOR] = [COLOR=blue]$out[/COLOR][1];
break;
}
}
fclose([COLOR=blue]$handle[/COLOR]);
if ([COLOR=blue]$status[/COLOR] == "OK") echo '[COLOR=red]<img src="files/ok.jpg">[/COLOR]';
else echo '[COLOR=red]<img src="files/er.jpg">[/COLOR]';
?>[/COLOR]
Главное, что работает.
допустим $status_line - результат fgets
статус записывается так <!--OK/Error-->
Код:
Я просто не сильный спец в РНР, но иногда бывают задачи кое-что реализовать на нем, вот и ламаю себе голову :)