Det här borde funka.
$pattern = '/^.*(\\d+ day\\(s\\), \\d+ hour\\(s\\), \\d+ minute+\(s\\), \\d+ second\\(s\\)).*$/';
$uptime = `uptime.exe`;
$result = preg_replace( $pattern, '$1', $uptime );
echo $result;
10 svar · 407 visningar · startad av muskot
Hej!
Har lite problem...
Med denna kod:
<?php
$uptime = passthru("uptime.exe");
echo "$uptime";
?>
får jag denna output:
\\SAFARI has been up for: 8 day(s), 2 hour(s), 2 minute(s), 24 second(s) Estimate based on last boot record in the event log. See UPTIME /help for more detail.
Går det att klippa bort onödig text så att jag endast får själva upptiden? Alltså "8 day(s), 2 hour(s), 2 minute(s), 24 second(s)" i det här fallet.
Jag har testat med en massa olika grejer men eftersom jag har inte lyckats överhuvudtaget känns det mest som jag hopplöst famlar i blindo för tillfället.
Tack på förhand!
Det här borde funka.
$pattern = '/^.*(\\d+ day\\(s\\), \\d+ hour\\(s\\), \\d+ minute+\(s\\), \\d+ second\\(s\\)).*$/';
$uptime = `uptime.exe`;
$result = preg_replace( $pattern, '$1', $uptime );
echo $result;
Tack för svaret...
Dock fick jag följande felmeddelande när jag försökte köra koden:
Warning: Compilation failed: missing ) at offset 69 in d:\wwwroot\uptime.php on line 9
Ersatte då plustecknet efter "minute" med en backslash, men då fick jag precis samma typ av output som tidigare, dvs:
\\SAFARI has been up for: 8 day(s), 2 hour(s), 49 minute(s), 39 second(s) Estimate based on last boot record in the event log. See UPTIME /help for more detail.
Jag blir galen på detta.
Är jag dum nu, eller?
$pattern = '/^.*(\d+ day\(s\), \d+ hour\(s\), \d+ minute+\(s\), \d+ second\(s\)).*$/';
Hmmzz.. fortfarande ingen skillnad. Kanske inte går?
\\SAFARI has been up for: 9 day(s), 2 hour(s), 16 minute(s), 34 second(s) Estimate based on last boot record in the event log. See UPTIME /help for more detail.
Tack... nu fungerar själva koden, men jag har fortfarande problem. Följande kod:
<?php
header( 'Content-Type: text/plain' );
$uptime = system("uptime.exe");
$pattern = '/^.*(\d+ day\(s\), \d+ hour\(s\), \d+ minute\(s\), \d+ second\(s\)).*$/';
$result = preg_replace( $pattern, '$1', $uptime );
echo "Ursprunglig text:\n$uptime\n\nMönster:\n$pattern\n\nResultat:\n$result";
?>
Ger denna output:
\\SAFARI has been up for: 9 day(s), 2 hour(s), 36 minute(s), 26 second(s)
Estimate based on last boot record in the event log.
See UPTIME /help for more detail.
Ursprunglig text:
See UPTIME /help for more detail.Mönster:
/^.*(\d+ day\(s\), \d+ hour\(s\), \d+ minute\(s\), \d+ second\(s\)).*$/Resultat:
See UPTIME /help for more detail.
Det verkar som om uptime.exe skriver ut informationen på fyra rader. Hur löser man det?
OK, problemet löst. Mönstret måste ha två modifierare, s och D för att mitt mönster ska funka med flera rader. Exemplet på adressen ovan funkar nu... om du vill veta vad modifierarna gör, läs det här.
Dessutom: Funktionen system hivar iväg resultatet av kommandot direkt till browsern såväl som det returnerar det. Använd exec eller backticks i stället.
Oj oj oj.. nu fungerar det!
<?php
header( 'Content-Type: text/plain' );
$uptime = `uptime`;
$pattern = '/^.*( \d+ day\(s\), \d+ hour\(s\), \d+ minute\(s\), \d+ second\(s\)).*$/isD';
$result = preg_replace( $pattern, '$1', $uptime );
echo "Ursprunglig text:\n$uptime\nMönster:\n$pattern\n\nResultat:\n$result\n";
?>
Tusen tack för all hjälp, spango. Jättesnällt!