[php] wordwrap van output

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Nu online

Erhnam

het Hardware-Hondje :]

Topicstarter
Via een linux script wordt de output van een netstat opdracht door gegeven aan php. Php moet deze output vervolgend weer op het scherm laten weergeven. Onder linux wordt deze netjes weergegeven:

code:
1
2
3
4
5
6
[root@server01 root]# netstat -ea | grep csuser01
tcp        0      0 62.41.xx.xx:27015       *:*                     LISTEN      csuser01   47270290
udp        0      0 62.41.xx.xx:27015       *:*                                 csuser01   47270287
udp        0      0 62.41.xx.xx:27020       *:*                                 csuser01   47270288
udp        0      0 62.41.xx.xx:27005       *:*                                 csuser01   47270289
[root@server01 root]#


Echter als ik deze waarde door stuur naar php komt deze zo op het scherm:

code:
1
tcp 0 0 62.41.xx.xx:27015 *:* LISTEN csuser01 47270290 udp 0 0 62.41.xx.xx:27015 *:* csuser01 47270287 udp 0 0 62.41.xx.xx:27020 *:* csuser01 47270288 udp 0 0 62.41.xx.xx:27005 *:* csuser01 47270289


Heeft iemand hier ervaring mee om dit op te lossen of een bruikbare tip?

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Kijk eens in de source van je gegenereerde html pagina.

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!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 20:03

Acties:
  • 0 Henk 'm!

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:39
Ik denk inderdaad dat je output wel enters bevat, maar deze worden genegeerd door je browser (standaard HTML). Daarom zul je zelf de newlines moeten vervangen door <BR> als je het onder elkaar weer wilt geven.

Tenminste, ik neem aan dat je PHP het output naar een browser?

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Acties:
  • 0 Henk 'm!

Verwijderd

Denk ik ook.

code:
1
<?php echo nl2br("die string uit dat linux script") ?>

Acties:
  • 0 Henk 'm!

Verwijderd

HTML

code:
1
<PRE></PRE>

Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Nu online

Erhnam

het Hardware-Hondje :]

Topicstarter
Ik heb het geprobeerd met
code:
1
print nl2br("$status");
, maar zonder resultaat. De code van de html:

code:
1
2
3
4
5
6
Welkom csuser01</b><br><br>
tcp        0      0 62.41.xx.xx:27015       *:*                     LISTEN      csuser01   47385683   
udp        0      0 62.41.xx.xx:27015       *:*                                 csuser01   47385680   
udp        0      0 62.41.xx.xx:27020       *:*                                 csuser01   47385681   
udp        0      0 62.41.xx.xx:27005       *:*                                 csuser01   47385682   
<br><br><br><br><form action='kill.php' method='post'><input type='hidden' value='csuser01' name='user'><input type='submit' value='Shutdown'></form><form action='start.php' method='post'><input type='hidden' value='csuser01' name='user'><input type='submit' value='Start'></form>

[ Voor 78% gewijzigd door Erhnam op 01-02-2005 16:39 ]

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

  • AirX
  • Registratie: Juni 2002
  • Laatst online: 21:19

AirX

Tweak Guru

<textarea></textarea>

Daarmee kun je het goed printen, gebruik ik zelf ook.
Niet de netste oplossing, maarja 8)7

Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

AirX schreef op dinsdag 01 februari 2005 @ 16:37:
<textarea></textarea>

Daarmee kun je het goed printen, gebruik ik zelf ook.
Niet de netste oplossing, maarja 8)7
Dan vond ik het gebruik van <pre> netter :)

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Ik neem aan dat je nu zelf ook ziet wat het probleem is. In php zul je het resultaat in html om moeten zetten zodat het ook in html goed weergegeven wordt.

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!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 20:49

DizzyWeb

Ondertiteld

PHP:
1
echo '<pre>' . $status . '</pre>';

Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Nu online

Erhnam

het Hardware-Hondje :]

Topicstarter
Janoz schreef op dinsdag 01 februari 2005 @ 16:38:
Ik neem aan dat je nu zelf ook ziet wat het probleem is. In php zul je het resultaat in html om moeten zetten zodat het ook in html goed weergegeven wordt.
Ik zie het probleem en heb alles wat in dit draadje is gezegd geprobeerd:

echo ("<textarea>$status</textarea>");
echo ("<pre>$status</pre>");
echo '<pre>' . $status . '</pre>';
echo '<textarea>' . $status . '</textarea>';
print nl2br("$status");

Geven niet het juiste resultaat

[ Voor 34% gewijzigd door Erhnam op 01-02-2005 16:51 ]

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Wat staat er eigenlijk in status?

Het is trouwens niet verboden om zelf een beetje na te denken en eventueel zelf een beetje debuggen. Daarnaast raad ik je aan om ook even naar de quickstart te kijken. Het is heel vervelend om iemand te helpen die alleen maar zegt "Geprobeert, maar werkt niet".

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!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 20:49

DizzyWeb

Ondertiteld

En als ik je nu eens vertel dat de [code] blokken hier ook gewoon <pre>'s zijn?

Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Nu online

Erhnam

het Hardware-Hondje :]

Topicstarter
Janoz schreef op dinsdag 01 februari 2005 @ 16:52:
Wat staat er eigenlijk in status?

Het is trouwens niet verboden om zelf een beetje na te denken en eventueel zelf een beetje debuggen. Daarnaast raad ik je aan om ook even naar de quickstart te kijken. Het is heel vervelend om iemand te helpen die alleen maar zegt "Geprobeert, maar werkt niet".
In de status staat de output van een netstat overzicht. Onder linux zie je inderdaad een mooi overzicht. In php leest hij de waarde goed van het scherm echter zonder breaks op de juiste plekken. Als ik weer kijk in de html code zie ik dat hij het op de dezelfde manier heeft neergezet als onder linux. Vreemd Vreemd...

[ Voor 4% gewijzigd door Erhnam op 01-02-2005 16:55 ]

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Laat eens wat code zien. Ik heb namelijk een vermoeden dat je code helemaal niet doet wat jij denkt dat het doet. Waneer de tekst die je daar hebt staan daadwerkelijk de vulling van $status was geweest had het allemaal al lang gewerkt.

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!

  • Erhnam
  • Registratie: Januari 2000
  • Nu online

Erhnam

het Hardware-Hondje :]

Topicstarter
Hier een stuk van mijn originele code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<? session_start() ?>
<?

// Als de user niet ingelog is....

if ( $_SESSION[user] == "" ) { echo "No Access!"; }

// Als de user wel ingelogd is...
else {

// Geef de status van server weer.
echo "Welkom $_SESSION[user] , $_SESSION[server]</b><br><br>";

$status = passthru("ssh root@$_SESSION[server] 'netstat -ea | grep $_SESSION[user]'");

print ("<br>");
print ("<br>");
print ("$status");
print ("<br>");
print ("<br>");

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

Verwijderd

Sla de waarde van $status eens op in een bestand en kijk eens met een hex-editor met welke karakters elke regel afgesloten wordt.
Let er wel op dat je het bestand niet in ASCII-modus binnenhaalt.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
passthru returned niets volgens het manual. Het dropt gewoon de output op het scherm. Zoals jij het wilt zou je met exec() moeten werken;
PHP:
1
2
3
4
5
6
7
$output = array();
exec('commands', &$output);

foreach ($output as $line)
{
 echo '<br>' .$line;
}

[ Voor 9% gewijzigd door T-MOB op 01-02-2005 18:21 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

T-MOB schreef op dinsdag 01 februari 2005 @ 18:20:
passthru returned niets volgens het manual. Het dropt gewoon de output op het scherm. Zoals jij het wilt zou je met exec() moeten werken;
PHP:
1
2
3
4
5
6
7
$output = array();
exec('commands', &$output);

foreach ($output as $line)
{
 echo '<br>' .$line;
}
Die foreach is best wel zinloos. Dan kun je nog beter de voorgedefinieerde php methode nl2br() gebruiken, die levert tenminste nog enigzins XHTML compatible output op.

Aan de topicstarter nog de vraag: Kun je hier eens de inhoud van print_r($status) posten?

In ieder geval moet je eens goed lezen wat de passthru() methode nu werkelijk doet, want dat is niet wat jij verwacht ;)
Als je er in HTML <pre> entities omheen zet werkt het in dit geval echter toch wel.

[ Voor 20% gewijzigd door dawuss op 01-02-2005 19:06 ]

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
dawuss schreef op dinsdag 01 februari 2005 @ 19:05:
[...]

Die foreach is best wel zinloos. Dan kun je nog beter de voorgedefinieerde php methode nl2br() gebruiken, die levert tenminste nog enigzins XHTML compatible output op.

Aan de topicstarter nog de vraag: Kun je hier eens de inhoud van print_r($status) posten?

In ieder geval moet je eens goed lezen wat de passthru() methode nu werkelijk doet, want dat is niet wat jij verwacht ;)
Als je er in HTML <pre> entities omheen zet werkt het in dit geval echter toch wel.
Die foreach valt toch wel mee? Exec() zadelt je op met een array wat je in zijn geheel wilt weergeven. Als je dat met nl2br wil doen dan moet je
PHP:
1
echo nl2br( implode("\n", $output) );

ofzo gaan doen. Dan kun je net zo goed gelijk op "<br>\n" of "<br />\n" imploden. Waar lees je trouwens dat de output XHTML moet zijn?

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Nu online

Erhnam

het Hardware-Hondje :]

Topicstarter
Heb ook even met exec zitten spelen. Het grappige is dat ik dan 1 regel terug krijg:

code:
1
udp 0 0 62.41.xx.xx:27005 *:* csuser01 49886958


Hiermee lukt het wel met de bovenstaande <pre> tags het geheel netjes te krijgen.. Ik ga even wat experimenteren!

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Nu online

Erhnam

het Hardware-Hondje :]

Topicstarter
Ik ben er uit!!

Met de onderstaande regel lukt het!
Als ik $status zou printen op het scherm krijg ik Array te zien :) Dat was voor mij een goed teken! Met de onderstaande regel lukt het mij om de Array uit te lezen! Bedankt voor alle info!

code:
1
2
exec("ssh root@$_SESSION[server] 'netstat -ea | grep $_SESSION[user]'", $status);
echo nl2br(implode("\n",$status));

[ Voor 14% gewijzigd door Erhnam op 02-02-2005 10:03 ]

http://www.xbmcfreak.nl/

Pagina: 1