PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : system() ohne flushen??



dumbo
05-01-2007, 10:59
hi,

kann ich das flushen von system() unterbinden? Wenn ja wie?
Das Problem ist, dass mein Script nur mit der System() Methode läuft.

Hier mal das Script:



<html>

<head>
<title>Friends-FTP</title>
</head>
<?

$send = "";
$in = "";
$username = "";
$kusername = "";
$opassword = "";
$npassword1 = "";
$npassword2 = "";
$output = "";
$send = $_POST["B1"];
$username = $_POST["user"];
$kusername = strtolower($username);
$opassword = $_POST["opassword"];
$npassword1 = $_POST["npassword1"];
$npassword2 = $_POST["npassword2"];



if ($send == "Ok"){

if ($kusername == "root") { die();}

if ($npassword1 != $npassword2) {
$output = "Passwörter stimmten nicht überein!";
}else{
// Passwörter stimmen usw.

$username = escapeshellcmd($username);
$opassword = escapeshellcmd($opassword);
$npassword1 = escapeshellcmd($npassword1);

$in = "./changepass $username $opassword $npassword1";

$output = system($in);



}
}



?>


<body>

<form method="POST" action="">

<div align="center">
&nbsp;<table border="1" id="table1">
<tr>
<td>
<p align="left">Username:</td>
<td>
<p align="left"><input type="text" name="user" size="20"></td>
</tr>
<tr>
<td>
<p align="left">Altes Passwort:</td>
<td>
<p align="left">
<input type="password" name="opassword" size="20"></td>
</tr>
<tr>
<td>
<p align="left">Neues Passwort:</td>
<td>
<p align="left">
<input type="password" name="npassword1" size="20"></td>
</tr>
<tr>
<td>
<p align="left">Neues Passwort:</td>
<td>
<p align="left">
<input type="password" name="npassword2" size="20"></td>
</tr>
</table>
<p><input type="submit" value="Ok" name="B1"></div>
<table border="1" id="table2">
<tr>
<td>Ausgabe (bitte kontrollieren!):</td>
</tr>
<tr>
<td><?=$output?></td>
</tr>
</table>
<p>&nbsp;</p>
</form>

</body>

</html>



danke!


gruß

tschloss
05-01-2007, 17:15
Geht das, ein Form ohne action-Ziel?
Die Passwortverarbeitung ist nach head aber vor body, wenn dort was ausgegangen wird, ist das nicht mehr HTML-konform, oder?

Und was genau ist das Problem, ich meine, was passiert und was sollte passieren?
Das Ausgabeverhalten ist übrigens auch von php.ini abhängig (dort kann eingestellt werden, ob Ausgaben sofort verarbeitet oder gepuffert werden).

dumbo
06-01-2007, 18:19
action="" dann schickt er die Daten an sich selbst (also das Script ruft sich selbst auf u.a. mit allen get´s)

Weiß jetzt net was W3C dazu sagt, aber PHP selbst gibt an der stelle nichts aus.


Das Problem ist, dass system() mir die Ausgabe einfach anzeigt ohne das ich es will. Klar wird es auch mit der $output Variable ausgegeben aber auch so.

danke für den tipp mit der php.ini

tschloss
07-01-2007, 10:20
Hast Dzu das aus der PHP-Doku gelesen:

Beachten Sie auch, dass wenn Sie ein Programm mit dieser Funktion starten und Sie es im Hintergrund laufen lassen möchten, Sie sicherstellen müssen, dass die Ausgabe des Programms in eine Datei oder anderenen Ausgabestream umgeleitet wird. Andernfalls wird PHP solange laufen, bis das Programm beendet ist.

Die system() Funktionsaufrufe versuchen übrigens automatisch nach jeder Ausgabezeile den Ausgabebuffer des Webservers zu flushen, wenn PHP als Servermodul läuft.

Also
1) Ausgaben (stdout, stderr) in Datei umleiten
2) Ausgabepufferung des PHP-Moduls ist egal, system() flusht immer

dumbo
07-01-2007, 13:24
ja hab ich, aber ich möcht keine Umleitung in eine Datei.

Hab jetzt die Lsg gefunden: (als System() flusht immer aber man kann den ja löschen *g*):

zuerst alles cachen: ob_start();

dann: system(....);

dann flushen beenden und löschen: ob_end_clean();

dann flushen wieder starten (sonst wird das Script
sehr langsam): ob_start();


danke für die Hilfe und Tipps!



gruß