Kein Zugriff auf .txt-Datei!?

  1. i-click

    i-click Thread Starter MacUser Mitglied

    Mitglied seit:
    30.12.2004
    Beiträge:
    383
    Zustimmungen:
    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!
     
  2. mactrisha

    mactrisha MacUser Mitglied

    Mitglied seit:
    27.11.2003
    Beiträge:
    683
    Medien:
    3
    Zustimmungen:
    4
    Hi i-click,

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

    Salü,
    mactrisha.
     
  3. Chuonrad

    Chuonrad MacUser Mitglied

    Mitglied seit:
    27.08.2004
    Beiträge:
    369
    Zustimmungen:
    151
    ... manchmal habe ich das gefühl, das PHP auch nicht vollständig lokal funktioniert - zumindest bei mir nicht.
     
  4. i-click

    i-click Thread Starter MacUser Mitglied

    Mitglied seit:
    30.12.2004
    Beiträge:
    383
    Zustimmungen:
    41
    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!
     
  5. maceis

    maceis MacUser Mitglied

    Mitglied seit:
    24.09.2003
    Beiträge:
    16.696
    Zustimmungen:
    602
    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)
     
  6. i-click

    i-click Thread Starter MacUser Mitglied

    Mitglied seit:
    30.12.2004
    Beiträge:
    383
    Zustimmungen:
    41
    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...
     
  7. maceis

    maceis MacUser Mitglied

    Mitglied seit:
    24.09.2003
    Beiträge:
    16.696
    Zustimmungen:
    602
    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.
     
  8. i-click

    i-click Thread Starter MacUser Mitglied

    Mitglied seit:
    30.12.2004
    Beiträge:
    383
    Zustimmungen:
    41
    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.
     
  9. maceis

    maceis MacUser Mitglied

    Mitglied seit:
    24.09.2003
    Beiträge:
    16.696
    Zustimmungen:
    602
    Wenn Du denkst, dass ich mich jetzt durch fast hundert Zeilen Code schaufle, hast Du Dich getäuscht.
    Nicht umsonst:
    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
     
  10. wegus

    wegus MacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.982
    Zustimmungen:
    1.545
    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)
     
Die Seite wird geladen...