Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] ics (iCalendar) mit php aktualisieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] ics (iCalendar) mit php aktualisieren

    Hallo,

    auf dem Server wird eine ics-Datei gespeichert, welche mit Kalenderprogrammen abonniert werden kann. Mit php möchte ich nun die ics-Datei ändern bzw. aktualisieren.
    So sieht die Datei vor der Bearbeitung aus:
    Code:
    BEGIN:VCALENDAR
    VERSION:2.0
    METHOD:PUBLISH
    X-WR-TIMEZONE:Europe/Berlin
    END:VCALENDAR
    und so danach:
    Code:
    BEGIN:VCALENDAR
    VERSION:2.0
    METHOD:PUBLISH
    X-WR-TIMEZONE:Europe/Berlin
    BEGIN:VEVENT
    DTSTART;VALUE=DATE:20120107
    DTEND;VALUE=DATE:20120108
    DTSTAMP:20120107T161432
    UID:4f08615876a45
    DESCRIPTION:Test
    SUMMARY:Test
    END:VEVENT
    END:VCALENDAR
    Die Datei wird mit file_put_contents beschrieben.
    Allerdings wird z.B. in iCalendar der neue Termin nicht angezeigt. Erst wenn ich die Datei herunterlade, bearbeite (z.B. Termin -> Termin2) und per FTP wieder hochlade, wird der Termin angezeigt.
    Jemand eine Idee, woran das liegen könnte?

  • #2
    Vielleicht am Zeichensatz oder falschen Umbruchzeichen. Vergleich doch einfach mal beide Dateien mit einem Differ.

    Kommentar


    • #3
      Hast du den safe_mode auf on?
      Irgendwie erinnert mich das an diese safe_mode-Probleme mit den unterschiedlichen Besitzern.

      Kommentar


      • #4
        Danke für die schnelle Antwort.
        Ich poste mal den Code, den für den Eintrag zuständig ist.

        PHP-Code:
        // Eintrag definieren
        $eintrag "X-WR-TIMEZONE:Europe/Berlin
        BEGIN:VEVENT
        DTSTART"
        ;
        if (isset(
        $_POST['ganztaegig'])) {
            
        $eintrag .= ";VALUE=DATE:";
        }
        $eintrag .= "$date_start\n";
        if (!isset(
        $_POST['ganztaegig'])) {
            
        $eintrag .= "T".$time_start."Z\n";
        }
        $eintrag .= "DTEND";
        if (isset(
        $_POST['ganztaegig'])) {
            
        $eintrag .= ";VALUE=DATE:";
        }
        $eintrag .= "$date_end\n";
        if (!isset(
        $_POST['ganztaegig'])) {
            
        $eintrag .= "T".$time_end."Z\n";
        }
        $eintrag .= "DTSTAMP:$now
        UID:
        $uniqid
        SUMMARY:
        $terminname
        END:VEVENT
        "
        ;
            
        // ICS aktualisieren
        $ics file("ics/test.ics");
        array_splice($ics31$eintrag);
        $string implode(""$ics);
        if (
        file_put_contents("ics/test.ics"$string)) {
            echo 
        "Erfolgreich.";
        }
        else {
            echo 
        "Fehler.";

        $_POST['ganztaegig'] ist eine Checkbox für ganztägige Termine.

        Kommentar


        • #5
          welche mit Kalenderprogrammen abonniert werden kann
          Und die stößt Du hinterher auch an?

          Kommentar


          • #6
            Ja, safe_mode ist an und der Ordner ist mit htaccess geschützt.

            Kommentar


            • #7
              Und die stößt Du hinterher auch an?
              Die Kalenderprogramme aktualiseren alle abonnierten Kalender beim Start. Und hier schein wohl auch das Problem zu liegen.
              Also Outlook unter Win zeigt den neuen Termin problemlos an. Der Kalender unter iOS macht Probleme. Tut mir Leid, dass ich das nicht gleich getestet habe!
              Wobei ich nicht ganz verstehe, warum. Wenn ich den Kalender per FTP hochlade, wird der Termin ja auch angezeigt. Und ob die Datei serverseitig mit PHP oder per FTP geändert wird, dürfte das Programm ja wohl kaum mitbekommen, oder?

              Kommentar


              • #8
                Wenn es mit ftp funktioniert, würde ich in php mit ftp-befehlen arbeiten.
                Siehe Beispiel #1 http://www.php.net/manual/de/function.ftp-fput.php

                Kommentar


                • #9
                  FTP macht keine andere Datei als ein PHP-Skript, daran darf es garnicht liegen. Aber es könnte andere Änderungszeiten, Zugriffsrechte, Besitzer-IDs festlegen oder dein Texteditor hängt noch eine BOM vorndedran usw. usf...
                  Vermutlich liegts an den verwendeten Steuerzeichen:
                  - iOS braucht \r
                  - dein Texteditor läuft wahrscheinlich unter Windows (\r\n), enthält also ein \r
                  - dein Skript fügt nur \n ein und liefert das (eventuell) von iOS benötigte \r nicht.
                  Gruß

                  Kommentar


                  • #10
                    Unglaublich! Es liegt tatsächlich am Umbruch! Mit \r\n funktioniert es.
                    Euch allen vielen Dank für die Hilfe!

                    Kommentar


                    • #11
                      Vergleich doch einfach mal beide Dateien mit einem Differ.
                      Hätte zum Ziel geführt.

                      Kommentar

                      Lädt...
                      X