Ecraser une fonction PHP

8 réponses
AuteurMessage

krucial |
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 17/12/2007 à 12:10

Salut a tous

Je voudrais ré-écrire la fonction mail de PHP. Je sais que c'est possible, j'ai déjà vu un bout de code qui permettait d'écraser une fonction integrée a PHP. Mais impossible de retrouver la manip.

En gros, je veux transformer la fonction mail de X serveurs d'un cluster pour stocker le courrier en bdd et le faire partir d'une seule machine via une tache cron. C'est plus facile a gérer d'avoir une seule machine qui envoie du courrier.

Biensur, j'ai utilisé la focntion mail() dans mes scripts. Je preferais la ré-ecrire plutit que chercher toutes les pages qui l'utilisent et les modifier toutes (même si elles ne doivent pas être nombreuses).

J'ai trouvé une fonction http://fr.php.net/manual/fr/function.override-func...Ouvrir dans une nouvelle fenetre mais si il faut que j'installe des modules et compagnies, autant me retaper toutes les pages ...

Vous avez déjà été confronté a cette situation ?

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

bhamp0 | Benjamin
Membre

Photo de bhamp0

Inscrit le : 09/05/2005

# Le 17/12/2007 à 12:24

D'où l'intérêt de programmer en objet

A ma connaissance, il n'y a pas d'autre solution que override qui est disponible en tant qu'extension PECL (extension peu recommandée, d'ailleurs, de part ses incompatibilités).

L'autre solution va être un chercher/remplacer sur tous tes fichiers ... Eclipse, Vim, ..., font ça très bien et rapidement (et profites en pour passer ton système d'envoi des mails dans une classe )

Quand on voit c'qu'on voit, et qu'on entend c'qu'on entend, on a raison d'penser c'qu'on pense !

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 17/12/2007 à 12:25

Hello,

à ma connaissance ce n'est pas faisable avec la version de base de PHP, mais je suis déjà tombé sur une extension le permettant (peut etre bien apd d'ailleurs, comme tu l'indiques). L'autre solution étant la modification / recompilation de PHP

Selon le serveur de mail que tu utilises, le plus simple est peut etre de rediriger tous les mails vers la machine de ton choix, et cette machine devra juste accepter de relayer les mails depuis ces quelques machines.

Par contre d'un point de vue "mailing", de mon coté j'ai tendance à multiplier les IP afin de palier aux problèmes de quota. Le fait de tout envoyer depuis la même, cela risque de poser des soucis non ?

EDIT : histoire de chipoter, Bhamp0 : ceci n'est pas propre au modele objet, la factorisation ça marche aussi en "procédural" classique bien que moins pratique

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

krucial | Jean Christophe
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 17/12/2007 à 12:31

Bool a dit :
Par contre d'un point de vue "mailing", de mon coté j'ai tendance à multiplier les IP afin de palier aux problèmes de quota. Le fait de tout envoyer depuis la même, cela risque de poser des soucis non ?


Ah ouais ? Je me disais que justement, c'etait plus pratique d'avoir une seule adresse IP, pour pouvoir mieux la declarer au cas ou ... De toutes façons, les machines du cluster etant en sous reseaux, ca sera quoi qu'il arrive la même IP.

Bon bin c parti pour un remplace general.

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

devtribu | Olivier
Modérateur

Photo de devtribu

Inscrit le : 16/06/2005

# Le 17/12/2007 à 12:34

Ca sent les grandes manoeuves sur vacanceo

Je n'appelle pas les les fonctions de base mail, query, ... en direct mais je passe toujours par un appel intermédiaire bt_XXX(). Pas besoin de programmation objet pour ca d'ailleurs.

C'est quand meme risqué de surcharger une fonction comme mail() qui en fait ecrit en BDD. Ca ne facilite pas la compréhension du code. Pense aux pauvres developpeurs qui maintiendront ton code quand tu auras revendu ton site...

Février 2019, mon futur livre Tout JavaScript chez Dunod https://amzn.to/2PoLd0fOuvrir dans une nouvelle fenetre

krucial | Jean Christophe
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 17/12/2007 à 13:26

C'est pas bien compliqué non, un insert, et un script en cron qui balance sur une machine séparée. Ca a un double avantage je trouve :
1 - pouvoir mieux gerer les doublons (tu peux verifier au moment de l'envoi que tu ne balances pas X fois le meme mail (double clic sur un bouton par exemple))
2 - l'envoi d'email est une etape longue. Externaliser son emploi permet d'ameliorer la vitesse de chargement de certaines pages (exemple, reponse a un forum qui balance des mails a ceux qui suivent le sujet)

En effet, pour ameliorer la dispo de Vacanceo, limiter le risque de panne et construire le site sur une base saine, je mets en place un cluster de serveur pour le HTTP de Vacanceo.com. Et c'est un peu fastidieux car je ne l'avais pas prevu a la base.

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 17/12/2007 à 16:18

Pour le point 2, encore une fois il s'agit d'un "réglage" du serveur de mail. Sous Exim si tu lui indiques de tout mettre en queue par défaut, il n'ira pas chercher plus loin et rendra la main aussitot à tes scripts (c'est un peu le principe du "INSERT DELAYED" de MySQL).

De ce que je comprends tu mets en place un cluster via LVS-NAT, ça tient bien ? (tout le traffic va passer par un seul et meme point, dans les deux sens)
Cette solution n'est pas vraiment utilisable avec des machines "louées", je n'ai jamais pu tester.

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

krucial | Jean Christophe
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 17/12/2007 à 16:34

Ouais ouais ca marche tres bien L'avantage est d'avoir une seule machine frontale et que les autres soient "inaccessibles" du web.

Pour exim, je ne connais pas tres bien et j'ai du mal a trouver de la doc donc je ne pousse pas plus loin. Mais je prefere faire "simple" et ne pas installer et configurer de serveur mail a chaque node ajouté.

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 17/12/2007 à 17:43

Béh dans tous les cas il faut un serveur de mail sur une machine (ne serait ce qu'un truc minimale) pour les messages systèmes.

Du genre smartd qui t'informe qu'un disque va lacher, ou logcheck pour te dire que tu t'es fait hacker

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 14:42:03 | Généré en 7.02ms | Contacts | Mentions légales |