Gå til innhold

PHP genererer uønsket output


Anbefalte innlegg

Hei! jeg er ultrafersk på PHP bare sånn at det er sagt.

 

Jeg har følgende kode i index.php:

<footer> <!-- <div.class="footer"> -->
<h2>Footer</h2> <!-- Denne er skjult som standard med styles -->
<?php
	$kommando = "lsb_release -ds";
	echo ("<p>Kommandoen <code>" . $kommando . "</code> gir følgende output: <code>" . system($kommando) . "</code>.</p>");
?>
</footer>

som gir følgende rare output:

<footer> <!-- <div.class="footer"> -->
<h2>Footer</h2> <!-- Denne er skjult som standard med styles -->
Ubuntu 8.04.4 LTS
<p>Kommandoen <code>lsb_release -ds</code> gir følgende output: <code>Ubuntu 8.04.4 LTS</code>.</p>
</footer>

På en eller annen mistenkelig måte echo-er PHP resultatet av system call-et en ekstra gang før den blir bedt om det. Jeg har og prøvd å sette inni kommandostrengen direkte, uten bruk av en variabel. Dette gir samme resultat.

 

Hva er det som skjer her?

Endret av Øsse
Lenke til kommentar
Videoannonse
Annonse

Det som skjer er at system() som standard printer resultatet. Når du da echo'er OG system'er (hvis du skjønner :p) blir det gjort to ganger. For å løse det kan du bruke den valgfrie 2.parameteren return_var (se manualen: http://no2.php.net/manual/en/function.system.php) slik at det blir:

 

system($kommando, true);

 

Da vil den kun returnere verdien, slik at du kan lagre den i en variabel eller echo'e den, istedenfor å printe den ut direkte.

Lenke til kommentar

Dumme meg! :p

 

Du skjønner, jeg hadde et lite uhell og klarte å slette index.php og nå prøver jeg å bygge den ipp igjen men jeg husker ikke alt. Jeg tipper jeg splittet det avsnittet opp i to seperate echo-er.

 

Jeg fikk en feilmelding da jeg prøvde system($kommando, true); :ohmy: Fikk følgende: Fatal error: Only variables can be passed by reference in blablabla on line blabla.

 

Fant en annen kommando som heter exec(), den gjør visst akkurat det samme som system() men den skriver ikke resultatet :)

Endret av Øsse
Lenke til kommentar

<footer> <!-- <div.class="footer"> -->
	<h2>Footer</h2> <!-- Denne er skjult som standard med styles -->
	<?php
	$kommando = "lsb_release -ds";
	$exec = `$kommando`;
	echo ("<p>Kommandoen <code>" . $kommando . "</code> gir følgende output: <code>" . $exec . "</code>.</p>");
	?>
</footer>

 

Problem solved :)

Hvis du putter ting i `` så vil det bli executed. :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...