8721 sujets

Développement web côté serveur, CMS

Bonjour,
j'ai un script php qui s'occupe d'envoyer des mails, pour simplifier la chose j'ai fais un script de test:
<?php
	if(mail('adresse-mail@machin.com','test','test')) echo 'ok';
	else echo 'ko';
?>

Lorsque j'exécute le script depuis mon navigateur, il me retourne ko. Soit. Mais lorsque je l'exécute depuis ma console en ssh, il me retourne ok ! Et je reçois bien le mail !
Je me suis dis que c'était peut être du à des droits utilisateurs que www-data n'avait pas, mais même en exécutant le script en tant que www-data (toujours depuis la console donc), le script me retourne ok !
Je ne comprend pas du tout ce qui se passe: à part l'utilisateur, je ne vois pas ce qui diffère entre l'exécution d'un script depuis un navigateur, et depuis une console...

Voilà tout, sachez que le serveur est à moi donc je peux faire ce que je veux, merci de votre aide !
Modifié par juliendargelos (12 Mar 2014 - 13:49)
Le php.ini n'est pas le même entre la version CLI et la version apache/CGI (en gros on
a /etc/php5/php.ini vs /etc/apache2/php.ini).

Tu as probablement un problème de configuration dans la version CGI que tu n'as pas en CLI. Ca peut être un problème de droits, mais ça peut aussi être plein d'autres choses. Essaie de comparer les paramètres relatifs aux mails dans les deux php.ini, tu va sûrement trouver ce qui n'est pas pareil.
Mmmh, petit problème: on ne parle pas de la même version de apache et php je pense:
j'ai bien un fichier php.ini à /etc/php5/apache2/php.ini
mais je n'en trouve pas à /etc/apache2/

Bien que je les ai déjà aperçu, les lettres CLI et GLI ne me sont pas familières... Ça veut dire quoi ?
Modifié par juliendargelos (12 Mar 2014 - 15:16)
Modérateur
CLI : Command Line Interface
CGI : Common Gateway Interface / C'est en gros une manière de faire tourner un serveur avec des languages comme PHP (sans Apache).

pour trouver le php.ini utilisé par le CLI (php dans la console), il suffit de taper dans la console:

php --ini


pour trouver le fichier ini utilisé par apache, il faut utiliser phpinfo(), et consulter la page sur laquelle on a déposé cette fonction magique!
Modifié par kustolovic (12 Mar 2014 - 19:17)
Merci de ton aide Smiley smile
Voilà les portions de ces fichiers relatives à la fonction mail:

/etc/php5/cli/php.ini
[mail function]
; For Win32 only.
;  http://php.net/smtp
 
SMTP = smtp.free.fr
;  http://php.net/smtp-port
 
smtp_port = 25

; For Win32 only.
;  http://php.net/sendmail-from
 
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;  http://php.net/sendmail-path
 
sendmail_path = /usr/sbin/sendmail -i -t

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On

; The path to a log file that will log all mail() calls. Log entries include
; the full path of the script, line number, To address and headers.
;mail.log =


/etc/php5/apache2/php.ini
[mail function]
; For Win32 only.
;  http://php.net/smtp
 
SMTP = localhost
;  http://php.net/smtp-port
 
smtp_port = 25

; For Win32 only.
;  http://php.net/sendmail-from
 
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;  http://php.net/sendmail-path
 
sendmail_path = /usr/sbin/sendmail

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On

; The path to a log file that will log all mail() calls. Log entries include
; the full path of the script, line number, To address and headers.
;mail.log =


Est-ce la différence du serveur smtp qui est en cause ?
Non, le SMTP c'est seulement pour windows, c'est bien précisé en commentaire juste au-dessus. Sur les autres OS ce n'est pas utilisé.

Par contre, je vois que les paramètres passés à l'application sendmail sont différents, je pense que le souci vient de là.
Yep ! Ça fonctionne, j'ai modifié le fichier /etc/php5/apache2/php.ini en remplaçant la valeur de sendmail_path par celle du fichier /etc/php5/cli/php.ini:

/etc/php5/apache2/php.ini
sendmail_path = /usr/sbin/sendmail -i -t


En effet:
-i          Ignore dots alone on lines by themselves in incoming mes-
                 sages.  This should be set if you are reading data from a
                 file.

-t          Read message for recipients.  To:, Cc:, and Bcc: lines will
                 be scanned for recipient addresses.  The Bcc: line will be
                 deleted before transmission.


Merci beaucoup à vous ! Smiley lol