Kein Zugriff auf .txt-Datei!?

i-click

i-click

Aktives Mitglied
Thread Starter
Dabei seit
30.12.2004
Beiträge
383
Reaktionspunkte
41
Servus!

Ich habe ein kleines Gästebuch-Script, das per PHP die eingegebenen Daten in zwei .txt-Dateien schreibt, bzw. aus diesen wieder ausliest.

Mein Problem:
Auf den Webserver hochgeladen, funktioniert die Chose. Aber im lokalen Test (auf MAMP 1.0b) werden die Eingaben nicht gespeichert. D.h., ich bekomme lediglich die Feldbezeichnungen (Name/eMail/Homepage/Text/Datum).
Abhilfe???
Würde die Scripte halt schon ganz gerne vollwertig lokal testen!

greets&thx!
 
Hi i-click,

vielleicht musst du auf deinem lokalen Server deinen zwei Textdateien mehr bzw. die richtigen Schreib- und Leserechte verleihen.

Salü,
mactrisha.
 
... manchmal habe ich das gefühl, das PHP auch nicht vollständig lokal funktioniert - zumindest bei mir nicht.
 
hmmm...

Hey mactrisha!

Danke für die schnelle Antwort! :)
Habe das leider schon versucht (per CHMOD), hat aber nichts gebracht...
Gibt es noch andere Möglichkeiten?

greets!
 
Gibt es denn irgendwelche Fehlermeldungen in der Logdatei des Webservers (üblicherweise '/var/log/hhtpd/error_log'; ich weiss allerdings nicht, wo die bei MAMP abgelegt werden)
 
In der PHP_error_log (Applications/MAMP/logs/) ist eine "undefinied variable"-Meldung vorhanden, allerdings nur, als die Zugriffsrechte noch nicht gesetzt waren. Jetzt kommt keine Fehlermeldung mehr.
Funktionieren tut's trotzdem nicht...
 
Wie wärs mit ein bisschen Code? ;)
Am Besten ein kleines aber vollständiges Skript, das Dein Problem erläutert (mit Angabe des Pfades, wo Deine Datei liegt).

Was manchmal auch ganz aufschlussreich sein kann, ist den Code im Terminal auszuführen (mit php -r '<code>'), weil man da teilweise ganz brauchbare Fehlermeldungen bekommt.
 
Auf die Aufforderung habe ich nur gewartet! ;)

Folgende Dateien sind vorhanden:

"gaeste.php" (Hauptdatei)
"include.php" (inkludiert "gaeste.txt")
"guest-index.html" (Seite mit Eingabe-Formular)
"gaeste.txt" (Speicherdatei für die Eingabedaten)
"gaestezahl.txt" (Speicherdatei für die Eintrags-Nr.)

Hier der Code von "gaeste.php":

<?
$nummer_lesen=fopen("gaestezahl.txt", "r");
$zahl=fgets($nummer_lesen, 10);
$zahl=trim($zahl);
$zahl++;
$nummer_schreiben=fopen("gaestezahl.txt", "w");
fwrite($nummer_schreiben, $zahl);

$zeit=getdate();
$tag=$zeit["mday"];
$jahr=$zeit["year"];
$stunden=$zeit["hours"];
$minuten=$zeit["minutes"];
$monat=$zeit["month"];
$wochentag=$zeit["weekday"];
switch ($wochentag)
{
case "Monday";
$wochentag_de="Montag";
break;
case "Tuesday";
$wochentag_de="Dienstag";
break;
case "Wednesday";
$wochentag_de="Mittwoch";
$break;
case "Thursday";
$wochentag_de="Donnerstag";
break;
case "Friday";
$wochentag_de="Freitag";
break;
case "Saturday";
$wochentag_de="Samstag";
break;
case "Sunday";
$wochentag_de="Sonntag";
break;
}
$monat_de=$monat;
switch ($monat)
{
case "January";
$monat_de="Januar";
break;
case "February";
$monat_de="Februar";
break;
case "March";
$monat_de="März";
break;
case "June";
$monat_de="Juni";
break;
case "July";
$monat_de="Juli";
break;
case "October";
$monat_de="Oktober";
break;
case "December";
$monat_de="Dezember";
break;
}
$nummer_und_datum="Nr. $zahl vom $wochentag_de, den $tag. $monat $jahr um $stunden.$minuten Uhr.";

$text=nl2br($text);
$eintrag="<table width=\"78%\"><tr><td colspan=\"2\">$nummer_und_datum</td></tr><tr><td width=\"12%\">Name:</td><td width=\"88%\">$name</td></tr><tr><td width=\"12%\">Email:</td><td width=\"88%\"><a href=\"mailto:$email\">$email</td></tr><tr><td width=\"12%\">Homepage:</td><td width=\"88%\"><a href=\"$homepage\" target=\"_blank\">$homepage</td></tr><tr><td colspan=\"2\">$text</td></tr></table><br><br>\n";

$alteEintraege=file("gaeste.txt");
$AnzahlDerEintraege=count($alteEintraege);
$eintraege="$eintrag$alteEintraege[0]";
$z=1;
for ($z; $z<$AnzahlDerEintraege; $z++)
{
$eintraege="$eintraege$alteEintraege[$z]";
}
$datei=fopen("gaeste.txt", "w");
fwrite ($datei, $eintraege);

mail ("xxx@yyy.de", "neuer Eintrag im Gästebuch", "$name hat sich im Gästebuch eingetragen.");
mail ($email, "Ihr Eintrag ins Gästebuch", "Vielen Dank für Ihren Eintrag in unser Gästebuch.\nBitte besuchen Sie und bald wieder.\n\nhttp://www.zzz.de");

require("include.php");
?>




Die Dateien liegen im htdocs-Ordner (localhost) von MAMP.
Wie gesagt, nur auf dem lokalen Rechner wird das Script nicht korrekt ausgeführt. Auf den Server hochgeladen, funktioniert alles.
 
i-click schrieb:
Auf die Aufforderung habe ich nur gewartet! ;)
Wenn Du denkst, dass ich mich jetzt durch fast hundert Zeilen Code schaufle, hast Du Dich getäuscht.
Nicht umsonst:
Am Besten ein kleines aber vollständiges Skript, das Dein Problem erläutert (mit Angabe des Pfades, wo Deine Datei liegt).
Was mir spontan auffällt, ist, dass Du keinerlei Fehlerkontrolle eingebaut hast.
PHP:
if (is_writable($filename)) {
         if (!$filehandle = fopen($filename, "w")) {
                  print "Datei $filename kann nicht geöffnet werden";
                  exit;
            }
            if (!fwrite($filehandle, $zahl)) {
                print "Schreiben in Datei $filename nicht möglich";
                exit;
            }
            print "$zahl wurde erfolgreich in  $filename  geschrieben";
            fclose($filehandle);
} else {
         print "Kann in Datei $filename nicht schreiben";
}
Beim Lesen kannst Du es ähnlich machen.
So kannst Du evtl. herausfinden, wo genau etwas nicht klappt

HTH
 
Zusätzlich zu maceis Hinweis noch ein Tipp von mir:

Die Zeile

PHP:
$eintraege="$eintraege$alteEintraege[$z]";

funktioniert in manchen PHP-releases nicht immer, weil der Index $z nicht korrekt identifiziert wird innerhalb der "-Zeichen. davon ab ist das hier doch auch gar nicht nötig. Ich würds durch

PHP:
$eintraege=$eintraege.$alteEintraege[$z];

ersetzen. Darüber hinaus gilt nat.:

Wer Fehler finden will, der muß auch welche melden ;)
(siehe maceis)
 
Es ist das übliche.

Auf deinem Server ist register_globals gesetzt. Ist entweder eine alte PHP Version oder absichtlich auf unsicher gestellt, damit die Uraltscripte, die immernoch so durchs Netz wandern und register_globals voraussetzen, funktionieren.

Bei dir lokal hast du eine aktuelle PHP Version, die auf sicher getrimmt ist, register_globals ist aus.

Siehe http://de3.php.net/register_globals

[ Nebenbei: Haben die Babelfisch für die deutsche Übersetzung benutzt? Ist ja grauenhaft. Kommt fast an die Anleitungen taiwanesischer Billigelektronik ran. http://de3.php.net/de/register_globals ]

Nebenbei: Ohne Locking ist dein Gästebuch Glückssache. Bei nur wenigen Zugriffen ist die Wahrscheinlichkeit aber hoch, daß nichts passieren wird.

http://de3.php.net/manual/en/function.flock.php
 
@maceis: habe doch auch gar nicht verlangt, dass du dich durchwühlen musst! Ich gelobe Besserung! *gg*

@wegus/maceis: VIELEN DANK für die Tipps!!! Werde mir die Sache nochmal vorknöpfen.

greets!
 
@nogger:

Du hast Recht! Es liegt tatsächlich an dieser Einstellung.
Habe den Wert spaßeshalber mal umgestellt (MAMP/bin/php5/lib/php.ini) und es funktioniert.

THX!
 
Zurück
Oben Unten