webForumDet fria alternativet

"Klippa bort" text från variabel?

PHPur PHP

10 svar · 407 visningar · startad av muskot

muskotMedlem sedan jan. 20027 905 inlägg
#1

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
#2

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
#3

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.

spangoMedlem sedan juni 20008 205 inlägg
#4

Så här...

[fel]

muskotMedlem sedan jan. 20027 905 inlägg
#5

Är jag dum nu, eller?

SPiNMedlem sedan mars 20007 896 inlägg
#6
$pattern = '/^.*(\d+ day\(s\), \d+ hour\(s\), \d+ minute+\(s\), \d+ second\(s\)).*$/';
muskotMedlem sedan jan. 20027 905 inlägg
#7

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
#8

Det här funkar (resultat).

muskotMedlem sedan jan. 20027 905 inlägg
#9

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
#10

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
#11

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!

133 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)