[PHP] system() & TASKLIST in een tabel.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste Tweakers,

ik wil graag in php de TASKLIST in een tabel hebben.

ik heb tot nu toe deze code:
PHP:
1
2
3
4
5
<pre>
<?php
system('tasklist');
echo $showinfo;
?>


Dat wil ik dus in een tabel krijgen. alleen ik heb het al geprobeer met explode(\t) & (trim(' ')).

Als ik dit probeer:
PHP:
1
2
3
4
5
6
7
8
9
10
<pre>
<?
system('tasklist');
//echo $showinfo;
?>
</pre>
<?php
$arrayinfo = explode(trim(' ',' '), system('tasklist'));
print_r ($arrayinfo);
?>

en ik verwachte dat alle regels netjes onderelkaar kwamen zoals dit:
blaat blaat
blaat blaat
en niet:
blaat blaat
blaat blaat
krijg ik deze error:
Warning: explode() [function.explode]: Empty delimiter in C:\xampp\htdocs\webi\command\tasklist.php on line 16
En ik heb ook al Explode met \t geprobeerd maar de text bevat geen tabs

ik weet echt niet hoe ik dit moet gaan doen.

weet iemand hoe je dit het handigste kan doen?

[ Voor 42% gewijzigd door Verwijderd op 21-03-2009 18:17 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Nou, je zit al op de goeie weg. Je weet dat je de losse velden uit moet splitsen, en explode en trim zijn bijvoorbeeld een manier om dat mee aan te pakken. Wat is het precies dat je daarmee geprobeerd hebt? Wat was daarbij je uitvoer? Wat is daar anders aan dan wat je verwachtte?

We hebben je nu al een paar keer op onze quickstart gewezen. Ik stel voor dat je die toch écht even doorleest en je topicstart van wat meer informatie voorziet. Op deze manier kunnen we niet uitleggen hoe iets moet, en het enige wat we wel zouden kunnen doen is het compleet voor je uitwerken. En daar leer je niks van, dus dat doen we niet. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • H004
  • Registratie: Maart 2006
  • Laatst online: 28-05 19:55
Je kan tasklist ook opties meegeven, zoals
PHP:
1
system('tasklist /fo csv');

Vervolgens exploden op regeleindes en exploden op komma's en je kan ermee doen wat je wil

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Lees eens http://php.net/trim door en probeer dan eens te redeneren wat je terug zou krijgen wanneer je trim(' ',' '). Lees daarna even http://php.net/explode door en probeer dan te begrijpen waar de 'empty delimiter' foutmelding vandaan zou kunnen komen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je probeert trouwens geen gewone explode te doen, maar een split op een variabel aantal spaties. Dit werkt waarschijnlijk ook wel:
PHP:
1
$arrayinfo = split('\s+', `tasklist`);


Sowieso is system niet wat jij wil, want die functie drukt alle uitvoer meteen af. Je wil shell_exec hebben, aangezien die het in een string stopt. Of de execution operator die ik hierboven gebruik, die doet hetzelfde.

[ Voor 39% gewijzigd door NMe op 21-03-2009 19:22 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja Bedankt! ik had net ook al een code gemaakt die zo werkte:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<pre>
<?php
exec('tasklist',$out);
?>
<TABLE BORDER="1" ALIGN="center">
<TR>
<TD>1</TD>
<TD>2</TD>
<TD>3</TD>
<TD>4</TD>
<TD>5</TD>
</TR>
<?


foreach($out as $line)
{
    $a1 = str_replace('                  ','-',$line);
    $a2 = str_replace('                 ','-',$a1);
    $a3 = str_replace('                ','-',$a2);
    $a4 = str_replace('               ','-',$a3);
    $a5 = str_replace('              ','-',$a4);
    $a6 = str_replace('             ','-',$a5);
    $a7 = str_replace('            ','-',$a6);
    $a8 = str_replace('           ','-',$a7);
    $a9 = str_replace('          ','-',$a8);
    $a10 = str_replace('         ','-',$a9);
    $a11 = str_replace('        ','-',$a10);
    $a12 = str_replace('       ','-',$a11);
    $a13 = str_replace('      ','-',$a12);
    $a14 = str_replace('     ','-',$a13);
    $a15 = str_replace('    ','-',$a14);
    $a16 = str_replace('   ','-',$a15);
    $a17 = str_replace('  ','-',$a16);
    $a18 = str_replace(' ','-',$a17);
    $a19 = str_replace('--','-',$a18);
    
    $linearray = explode('-',$a19);                           
    
    ?>
    <TR>
    <?
    
    foreach ($linearray as $line2)
    {
        ?>
        <TD><? echo $line2 ?></TD>
        <?
    }
    ?>
    
</TR>
    
    <?
}
?>
</TABLE>
</pre>


Is alleen beetje buggy.

@Janoz:
Ja bankt... nu begrijp ik het..

@NMe:
Ja inderdaad. ik gebruik nu: exec('command',$out)
die zet alle output regels in een array.

@H004:
Ja Dankje! Daar heb ik wat aan.

Bedankt iedereen! nu kan ik denk ik wel veder!

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik hoop oprecht dat je de code die je hierboven post absoluut niet blijft gebruiken en je op zoek gaat naar een betere oplossing. :X

Wat je zou moeten doen is alles regel voor regel nemen (explode op regeleindes, oftewel \r\n in Windows), en dan per regel splitten. Vervolgens kun je de gesplitte waardes weer samenvoegen in een tabel.

[ Voor 42% gewijzigd door NMe op 21-03-2009 19:46 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • H004
  • Registratie: Maart 2006
  • Laatst online: 28-05 19:55
Verwijderd schreef op zaterdag 21 maart 2009 @ 19:38:
Ja Bedankt! ik had net ook al een code gemaakt die zo werkte:

PHP:
1
//code


Is alleen beetje buggy.
Hmmm...., probeer anders eens het volgende...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<table>
<?php

ob_start();
system( 'tasklist /fo csv' );
$output = ob_get_contents();
ob_end_clean();

$tasks = explode("\r\n", $output);
foreach ( $tasks as $task ) {
    $array[]= explode(",", str_replace('"', "", $task));
}

foreach ($array as $regel) {
    echo "<tr>";
    foreach ($regel as $item) {
        echo "<td>".$item."</td>";
    }
    echo "</tr>";
}
?>
</table>

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb allang al een 95% werkende code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<table border="1" align="center">
<tr>
<td>Process</td>
<td>PID</td>
<td>Sessie Naam</td>
<td>Sessie</td>
<td>Mem Gebruik</td>
</tr>


<?php

exec('tasklist /fo csv', $out);
foreach ($out as $line)
{
    $a1 = str_replace('"', '', $line);
    $a2 = explode(',', $a1,5);
    ?>
 <tr>   
    
    <?php
    foreach ($a2 as $lines)
    {
        ?>
<td><?php echo $lines ?></td>

    <?
}
?>
</tr>
<?php

}

?>

</table>


Alleen de eerste 2 waardes van de array moeten er nog uit dan werkt hij 100%.

weet iemand hoe ik dit snel kan doen? of moet ik een loopje gaan maken?

Acties:
  • 0 Henk 'm!

Verwijderd

kijk eens naar array_shift

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt iedereen! het werkt nu 100%. Hier is de code voor de genen die het nog willen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<table border="1" align="center">
<tr>
<td>Process</td>
<td>PID</td>
<td>Sessie Naam</td>
<td>Sessie</td>
<td>Mem Gebruik</td>
</tr>


<?php

exec('tasklist /fo csv /nh', $out);
array_shift($out);
foreach ($out as $line)
{
    $a1 = str_replace('"', '', $line);
    $a2 = explode(',', $a1,5);
    ?>
 <tr>   
    
    <?php
    foreach ($a2 as $lines)
    {
        ?>
<td><?php echo $lines ?></td>

    <?
}
?>
</tr>
<?php

}

?>

</table>

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Er zit gewoon n functie in PHP die een csv string kan omzetten naar een array, hoef je zelf geen irritante explodes ed. te doen :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Die zit er wel pas sinds PHP 5 in. Geen idee of dat nog consequenties heeft voor de topicstarter. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
maakt niet uit.. ik heb er in iedergeval iets van geleerd :P.
Pagina: 1