Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [php]Backupcontrole via php (https://forum.scholieren.com/showthread.php?t=1380911)

freyk 22-03-2006 20:08

[php] Backupcontrole via php
 
Een van mijn dagtaken op mijn stagebedrijf is het controleren van backupstatus logboeken.
Elke statuslijst (.txt bestand) moet gecontroleert worden en samengevat worden in een controlelijst.
Omdat dit veel tijd vergt, zou ik deze taak gaan willen automatiseren.
Dit zou ik willen doen door middel van een linux-distro, apache met php en (eventueel) mysql.
Het lukt al aardig, maar heb nog een paar problemen.

Probleem 1:
Als ik het volgende doe:
PHP-code:

<?php
echo exec('more systemstates.txt|grep -E "databackup|Systemstate"');
?>

krijg ik maar één uitkomstregel, terwijl er 35 uitkomstregels moeten zijn.

Probleem 2:
Een uitkomst regel zal er zo uit komen te zien
Code:

08-03-2006 19:03 628.623.360 Systemstate AD-OZ-01.bkf
Hoe krijg ik de datum, tijd, bestandsgroote en bestandsnaam, dat ik later uit de comando regel van probleem 1 krijg, gescheiden in een html-tabelletje?

dafelix 22-03-2006 21:35

1.

Kun je niet naar een bestand wegschrijven? dan kun je die weer netjes uitlezen in PHP

exec('command > file.txt');


gebruik passthru

2.

Reguliere expressies

Triloxigen 22-03-2006 23:10

Waarom zou je dit met php doen en niet iets fatsoenlijks met een programmeertaal.
(of wellicht bash)

freyk 23-03-2006 06:59

Citaat:

dafelix schreef op 22-03-2006 @ 22:35 :
1. gebruik passthru
Nu ziet er nu niet goed uit, maar het is een begin :)

Citaat:

dafelix schreef op 22-03-2006 @ 22:35 :
2. Reguliere expressies
Heb je een voorbeeld voor me?

Citaat:

********** schreef op 23-03-2006 @ 00:10 :
Waarom zou je dit met php doen en niet iets fatsoenlijks met een programmeertaal.
(of wellicht bash)

Maar hoe krijg ik dan mijn systemstates netjes in een tabelletje in html?
Voorbeelden zijn altijd leuk :)

Triloxigen 23-03-2006 08:32

Citaat:

freyk schreef op 23-03-2006 @ 07:59 :
Maar hoe krijg ik dan mijn systemstates netjes in een tabelletje in html?
Voorbeelden zijn altijd leuk :)

Wat is het doel van de html tabel of wat word ermee gedaan ofzo?

dafelix 23-03-2006 10:42

reguliere expressies? Daar is genoeg over te vinden hoor

(voor de gemakkelijke gebruiker, kijk op de site bij 't woordje 'te', groot DB met veel reg-expressions

Triloxigen 23-03-2006 10:54

Wat je ook kunt doen, maar iets minder safe is, is exploden op de spatie.

eddie 23-03-2006 13:10

1) met fopen het bestand openen en regel voor regel inlezen
2) lijkt op fixed-width indeling

daarnaast zou ik het in een simpele database zetten, zodat je wat ingewikkeldere statistieken kunt berekenen.

freyk 23-03-2006 19:40

Citaat:

********** schreef op 23-03-2006 @ 09:32 :
Wat is het doel van de html tabel of wat word ermee gedaan ofzo?
Dat zal later uitgeprint worden, om dan in ons archief te bewaren.

En hier vind je een logje dat iedere werkdag gecontroleert moet worden.

eddie 24-03-2006 16:16

Citaat:

freyk schreef op 23-03-2006 @ 20:40 :
En hier vind je een logje dat iedere werkdag gecontroleert moet worden.
Vervelend logje om te parsen...

freyk 24-03-2006 16:39

Het enige wat ik nodig heb is zijn de namen van de server, datum, tijd, bestandsgroote en bestandnaam.
Deze gegevens worden uitgefilterd door grep.

Nigo 02-04-2006 18:36

Waarom sla je deze data, het is immers data, niet op in een database? Zo kun je later nog altijd bepalen in welke vorm het moet worden weergegeven.
Wat betreft het exploden op spatie, dat is natuurlijk niet aan te raden. Je gaat dan uit van een bepaalde grammatica, die op een gegeven moment misschien wel klopt, maar 2 momenten later misschien niet, i.e. bij het toevoegen van een extra parameter ERGENS. Dit zou resulteren in dat de daarop volgende indexes allemaal met 1 worden opgehoogd, leuk voor de zondagmiddag :P
Reguliere expressie is the way to go, of een simpele LL-parser als eerstgenoemde te hoog gegrepen is.

freyk 02-04-2006 19:44

Zoals ik dus zei, een database wil ik liever later.
Ik wil het zo hebben dat deze .txt bestandjes van alle onnodige dingen gefiltert word (via grep), de tekst wat over blijft netjes in een htmltabel komt te staan.

Kunnen jullie me echt geen voorbeeldscriptjes laten zien, hoe ik dit probleem kan oplossen?

dafelix 03-04-2006 09:16

*untested*
Code:

<?PHP
$result = passthru('more systemstates.txt|grep -E "databackup|Systemstate"');

echo "<table>";
foreach ($result as $line) {
  preg_match_all("(\w(\s))+", $line, $matches);
  echp "<tr>";
  echo "<td>". $matches[0] ."</td><td>". $matches[1]."</td>";
  echo "</tr>";
}
echo "</table>";
?>

*untested*

zoiets?

Gimme more beer 03-04-2006 09:39

Hehe, volgens mij maar één foutje (". $matches[0] .") ;)

dafelix 03-04-2006 14:15

Citaat:

Gimme more beer schreef op 03-04-2006 @ 10:39 :
Hehe, volgens mij maar één foutje (". $matches[0] .") ;)
dankje ;)

Overigens, de reguliere epxressie checkt niks, wellicht is zoiets beter (ook deze, untested):

Code:

"^(\d{2}-\d{2}-\d{4}) (\d{2}:\d{2}) (\d{3}.\d{3}.\d{3}) (\w) ([A-Z]{2}-[A-Z]{2}-\d{2}.bkf)$"

freyk 30-04-2006 15:40

Ff een up van mijn topic, om jullie de status van mijn project te melden:

Het lukte me niet om met passthru iets te regelen, dus zocht ik ff verder.
Op google kwam ik het volgende stukje code tegen:
PHP-code:

<?php 
// bron van de betere exec code: http://marc.10east.com/?l=php-windows&m=99389713932525&w=2
echo exec"cmd /c dir c:\\"$b);
for ( 
$i=0;$i<sizeof($b);$i++ ) {
  echo 
htmlspecialchars(trim($b[$i]))."<br>";
  };
?>

Hiermee kon ik de gegevens weergeven, maar nog niet netjes in een tabel. Om dit op te lossen Dus echo'de ik deze gegevens in een celletje.

Helaas kreeg ik niet de kans om een apparte linuxservertje op te zetten, dus ging ik wat prutsen met gepoorte linuxcommando's van cygwin.
PHP-code:

    exec'cmd /c grep -Ei "databackup|systemstate" .\\logs\\systemstates.txt'$b);
for ( 
$i=0;$i<sizeof($b);$i++ ) {
  echo 
htmlspecialchars(trim($b[$i]))."<br>";
  }; 

Werken met variabelen met grep is me ook gelukt:
PHP-code:

  $commandosuperoffice 'cmd /c grep -Ei "hallo1|hallo2'//eerste stukje van de commando
$date "|$datum"// variabele datum
$teken '"'// stukje van de zoekopdracht
$bestandsuperoffice ' .\\logs\\superoffice.txt'// waar in te kijken
$uitvoersuperoffice =$commandosuperoffice.$date.$teken.$bestandsuperoffice;  //alle variabelen samenvoegen
  
exec$uitvoersuperoffice$b); // en ze dan uitvoeren
  
for ( $i=0;$i<sizeof($b);$i++ ) {
  echo 
htmlspecialchars(trim($b[$i]))."<br>";
  }; 


freyk 04-05-2006 21:08

Nee, het laatste stukje met een variabele datum werkt niet.
Want toen hem teste ontdekte ik dat een stukje wat wel werkte, niet achter een commentaar tekentje zat.
Deze werd dus uitgevoerd in plaats van mijn nieuwe code.

Ik zou graag met grep aangegeven zoekwoorden en een datum als variabele, in een tekstdocumentje zoeken en de gevonden dingen in een cel gooien.

Het volgende stukje werkt, maar ik krijg die variabele er niet in:
PHP-code:

exec'cmd /c grep -Ei "zoekwoord1|zoekwoord2|$datum" .\\logs\\bestand.txt'$b);
for ( 
$i=0;$i<sizeof($b);$i++ ) {
  echo 
htmlspecialchars(trim($b[$i]))."<br>";
  }; 

ik weet dat ik \"$datum\" in mijn exec regel moet gooien, maar krijg hem niet werkend.

dafelix 04-05-2006 22:34

[0-9]{2}-[0-9]{2}-[0-9]{4} ?

doe anders 'ns "man grep" en leer reg-expressies :)

freyk 06-05-2006 19:25

Citaat:

dafelix schreef op 04-05-2006 @ 23:34 :
[0-9]{2}-[0-9]{2}-[0-9]{4} ?
doe anders 'ns "man grep"

Die werken wel met in een linuxscriptje dat z'n variabelen heeft, maar niet met mijn script die zijn eigen variabelen heeft.
Maar dat heb ik al weer opgelost :) :
PHP-code:

<?php
$datum 
"6-5-2005";
exec"cmd /c grep -Ei $datum .\\logs\\systemstates.txt"$b);
for ( 
$i=0;$i<sizeof($b);$i++ ) {
  echo 
htmlspecialchars(trim($b[$i]))."<br>";
  };
?>

Helaas zoekt hij nu maar één woord en meerdere zoekwoorden in variabelen opgeven, zoals $zoekwoorden="woord1|woord2", werkt hier niet.

Citaat:

dafelix schreef op 04-05-2006 @ 23:34 :
en leer reg-expressies :)
En daar moet ik me meer in gaan verdiepen. Helaas heb ik daar nog niet de tijd voor.

Dr HenDre 06-05-2006 19:32

toch jammer dat je zn quote aanpast :(

freyk 23-05-2006 19:48

ff een up van mijn topic om de status te melden:

Het is me uiteindelijk gelukt om meerdere variabelen als zoekwoord voor grep te voegen, door de script automatisch laten aan te passen door sed via een andere script.

Alles gaat voorspoedig, maar hik steeds tegen het volgende probleem:
Zoals jullie weten maak ik van de volgende code gebruik om grep aan te roepen, grep te laten zoeken en het resultaat weer te geven.
PHP-code:

<?php
exec
'cmd /c grep -Ei "zoekwoord1|zoekwoord2" .\\logs\\logje.txt'$b);
for ( 
$i=0;$i<sizeof($b);$i++ ) {
  echo 
htmlspecialchars(trim($b[$i]))."<br>";
  };
?>

Maar als ik deze coderegels herhaal (met uiteraard andere zoekwoorden en ander logje),
herhaalt hij steeds het zoekresultaat van de eerste zoekopdracht.

Hoe kan ik ervoor zorgen dat hij normaal de tweede opdracht pakt en deze goed weergeeft zonder de eerste resultaat mee te pakken?

freyk 23-05-2006 21:07

Heb nog ff wat rondgevraagd op got.
Ze vertelden me dat ik "unset" erbij moest gebruiken.

De uiteindelijke code moet dus het volgende zijn:

PHP-code:

<?
  exec( 'cmd /c grep -Ei "zoekwoord1|zoekwoord2" .\\logs\\logje.txt', $b);
  for ( $i=0;$i<sizeof($b);$i++ ) {
    echo htmlspecialchars(trim($b[$i]))."<br>";
  }; 

  unset($b);

  exec( 'cmd /c grep -Ei "zoekwoord3|zoekwoord4" .\\logs\\logje2.txt', $b);
  for ( $i=0;$i<sizeof($b);$i++ ) {
    echo htmlspecialchars(trim($b[$i]))."<br>";
  };
unset($b);
?>


Engadin 24-05-2006 11:28

Waarom gebruik je exec en an grep, waarom niet meteen preg_match, dit kan hetzelfde (naar mijn weten), is sneller, en vormt een kleiner veiligheids risico.


Alle tijden zijn GMT +1. Het is nu 13:30.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.