Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Newsletter versenden, max_execution_time umgehen (https://www.delphipraxis.net/147468-%5Bphp%5D-newsletter-versenden-max_execution_time-umgehen.html)

TheMiller 9. Feb 2010 13:25


[PHP] Newsletter versenden, max_execution_time umgehen
 
Hallo,

ich habe einen eigenen Root-Server bei 1&1 für meine Projekte. D.h, ich nutze ihn alleine. Nun habe ich eine recht große Community aufgebaut und möchte nun ab und zu Newsletter versenden.

Nun dauert das Senden ja einige Zeit, unter umständen länger, als es die max_execution_time erlaubt.

Nun wollte ich wissen - da einige Scripts auch als CronJob laufen - ob es nicht sinnvoll ist die "m-e-t" auszuschalten. Sollte mal eine Endlosschleife auftreten, kille ich das Script per Shell (Linux).

Andernfalls ist es möglich, die Ausführungsdauer per set_time_limit zu setzen, was aber nur funktioniert, wenn der Safe-Mode ausgeschaltet ist. (Den habe ich glaub ich sogar aus ?)

Ich könnte allerdings die Mails in Paketen versenden - das wäre nicht das Problem. Problematisch ist es nur bei den Mails per Cronjob. Wie soll sich da das Skript mehrfach aufrufen um die nächsten Mail-Pakete zu senden?

Wie macht ihr sowas / zu was könnt ihr mir raten?

Danke im Voraus

Valle 9. Feb 2010 16:40

Re: [PHP] Newsletter versenden, max_execution_time umgehen
 
Hallo, :-)

Zitat:

Zitat von DJ-SPM
Nun wollte ich wissen - da einige Scripts auch als CronJob laufen - ob es nicht sinnvoll ist die "m-e-t" auszuschalten. Sollte mal eine Endlosschleife auftreten, kille ich das Script per Shell (Linux).

Nein.

Zitat:

Zitat von DJ-SPM
Andernfalls ist es möglich, die Ausführungsdauer per set_time_limit zu setzen, was aber nur funktioniert, wenn der Safe-Mode ausgeschaltet ist. (Den habe ich glaub ich sogar aus ?)

Auch nicht gut.

Zitat:

Zitat von DJ-SPM
Ich könnte allerdings die Mails in Paketen versenden - das wäre nicht das Problem. Problematisch ist es nur bei den Mails per Cronjob. Wie soll sich da das Skript mehrfach aufrufen um die nächsten Mail-Pakete zu senden?

Wie macht ihr sowas / zu was könnt ihr mir raten?

Das Schicken ins Packeten ist eine gute Idee. So regle ich das auch. Per Cronjob ist so eine Sache... Das Problem habe ich jetzt nicht, weil ich meist Python bei den Cronjobs benutze. Wie rufst du denn die PHP-Dateien per Cronjob auf? Indem du den Apache anfragst, oder die PHP-Dateien via "php-cli" direkt aufrufst? Du kannst für cli Ausführung (d.h. dann also ohne Apache) eine seperate Ini definieren. Dort kannst du safe_mode oder max_execution_time ausschalten.

Hoffe du hast das verstanden, sonst erklär' ich es nochmal praxisbezogener. :-)

Liebe Grüße,
Valle

TheMiller 9. Feb 2010 16:46

Re: [PHP] Newsletter versenden, max_execution_time umgehen
 
Hm, das klingt nicht schelcht. Ich habe die Scripts immer direkt mit Apache aufgerufen. Hab also eine PHP-Datei erstellt und vor dem PHP "<?php" den Pfad zum Interpreter angegeben.

An einer solchen Erklärung wäre ich interessiert ;)

Danke

Valle 9. Feb 2010 16:54

Re: [PHP] Newsletter versenden, max_execution_time umgehen
 
Also, das ist ganz einfach. Folgender Eintrag dient jetzt mal als Beispiel für die Datei /etc/ctontab (die du ja hoffentlich kennst. Wenn nicht: "man 5 crontab").

Code:
# m h dom mon dow user   command
17 *   * * *   www-data   php /path/to/script.php
Das Script wird dann als CLI ausgeführt. Dafür brauchst du das Packet php5-cli. Sofern du Debian oder Ubuntu benutzt, wird dann statt der üblichen php.ini unter /etc/php5/apache2/ die php.ini im Verzeichnis /etc/php5/cli/ benutzt. Dort kannst du deine Einstellungen dann seperat vom Apache vornehmen. ;-)

Liebe Grüße,
Valle

TheMiller 9. Feb 2010 16:58

Re: [PHP] Newsletter versenden, max_execution_time umgehen
 
Ah ok, das schaue ich mir gleich mal an. Danke dir soweit!

alcaeus 9. Feb 2010 17:54

Re: [PHP] Newsletter versenden, max_execution_time umgehen
 
Kleiner Tipp: Shebang in den PHP-Dateien setzen:
Code:
#!/usr/bin/php5
<?php
echo 'Hello world!';
?>
(Natuerlich erstmal mit "which php5" den Pfad zur PHP-binary rausfinden und den eintragen)
Anschliessend die Datei ausfuehrbar machen:
Code:
chmod +x helloworld.php
Und dann aufrufen:
Code:
./helloworld.php
Und tadaaaaaa, schon wird was ausgegeben.

@Valle: wenn php-cli installiert wird hat die mitgelieferte php.ini bereits ein hoeheres memory_limit als jene fuer apache2. Ausserdem gibt es noch weitere Unterschiede, die in der PHP-Doku erklaert sind - max_execution_time ist bereits auf 0 gesetzt, weil solche crons doch haeufig fuer die PHP-CLI geschrieben werden.

@DJ-SPM: guck dir mal die Swift-Library an. Diese hat diverse Spooler-Klassen, und wenn ich mich recht erinnere auch eine Mail-Queue, wo du nur noch die geschriebene Queue in nem Cron abarbeiten musst :)

Greetz
alcaeus

TheMiller 9. Feb 2010 17:59

Re: [PHP] Newsletter versenden, max_execution_time umgehen
 
Hallo,

danke für den Tipp, aber so verfahre ich die ganze Zeit schon, auch mit der Shebang. Nur so kann ich ja keine Paket-Sendung realisieren? Ein Meta-Refresh etc hat ja dort keine Wirkung. Die Seite wird also nur einmal abgearbeitet - das ist ja grad mein Problem.

Valle 9. Feb 2010 18:01

Re: [PHP] Newsletter versenden, max_execution_time umgehen
 
Zitat:

Zitat von alcaeus
Kleiner Tipp: Shebang in den PHP-Dateien setzen

Warum so, wenn man doch einfach die php Executable mit dem Pfad zum Script Paramter aufrufen kann? ;-)

Zitat:

Zitat von alcaeus
@Valle: wenn php-cli installiert wird hat die mitgelieferte php.ini bereits ein hoeheres memory_limit als jene fuer apache2. Ausserdem gibt es noch weitere Unterschiede, die in der PHP-Doku erklaert sind - max_execution_time ist bereits auf 0 gesetzt, weil solche crons doch haeufig fuer die PHP-CLI geschrieben werden.

Das weiß ich doch. :gruebel:

Zitat:

Zitat von DJ-SPM
danke für den Tipp, aber so verfahre ich die ganze Zeit schon, auch mit der Shebang. Nur so kann ich ja keine Paket-Sendung realisieren? Ein Meta-Refresh etc hat ja dort keine Wirkung. Die Seite wird also nur einmal abgearbeitet - das ist ja grad mein Problem.

Wenn du einen Cronjob mit ohne max_execution_time hast,
dann brauchst du die E-Mails nicht mehr in Packete zusammenfassen. ;-)

Liebe Grüße,
Valle


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz