s1gh Skrevet 22. september 2008 Skrevet 22. september 2008 (endret) Jeg prøver for tiden å lage et lite 'uptime'-script for min hjemmeside. Scriptet skal printe ut oppetiden på serveren, på denne måten: Uptime: X day(s) and X hour(s). Jeg har nå lastet ned uptime.exe fra Microsoft sine nettsider, og bruke denne koden for å lagre innholdet i en .txt-fil: $uptime = exec ("uptime.exe > uptime.txt"); Det som lagres i 'uptime.txt' er følgende: \\S1GH has been up for: X day(s), X hour(s), X minute(s), X second(s) - X er selvfølgelig antall dager, timer, minutter og sekunder. Dette føler jeg blir litt kronglete å bruke på hjemmesiden, så lurer derfor på hvordan jeg kan 'formatere' teksten, sånn at bare enkelte deler blir printet ut. I dette tilfellet: Uptime: X day(s) and X hours(s). - Hvordan gjør man dette? (vet liksom ikke hva jeg skal søke på heller, så Google har ikke akkurat vært min venn). //s1gh Endret 22. september 2008 av Sigh
OISNOT Skrevet 22. september 2008 Skrevet 22. september 2008 (endret) Denne tar inn alt, med teksten bak for dager og timer. Kan tilpasses. $text = '\\S1GH has been up for: 4 day(s), 14 hour(s), 34 minute(s), 5 second(s)'; if (preg_match('/(\d+ day\(s\)), (\d+ hour\(s\))/', $text, $matches)) { //found, put in $matches print_r($matches); } else { //could not find uptime values } Denne bruker mer "vanlige" metoder for dem som ikke kan regex. $text = '\\S1GH has been up for: 4 day(s), 13 hour(s), 4 minute(s), 4 second(s)'; print_r($matches = sscanf(substr($text, strpos($text, ':') + 2), '%d day(s), %d hour(s), %d minute(s), %d second(s)')); Eg lærte regex fra denne boken, anbefales for alle som gjør tekst søk/erstatt. http://books.google.no/books?id=ucwR4KIvExMC&dq Endret 22. september 2008 av OISNOT
s1gh Skrevet 22. september 2008 Forfatter Skrevet 22. september 2008 (endret) Nå vet jeg ikke helt om det er mulig å gjøre det på denne måten, men uansett: $test = exec ("uptime.exe"); print_r($matches = sscanf(substr($test, strpos($test, ':') + 2), '%d day(s), %d hour(s), %d minute(s), %d second(s)')); Dette er det som blir printet: Array ( [0] => 0 [1] => 7 [2] => 11 [3] => 32 ) Fikk også Array + noe annet, når jeg prøvde den andre funksjonen. Er det feil, eller blir det printet på den måten? Edit: Ahh, tror kanskje jeg skjønte det. Det printes ut i forskjellige arrays, som jeg senere kan bruke til å printe det jeg vil, eller? Endret 22. september 2008 av Sigh
Martin A. Skrevet 22. september 2008 Skrevet 22. september 2008 $text = exec( 'uptime.exe' ); $text = substr( $text, strpos( $text, ':' ) +2 ); list( $days, $hours, $minutes, $seconds ) = sscanf( $text, '%d day(s), %d hour(s), %d minute(s), %d second(s)' ); echo "Uptime: {$days} day(s), {$hours} hour(s), {$minutes} minute(s), {$seconds} second(s)";
OISNOT Skrevet 23. september 2008 Skrevet 23. september 2008 Edit: Ahh, tror kanskje jeg skjønte det.Det printes ut i forskjellige arrays, som jeg senere kan bruke til å printe det jeg vil, eller? Ja, for begge metodene blir $matches et array med verdiene. I regex metoden returneres teksten med verdien. I sscanf metoden returneres kun verdiene. For å returnere verdiene med regex kan du endre til: preg_match_all('/(?:(\d+) (day|hour|minute|second)\(s\))+/', $text, $matches)
s1gh Skrevet 23. september 2008 Forfatter Skrevet 23. september 2008 Edit: Ahh, tror kanskje jeg skjønte det.Det printes ut i forskjellige arrays, som jeg senere kan bruke til å printe det jeg vil, eller? Ja, for begge metodene blir $matches et array med verdiene. I regex metoden returneres teksten med verdien. I sscanf metoden returneres kun verdiene. For å returnere verdiene med regex kan du endre til: preg_match_all('/(?:(\d+) (day|hour|minute|second)\(s\))+/', $text, $matches) Ahh, takk. DA skjønner jeg litt mer!
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå