/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Regular expressions?
Fra : Rander


Dato : 09-03-03 03:00

Det er sikkert mig der er dum, men jeg fatter simpelthen ikke regular
expressions... Joh, jeg kan da til nød lave en søg/erstat, men bliver det
mere teknisk end det står jeg af...

Hvis man nu i et php-script laver en "exec (uptime)", hvordan får man så
lagt oppetiden ud i nogle variable ved navn $dage, $timer og $minutter? Jeg
synes det er ligemeget hvad jeg prøver, så får jeg at vide at der er fejl i
linien...

--
Lars Rander, www.rander.dk ICQ#: 987520 ** Pil ikke ved min adresse **
Sjathelt og beskytter af det svage køn (udnævnt af diktator SEJ 5/6-99)

Det er ikke klogt at være klogere end nødvendigt. (Philippe Quenault)


 
 
Soren Davidsen (09-03-2003)
Kommentar
Fra : Soren Davidsen


Dato : 09-03-03 08:03

Rander <lrNOSPAM@rander.dk> writes:

> Det er sikkert mig der er dum, men jeg fatter simpelthen ikke regular
> expressions... Joh, jeg kan da til nød lave en søg/erstat, men bliver det
> mere teknisk end det står jeg af...
>
> Hvis man nu i et php-script laver en "exec (uptime)", hvordan får man så
> lagt oppetiden ud i nogle variable ved navn $dage, $timer og $minutter? Jeg
> synes det er ligemeget hvad jeg prøver, så får jeg at vide at der er fejl i
> linien...

Nu kender jeg ikke lige php's regexps, men her er hvordan den kunne
se ud ..

Forudsat din uptime returnerer i et format lign:
" 07:56:18 up 20 days, 20:05, 5 users, load average: 0.08, 0.07, 0.01"

Saa ville denne extracte dage, timer, min: /up (\d+) days, (\d+):(\d+)/

Den vil naturligvis fejle hvis din maskine har en oppetid mindre end
en dag (min uptime viser afair ikke days hvis der ikke er nogen). Det
maa du saa haandtere i din kode.


Mvh,

--
___
Soren Davidsen / o\
Math student, ICSMA (_____)
__ http://www.tanesha.net/ _________________________________(___)_______

Niels Andersen (09-03-2003)
Kommentar
Fra : Niels Andersen


Dato : 09-03-03 09:40

Rander wrote in <iqjqj-rhr.ln1@rander.dk>:
> Det er sikkert mig der er dum, men jeg fatter simpelthen ikke regular
> expressions...

Det er heller ikke lige det nemmeste du kan lave med PHP. :)

> Hvis man nu i et php-script laver en "exec (uptime)", hvordan får man så
> lagt oppetiden ud i nogle variable ved navn $dage, $timer og $minutter?

Jeg ville i stedet kigge i filen "/proc/uptime".

man proc:

uptime This file contains two numbers: the uptime of the system
(seconds), and the amount of time spent in idle process (se-
conds).

Det er blot at hente indholdet fra filen, dele den op ved mellemrum, og tage
den første del.

Hvis du lægger værdien i filen i $fullseconds, kan du fx. gøre sådan her:

$dage = floor($fullseconds/(60*60*24));
$fullseconds = $fullseconds%(60*60*24);
$timer = floor($fullseconds/(60*60));
$fullseconds = $fullseconds%(60*60);
$minutter = floor($fullseconds/(60));
$sekunder = $fullseconds%(60);

> Jeg synes det er ligemeget hvad jeg prøver, så får jeg at vide at der er
> fejl i linien...

Så ville det være en god ide at vise et af dine bedste forsøg. :)
Måske er det blot en simpel lille fejl. Så kan vi fortælle dig hvad din fejl
var, i stedet for at kigge på en helt ny løsning. :)

--
Mvh.

Niels Andersen
Linux 2.4.20 - Debian testing/unstable


Rander (09-03-2003)
Kommentar
Fra : Rander


Dato : 09-03-03 14:12

Sun, 09 Mar 2003 09:39:42 +0100 brugte Niels Andersen 42 linier på at
fortælle dette til dk.edb.system.unix:

>> Det er sikkert mig der er dum, men jeg fatter simpelthen ikke regular
>> expressions...
>Det er heller ikke lige det nemmeste du kan lave med PHP. :)

Nej, det fandt jeg ud af...

>> Hvis man nu i et php-script laver en "exec (uptime)", hvordan får man så
>> lagt oppetiden ud i nogle variable ved navn $dage, $timer og $minutter?
>Jeg ville i stedet kigge i filen "/proc/uptime".
[...]

Skønt! Så fik jeg det til at virke med

$fd = fopen ("/proc/uptime", "r");
$buffer = fgets($fd, 4096);
fclose ($fd);

$uptime = substr ($buffer, 0, strpos ($buffer, " "));

$days = floor($uptime/(60*60*24));
$uptime = $uptime%(60*60*24);
$hours = floor($uptime/(60*60));
$uptime = $uptime%(60*60);
$mins = floor($uptime/(60));
$secs = $uptime%(60);

$uptime = "$days days, $hours hours, $mins minutes and $secs seconds
($days:$hours:$mins:$secs).\n";


>> Jeg synes det er ligemeget hvad jeg prøver, så får jeg at vide at der er
>> fejl i linien...
>Så ville det være en god ide at vise et af dine bedste forsøg. :)
>Måske er det blot en simpel lille fejl. Så kan vi fortælle dig hvad din fejl
>var, i stedet for at kigge på en helt ny løsning. :)

Hehe... Ja, jeg opdagede jo at regular expressions i php skal pakkes ind i
en preg_match eller preg_match_all, og så forsøgte jeg mig med


$uptime = exec (uptime);
preg_match_all ("/up (\d+) days, (\d+):(\d+)/", $uptime, $out);
$days = $out[1];
$hours = $out[2];
$mins = $out[3];

men det skete der ikke meget ved... "echo $out" gav blot outputtet "Array",
og jeg forsøgte for sjov at gennemskue den ved

for (i = 0; i <= 10; i++) {
   echo "$i: $out[i]<br>\n";
}

men de var alle sammen tomme - og så opgav jeg (klokken var 4 om natten)...

--
Lars Rander, www.rander.dk ICQ#: 987520 ** Pil ikke ved min adresse **
Sjathelt og beskytter af det svage køn (udnævnt af diktator SEJ 5/6-99)

Det kræver ærlighed at sælge elastik i metermål. (Storm P.)


Jesper Louis Anderse~ (09-03-2003)
Kommentar
Fra : Jesper Louis Anderse~


Dato : 09-03-03 14:45

On Sun, 09 Mar 2003 03:00:19 +0100, Rander <lrNOSPAM@rander.dk> wrote:
> Det er sikkert mig der er dum, men jeg fatter simpelthen ikke regular
> expressions... Joh, jeg kan da til nød lave en søg/erstat, men bliver det
> mere teknisk end det står jeg af...

man perlre (hvis det er perl-kompatible re's og du har perl inde)
man re_format (hvis det er POSIX 1003.2 regular expressions)

--
Jesper

Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408852
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste