Un point d'interrogation en ligne 60 d'envoyer_mail.php #21

Open
opened 10 months ago by thrax · 7 comments
thrax commented 10 months ago
Collaborator

Bonsoir,

Avec le plugin Facteur 5.0.3 et sous SPIP 4.0.6, l'envoi d'identifiant de visiteur s'inscrivant depuis la partie publique bloque.

J'ai le messages suivant dans le log PHP :

  thrown in (...)plugins/auto/facteur/v5.0.3/inc/envoyer_mail.php on line 60
[27-May-2022 20:20:22 UTC] PHP Fatal error:  Uncaught TypeError: Argument 5 passed to inc_envoyer_mail() must be of the type string, null given, called in (...)/ecrire/inc/queue.php on line 283 and defined in (...)/plugins/auto/facteur/v5.0.3/inc/envoyer_mail.php:60
Stack trace:
#0 /(...)/ecrire/inc/queue.php(283): inc_envoyer_mail()
#1 /(...)/ecrire/inc/queue.php(409): queue_start_job()
#2 /(...)/ecrire/inc/genie.php(99): queue_schedule()
#3 /(...)/ecrire/inc/utils.php(1094): inc_genie_dist()
#4 /(...)/ecrire/inc/utils.php(1062): cron()
#5 /(...)/ecrire/public/aiguiller.php(77): action_cron()
#6 /(...)/ecrire/public.php(99): traiter_appels_actions()
#7 /(...)/spip.php(20): include('/home/users/lil...')
#8 {main}

Il s'agit de tâche périodique relancée (auteurs => bouton relancer les inscriptions).

Si l'on regarde la fonction incriminée :
function inc_envoyer_mail($destinataire, string $sujet, $message, ****?string**** $from = '', string $headers = '')

Le cinquième argument a un point d'interrogation au lieu d'un $

Le problème ne doit donc pas se limiter à la relance des inscriptions...

Merci pour votre aide.

Thrax

Bonsoir, Avec le plugin Facteur **5.0.3** et sous SPIP **4.0.6**, l'envoi d'identifiant de visiteur s'inscrivant depuis la partie publique bloque. J'ai le messages suivant dans le log PHP : ``` thrown in (...)plugins/auto/facteur/v5.0.3/inc/envoyer_mail.php on line 60 [27-May-2022 20:20:22 UTC] PHP Fatal error: Uncaught TypeError: Argument 5 passed to inc_envoyer_mail() must be of the type string, null given, called in (...)/ecrire/inc/queue.php on line 283 and defined in (...)/plugins/auto/facteur/v5.0.3/inc/envoyer_mail.php:60 Stack trace: #0 /(...)/ecrire/inc/queue.php(283): inc_envoyer_mail() #1 /(...)/ecrire/inc/queue.php(409): queue_start_job() #2 /(...)/ecrire/inc/genie.php(99): queue_schedule() #3 /(...)/ecrire/inc/utils.php(1094): inc_genie_dist() #4 /(...)/ecrire/inc/utils.php(1062): cron() #5 /(...)/ecrire/public/aiguiller.php(77): action_cron() #6 /(...)/ecrire/public.php(99): traiter_appels_actions() #7 /(...)/spip.php(20): include('/home/users/lil...') #8 {main} ``` Il s'agit de tâche périodique relancée (auteurs => bouton relancer les inscriptions). Si l'on regarde la fonction incriminée : `function inc_envoyer_mail($destinataire, string $sujet, $message, ****?string**** $from = '', string $headers = '')` Le cinquième argument a un point d'interrogation au lieu d'un $ Le problème ne doit donc pas se limiter à la relance des inscriptions... Merci pour votre aide. Thrax

Le point d'interrogation est sur le 4ème argument là hein :)
Et c'est une syntaxe normale, c'est le type, ya pas à avoir de $ du tout

Le 5ème argument c'est $headers

PHP ? 8 ?

Le point d'interrogation est sur le 4ème argument là hein :) Et c'est une syntaxe normale, c'est le type, ya pas à avoir de $ du tout Le 5ème argument c'est $headers PHP ? 8 ?
Poster
Collaborator

Non le mail test passe ; la graphie avec le point d'interrogation doit provenir d'une évolution du PHP que je ne connais pas.
Aucun problème avec Facteur.

Mais il faut regarder l'action relancer_inscription.

Ma version de PHP est PHP Version 7.4.29

Non le mail test passe ; la graphie avec le point d'interrogation doit provenir d'une évolution du PHP que je ne connais pas. Aucun problème avec Facteur. Mais il faut regarder l'action **relancer_inscription**. Ma version de PHP est PHP Version 7.4.29
thrax closed this issue 10 months ago
thrax reopened this issue 10 months ago
Poster
Collaborator

Si c'est le $headers, cela se joue dans l'appel de l'action inscrire_auteur (appelée par relancer_inscription) au niveau de ces lignes :

// charger de suite cette fonction, pour ses utilitaires
$envoyer_inscription = charger_fonction('envoyer_inscription', '');
list($sujet, $msg, $from, $head) = $envoyer_inscription($desc, $nom, $statut, $options);

$notifications = charger_fonction('notifications', 'inc');
notifications_envoyer_mails($mail_complet, $msg, $sujet, $from, $head);

Et la fonction envoyer_inscription renvoie un $head à null (ligne 252 : $head = null;)

Ceci dit, je ne comprends pas pourquoi cela pose problème. Il y aurait une différence entre $head = null; et $head = ''; ?

Si c'est le $headers, cela se joue dans l'appel de l'action `inscrire_auteur` (appelée par relancer_inscription) au niveau de ces lignes : ``` // charger de suite cette fonction, pour ses utilitaires $envoyer_inscription = charger_fonction('envoyer_inscription', ''); list($sujet, $msg, $from, $head) = $envoyer_inscription($desc, $nom, $statut, $options); $notifications = charger_fonction('notifications', 'inc'); notifications_envoyer_mails($mail_complet, $msg, $sujet, $from, $head); ``` Et la fonction **envoyer_inscription** renvoie un **$head** à null (ligne 252 : `$head = null;`) Ceci dit, je ne comprends pas pourquoi cela pose problème. Il y aurait une différence entre `$head = null;` et `$head = '';` ?
Poster
Collaborator

il y a effectivement une différence car j'ai changé $head = null par $head = ''; et je n'ai plus d'erreur php.

Suis-je le seul a avoir ce problème ?

il y a effectivement une différence car j'ai changé $head = null par $head = ''; et je n'ai plus d'erreur php. Suis-je le seul a avoir ce problème ?

bé oui c'est pour ça que je te demandais ta version de PHP :)

là c'est justement pas "?string" dans la déclaration du type attendu de l'argument mais "string" tout court, donc ça veut dire QUE string, pas "string ou null".

bé oui c'est pour ça que je te demandais ta version de PHP :) là c'est justement pas "?string" dans la déclaration du type attendu de l'argument mais "string" tout court, donc ça veut dire QUE string, pas "string ou null".

Et donc à mon avis il faut mettre pareil que pour l'argument précédent, "?string". Je sais pas pourquoi celui là il a été mis à string tout court… Surtout si dans la nature ya des cas où ça renvoie null. Ou bien faut corriger le noyau aussi dans envoyer_inscription (donc faire un ticket noyau si on ajoute pas le "?").

Et donc à mon avis il faut mettre pareil que pour l'argument précédent, "?string". Je sais pas pourquoi celui là il a été mis à string tout court… Surtout si dans la nature ya des cas où ça renvoie null. Ou bien faut corriger le noyau aussi dans envoyer_inscription (donc faire un ticket noyau si on ajoute pas le "?").
Poster
Collaborator

ok. Tout compris. Merci. Je te laisse t'occuper du sacro saint core/corps, me sentant encore indigne de le toucher ?
(délire du soir)

ok. Tout compris. Merci. Je te laisse t'occuper du sacro saint core/corps, me sentant encore indigne de le toucher ? (*délire du soir*)
Sign in to join this conversation.
No Label
No Milestone
No Assignees
2 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.