Homepage selbermachen 7.852 Themen, 35.619 Beiträge

Function findet Datei nicht, kann fehler nicht finden

T E S T E R / 5 Antworten / Baumansicht Nickles

Im folgenden Quelltext will ich einfach nur mit der funktion schreib() arbeit sparen und das problem: er findet die datei fp scheinbar nicht, aber das teil ist doch definiert

<?

function schreib($z) {
$schreiben = fwrite ($fp, $z);
return $z;
}

if(isset($abschicken))

{
$filename = "quellcode.txt";
$fp = fopen ("$filename", "w+");
schreib("text");

}

.
.
.

?>

bei Antwort benachrichtigen
Borlander T E S T E R „Function findet Datei nicht, kann fehler nicht finden“
Optionen

Normalerweise können in Funktionen nur die lokalen Variablen verwendet werden. Wenn Du auf globale Variablen zugreifen willst musst Du diese mit global $var1, $var2; am Anfang der Funktion deklarieren.

Also so:
function schreib($z)
{
  global $fp;
  $schreiben = fwrite ($fp, $z);
  return $z;
}



CU Borlander

bei Antwort benachrichtigen
xafford T E S T E R „Function findet Datei nicht, kann fehler nicht finden“
Optionen

selbst mit global dürfte eine variable aus einer funktion nicht verfügbar sein, bin mir da aber aus dem stehgreif nicht sicher. mein vorschlag würde aber lauten:
function schreib($fp,$z) {
fwrite ($fp, $z);
}

if(isset($abschicken))

{
$filename = "quellcode.txt";
$fp = fopen ("$filename", "w+");
schreib($fp,"text");

}

noch ein paar anmerkungen dazu:
es macht keinen sinn die funktion den parameter zurückgeben zu lassen, der ihr übergeben wurde, das ist nur speicherverschwendung.
es macht auch keinen sinn dem rückgabewert von fwrite eine variable zuzuweisen, die nicht weiter verwendet wird, ebenso speicherverschwendung.
im ganzen verstehe ich auch nicht ganz den sinn nur einen fwrite in eine funktion zu verpacken, funktionen sollen eine funktionalität kapseln, nicht nur eine einzelne funktion (fwrite selbst ist eine funktion), dies ist auch ressourcenverschwendung.
sinnvoll wäre die ganze funktion zu kapseln in der form:
function write($cont='',$name='')
{
if($name==''||$cont==''){return false;}
$fp=@fopen("$name",'w+');
if(!$fp){return false;}
$fp=@fwrite($fp,"$cont");
if(!$fp){return false;}
return true;
}
if(!empty($abschicken))
{
$c=write($z,'quellcode.txt');
if(!$c)
{
echo 'Datei konnte nicht geschrieben werden';
}
}

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
T E S T E R Nachtrag zu: „Function findet Datei nicht, kann fehler nicht finden“
Optionen

danke für eure hilfe, habe mir das nochmal durch die birne gehen lassen. der folgende code bereitet allerdings auch probleme.

$filename = "quellcode.txt";
$fp = fopen ("$filename", "w+");

function schreiben($eingabe)
{
$eingabe = stripslashes($eingabe);
$filename = "quellcode.txt";
$fp = fopen ("$filename", "w+");
$schreiben_ausfuehren = fwrite ($fp, $eingabe);
return $eingabe;
}

function lesen()
{
$filename = "quellcode.txt";
$fp = fopen ("$filename", "r");
$ausgabe = str_replace("<? ","",$ausgabe);
$ausgabe = str_replace(" ?>","",$ausgabe);
$ausgabe = fread ($fp, filesize ("$filename"));
return $ausgabe;
}


if(isset($abschicken))

{

schreiben($quellcode);

}

lesen();

echo"<form action='$PHP_SELF' method='post'>";
echo"<textarea name='quellcode' size='16' cols=90 rows=15>$ausgabe</textarea><br>";
print'<input name="abschicken" type="submit" value="Abschicken"><br><br>';
echo "<b>Ausgabe:</b><br><br>";
require("quellcode.txt");

bei Antwort benachrichtigen
Borlander T E S T E R „danke für eure hilfe, habe mir das nochmal durch die birne gehen lassen. der...“
Optionen
der folgende code bereitet allerdings auch probleme
Welche denn?
bei Antwort benachrichtigen
xafford T E S T E R „Function findet Datei nicht, kann fehler nicht finden“
Optionen

wundert mich nicht, daß:
function lesen()
{
$filename = "quellcode.txt";
$fp = fopen ("$filename", "r");
$ausgabe = str_replace(" ","",$ausgabe);
$ausgabe = str_replace(" ?>","",$ausgabe);
$ausgabe = fread ($fp, filesize ("$filename"));
return $ausgabe;
}
probleme bereitet. du verarbeitest die variable $ausgabe, bevor du ihr einen wert zugewiesen hast.
im übrigen, warum instanzierst du $fp und $quelltext einmal außerhalb und dann jedes mal noch innerhalb der funktionen? wenn du wirklich globale werte brauchst und dein script gegen mißbrauch absiochern willst, dann schreib zumindestens für $quelltext das ganze so:
define('quelltext','quellcode.txt');
und dann in den funktionen:
$fp=fopen(quelltext,'w+');

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen