Récupérer une variable dans un array bizarre

Fermé
ArnaudP3333x33 Messages postés 17 Date d'inscription jeudi 31 décembre 2015 Statut Membre Dernière intervention 9 juin 2018 - 1 juin 2018 à 20:02
PhpFullStack Messages postés 10 Date d'inscription vendredi 8 juin 2018 Statut Membre Dernière intervention 10 juin 2018 - 9 juin 2018 à 16:16
Bonjour,
je n'arrive pas à isoler les variables contenues dans un array pour un projet que je fais sur une messagerie web interne.
D'habitude j'arrive à m'en sortir si c'est pas trop compliqué, je suis d'un petit niveau aussi ;) mais là...
De plus, je ne peux pas afficher le script à l'écran, il travail en tache de fond, donc j'enregistre les données en sql quand il s'execute.

J'ai une variable qui est :

$sResult = $this->aHeadersValue[\Mail\Mime\Enum\Header::MESSAGE_ID];

Avec ça, je récupère le message ID d'un mail, je récupère très bien le message ID dans $sResult, une seule variable pas de problème.

Je tente de faire pareil avec celle ci, qui récupère le/les destinataire(s), il peut y en avoir plusieurs, donc ça doit être un tableau j'imagine :

$wm_to = $this->aHeadersValue[\Mail\Mime\Enum\Header::TO_];

Avec cette ligne, quand je n'ai pas une erreur, je récupère ça :
array[\Mail\Mime\Enum\Header::TO_]

Comme si le début s'exécutait, mais pas le reste.
J'ai vraiment essayé beaucoup de choses, avec des $wm_to[], $wm_to[0], des "", des '', en direct dans le sql,...bref, je sèche complet ;)

Si quelqu'un pouvait m'aider à récupérer les variables de cet array, se serait très sympa ;)

Merci.
Arnaud

3 réponses

jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
1 juin 2018 à 21:59
Bonjour,

Si ton script s'exécute en tâche de fond... cela ne devrait pas t'empecher de créer un fichier de log dans lequel tu pourrais afficher le contenu ( en mettant print_r de cette variable par exemple)

via une petite fonction par exemple :
function wh_log($log_msg)
{
    $log_dir = "logs";
    if (!file_exists($log_dir ))  {
        // create directory/folder uploads.
        mkdir($log_dir , 0777, true);
    }
    $log_file_data = $log_dir .'/log_' . date('Ymd') . '.log';
    file_put_contents($log_file_data, $log_msg . "\n", FILE_APPEND);
}


puis de l'appeler dans ton code par :
$wm_to = $this->aHeadersValue[\Mail\Mime\Enum\Header::TO_]; 
wh_log(print_r($wm_to,true));


Si tu n'y parviens pas... il faudra nous donner plus d'informations....
Par exemple, Tu pourrais nous indiquer d'où vient ce code (d'une class certainement... mais d'où la sors tu ?? )
Nous préciser également si tu codes tout ou si tu es passé par un CMS... et si oui... lequel.



1
ArnaudP3333x33 Messages postés 17 Date d'inscription jeudi 31 décembre 2015 Statut Membre Dernière intervention 9 juin 2018
Modifié le 2 juin 2018 à 08:37
Salut,
merci pour ta réponse.

Je suis dans le code d'un webmail (Afterlogic) dont j'ai la licence.

J'ai eu une approche similaire en voulant enregistrer la variable en sql, mais j'ai tout le temps une erreur, alors que les autres variables qui ne sont pas de type array s'enregistrent très bien.

J'ai essayé comme tu me le proposais, j'ai toujours la même erreur, idem qu'en sql.
Je ne peux constater l'erreur qu'en voyant que le mail que j'essais d'envoyer ne part pas.

Comme je suis dans une fonction, je l'ai ajouté comme ça :


$wm_to = $this->aHeadersValue[\MailSo\Mime\Enumerations\Header::TO_];

$log_dir = "logs";
if (!file_exists($log_dir )) {
// create directory/folder uploads.
mkdir($log_dir , 0777, true);
}
$log_file_data = $log_dir .'/log_' . date('Ymd') . '.log';
file_put_contents($log_file_data, $wm_to . "\n", FILE_APPEND);


Il marche bien car quand je place la variable $sResult évoqué dans mon premier message, à la place de $wm_to, j'ai bien le log de la variable dans le fichier créé.

Je pense que ça cause une erreur car la variable est un array et non une variable simple.
Mais d'habitude après le array[ j'ai des variables affectées que je vais chercher avec $wm_to[0], $wm_to[1],...
mais là j'ai un array avec une destination de fichier : array[\Mail\Mime\Enum\Header::TO_]

Le fichier Header dans \Mail\Mime\Enum\ existe et contient qu'un seule class ou je vois bien le TO_ mais je ne sais pas quoi en faire ;)


class Header
{
const DATE = 'Date';
const RECEIVED = 'Received';

const SUBJECT = 'Subject';

const TO_ = 'To';
const FROM_ = 'From';
const CC = 'Cc';
const BCC = 'Bcc';
const REPLY_TO = 'Reply-To';
const SENDER = 'Sender';
const RETURN_PATH = 'Return-Path';
const DELIVERED_TO = 'Delivered-To';

const MESSAGE_ID = 'Message-ID';
const IN_REPLY_TO = 'In-Reply-To';
const REFERENCES = 'References';
const X_DRAFT_INFO = 'X-Draft-Info';
const X_ORIGINATING_IP = 'X-Originating-IP';

const CONTENT_TYPE = 'Content-Type';
const CONTENT_TRANSFER_ENCODING = 'Content-Transfer-Encoding';
const CONTENT_DISPOSITION = 'Content-Disposition';
const CONTENT_DESCRIPTION = 'Content-Description';
const CONTENT_ID = 'Content-ID';
const CONTENT_LOCATION = 'Content-Location';

const SENSITIVITY = 'Sensitivity';

const RECEIVED_SPF = 'Received-SPF';
const AUTHENTICATION_RESULTS = 'Authentication-Results';
const X_DKIM_AUTHENTICATION_RESULTS = 'X-DKIM-Authentication-Results';

const DKIM_SIGNATURE = 'DKIM-Signature';
const DOMAINKEY_SIGNATURE = 'DomainKey-Signature';

const X_SPAM_STATUS = 'X-Spam-Status';

const RETURN_RECEIPT_TO = 'Return-Receipt-To';
const DISPOSITION_NOTIFICATION_TO = 'Disposition-Notification-To';
const X_CONFIRM_READING_TO = 'X-Confirm-Reading-To';

const MIME_VERSION = 'Mime-Version';
const X_MAILER = 'X-Mailer';

const X_MSMAIL_PRIORITY = 'X-MSMail-Priority';
const IMPORTANCE = 'Importance';
const X_PRIORITY = 'X-Priority';
}



Je ne vois vraiment pas comment faire.
Help ;)

Arnaud
0
PhpFullStack Messages postés 10 Date d'inscription vendredi 8 juin 2018 Statut Membre Dernière intervention 10 juin 2018
8 juin 2018 à 10:43
Copie colle l'erreur que tu as
Dans ton code, débug le de cette façon :
$wm_to = $this->aHeadersValue[\MailSo\Mime\Enumerations\Header::TO_]; 
print_r($wm_to);
exit();

Et copie le résultat que je check le contenu de $wm_to
0
ArnaudP3333x33 Messages postés 17 Date d'inscription jeudi 31 décembre 2015 Statut Membre Dernière intervention 9 juin 2018
9 juin 2018 à 12:58
Merci pour ta réponse.
La valeur de $wm_to reste vide quand j'ai une erreur.
Quand j'y met des "", cela me retourne :
array[\MailSo\Mime\Enumerations\Header::TO_]

Mais voici l'erreur retournée dans le fichier error_log :

[09-Jun-2018 12:38:48 Europe/Paris] PHP Catchable fatal error: Object of class MailSo\Mime\EmailCollection could not be converted to string in /home/chillimail/public_html/wm/libraries/MailSo/Mime/Message.php on line 510

La ligne 510 dans message.php correspond à un INSERT sql de $wm_to.
$wm_to que je récupère de cette manière (toutes les autres variables sont récupérées comme ça dans ce fichier):
$wm_to = $this->aHeadersValue[\MailSo\Mime\Enumerations\Header::TO_];

Est ce que ca t'oriente vers quelques chose ?
0
PhpFullStack Messages postés 10 Date d'inscription vendredi 8 juin 2018 Statut Membre Dernière intervention 10 juin 2018
9 juin 2018 à 13:32
$wm_to ne peut pas être vide sinon il te dirait pas qu'il peut pas la convertir en string... donc juste après $wm_to = ...
fait un var_dump($wm_to); exit();
et copie moi le résultat
0
ArnaudP3333x33 Messages postés 17 Date d'inscription jeudi 31 décembre 2015 Statut Membre Dernière intervention 9 juin 2018
9 juin 2018 à 15:17
je suis dans un fichier de fonctions qui est appelé par plusieurs fichiers avant, je ne peux donc pas afficher d'erreur.
mais je tente d'enregistrer la variable $wm_to en sql ou dans un fichier log.
Même avec var_dump je n'ai pas de résultat ce qui est très bizarre, ni en sql, ni même dans un fichier.

Si j'ajoute print_r() à $wm_to la valeur donne 1, mais je suis toujours en erreur.
j'en suis à la phase ou je comprends plus ce que je fais ;)
Il faudrait que tu vois l'ensemble dans son environnement.
0
PhpFullStack Messages postés 10 Date d'inscription vendredi 8 juin 2018 Statut Membre Dernière intervention 10 juin 2018
9 juin 2018 à 16:09
il faut que tu cherche par toi même en debugant point par point pour que tu comprenne mieux le fonctionnement global de PHP. Hésite pas à regarder la doc en ligne, tu tape par exemple : array php, ou d'autre terme que tu as du mal à comprendre pour voir des exemples
0
PhpFullStack Messages postés 10 Date d'inscription vendredi 8 juin 2018 Statut Membre Dernière intervention 10 juin 2018
Modifié le 9 juin 2018 à 16:21
$wm_to = $this->aHeadersValue[\MailSo\Mime\Enumerations\Header::TO_];

montre moi la partie de code qui set aHeadersValue... Ou alors montre moi ton code complet : )
0