muskotMedlem sedan jan. 20027 905 inlägg 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!
spangoMedlem sedan juni 20008 205 inlägg 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;
muskotMedlem sedan jan. 20027 905 inlägg 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.
SPiNMedlem sedan mars 20007 896 inlägg $pattern = '/^.*(\d+ day\(s\), \d+ hour\(s\), \d+ minute+\(s\), \d+ second\(s\)).*$/';
muskotMedlem sedan jan. 20027 905 inlägg 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.
spangoMedlem sedan juni 20008 205 inlägg muskotMedlem sedan jan. 20027 905 inlägg 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?
spangoMedlem sedan juni 20008 205 inlägg 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.
muskotMedlem sedan jan. 20027 905 inlägg 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!