Caching von vielen Dateien

  1. Jakob

    Jakob Thread StarterMacUser Mitglied

    Mitglied seit:
    05.01.2004
    Beiträge:
    1.067
    Zustimmungen:
    21
    Hallo,

    eine eher grundlegende Frage zu PHP:
    In meinem Katalog gibt es umfangreiche technische Datenblätter als PDF, die sich dynamisch erstellen. Da das recht langsam ist, würde ich gerne die PDFs schon vorher erstellen und nur bei Änderungen neu berechnen lassen.

    Pro PDF braucht er ca. 10 Sekunden und davon gibt es ca. 500. Das sprengt natürlich jedes PHP-Ausführungs-Zeitlimit. Gibt es einen Weg, das trotzdem automatisieren zu können? Danke!
     
    Jakob, 29.10.2006
  2. Gunter_S

    Gunter_SMacUser Mitglied

    Mitglied seit:
    15.03.2004
    Beiträge:
    147
    Zustimmungen:
    3
    Ja das geht, es gibt dazu 4 Grundlegende Möglichkeiten:
    1. Du startest für jede PDF einen eigenen PHP-Prozess
    2. Du machst es nicht mit PHP
    3. Du läßt PHP zB über cronjob laufen und zwar mit einer anderen php.ini, in der die maximale Ausführungszeit hochgesetzt ist
    4. Du erlaubst PHP-Skripten in bestimmten Ordnern eine höhere Ausführungszeit (Einstellung in der Apache Konfigurationsdatei):
    PHP:
    <Directory /Pfad/zu/dem/Ordner>
        
    php_admin_value max_execution_time 3600
    </Directory>
    aber keine der Möglichkeiten wird funktionieren, wenn du nicht die benötigten Rechte auf dem Webserver hast.

    Gunter
     
    Gunter_S, 30.10.2006
  3. Jakob

    Jakob Thread StarterMacUser Mitglied

    Mitglied seit:
    05.01.2004
    Beiträge:
    1.067
    Zustimmungen:
    21
    Hallo, die erste Möglichkeit hört sich sehr gut an. So etwas hab ich schon länger versucht. Wo kann ich mich denn dazu schlau machen?
     
    Jakob, 30.10.2006
  4. Gunter_S

    Gunter_SMacUser Mitglied

    Mitglied seit:
    15.03.2004
    Beiträge:
    147
    Zustimmungen:
    3
    Das kannst du nicht in einem PHP-Skript machen. Sondern du brauchst eben ein Programm oder einen User der die Skripte "anstößt".

    Als Beispiel einen Benutzer der die Webadressen
    Code:
    http://deineDomain.de/create.php?file=1
    http://deineDomain.de/create.php?file=2
    http://deineDomain.de/create.php?file=3
    usw aufruft.

    Um den Aufruf mit Variable zu vermeiden, könntest du auch der Tabelle in der die Daten liegen, eine Spalte "created" hinzufügen. Und dann beim Aufrufen des Skriptes den nächsten, noch nicht gecachten Eintrag, holen und dort den Wert von "created" auf "yes" stellen.

    Der Aufruf muss natürlich nicht von einem Benutzer aus geschehen, das kann ja auch ein Skript übernehmen... Mein Favorit wäre dafür cronjob.

    Gunter
     
    Gunter_S, 30.10.2006
  5. Jakob

    Jakob Thread StarterMacUser Mitglied

    Mitglied seit:
    05.01.2004
    Beiträge:
    1.067
    Zustimmungen:
    21
    So ähnlich mache ich es schon mit HTML-Dateien, die aus einem langen PHP-Skript erzeugt werden, nur dass da eben der erste User, der auf den Eintrag geht das Skript anstößt. Das ging bei den PDFs nicht, da ich dem User so lange Wartezeiten nicht zumuten kann.
    Die Brücke zum cronjob hat mir da gefehlt. Werd mich da mal schlau machen. Danke!
     
    Jakob, 30.10.2006
  6. wegus

    wegusMacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.982
    Zustimmungen:
    1.545
    Wo kommen denn die Daten für die PDF's her!? Datenbank vermute ich oder?

    Dann würde ich doch per crontab ein PHP-Script in der bash starten, daß die Tabelle nach geänderten Datensätzen durchsucht und aus diesen neue PDF's generiert. nat. muß man bei PHP-Skripten in Shells sinnvollerweise die max_execution-Time anheben ( weiß gerade den Namen der Methode dafür nicht mehr).
     
    wegus, 30.10.2006
  7. Jakob

    Jakob Thread StarterMacUser Mitglied

    Mitglied seit:
    05.01.2004
    Beiträge:
    1.067
    Zustimmungen:
    21
    Vielen Dank, funktioniert gut.

    Eine kleine Frage zum Schluss: Kann ich ohne cronjob eine PHP-Datei im Hintergrund öffnen, d.h. z.B. ein User klickt auf einen Button, kommt auf eine neue Seite, derweil wird aber ohne das er das merkt im Hintergrund ein anderes PHP Skript gestartet.

    include() wäre eine Möglichkeit, aber leider sind dann ja die ganzen relativen Pfadangaben verschoben. Ich würde gerne einfach den Aufruf des Skriptes unter seiner eigenen URL simulieren.
     
    Jakob, 31.10.2006
  8. neuni

    neuniMacUser Mitglied

    Mitglied seit:
    20.10.2006
    Beiträge:
    413
    Zustimmungen:
    15
    Kannst erst aufs Hintergrund-Script verlinken, und in das wiederrum header("Location: anderedatei.php"); machen...kommt halt drauf an wie lange das hintergrund-script braucht...solange hängt die Weiterleitung auf die anderedatei.php dann auch...
     
    neuni, 31.10.2006
  9. Jakob

    Jakob Thread StarterMacUser Mitglied

    Mitglied seit:
    05.01.2004
    Beiträge:
    1.067
    Zustimmungen:
    21
    Ja, das Hängen ist ja das, was ich verhindern wollte. Man könnte es per iframe oder AJAX machen, aber das finde ich zu dreckig in dem Fall. Schade, dass es sonst nicht geht.
     
    Jakob, 01.11.2006
  10. neuni

    neuniMacUser Mitglied

    Mitglied seit:
    20.10.2006
    Beiträge:
    413
    Zustimmungen:
    15
    Naja...ich glaub es gibt da ne Möglichkeit, dass PHP das Script auch ausführt, wenn der Benutzer die Anfrage abbricht...vielleicht kannste das ja irgendwie nutzen. Also kurz das Script anstoßen und dann zu der Seite gehen, die der User sehen soll.
     
    neuni, 01.11.2006
Die Seite wird geladen...
Ähnliche Themen - Caching vielen Dateien
  1. K2vp
    Antworten:
    2
    Aufrufe:
    922
    rpoussin
    25.09.2014
  2. MuffinSebi
    Antworten:
    2
    Aufrufe:
    974
    MuffinSebi
    23.10.2013
  3. Lior
    Antworten:
    2
    Aufrufe:
    1.950
    falkgottschalk
    28.01.2013
  4. gegenwind
    Antworten:
    1
    Aufrufe:
    452
  5. mahed
    Antworten:
    0
    Aufrufe:
    570