Probleme compatibilite php5 et Mail_mimeDecode

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme compatibilite php5 et Mail_mimeDecode

Re: Probleme compatibilite php5 et Mail_mimeDecode

par mulbuzh » 25 janv. 2013, 18:09

pourtant ton code est bon, il est bien indiqué de faire ainsi sur plusieurs sites sur le sujet

Re: Probleme compatibilite php5 et Mail_mimeDecode

par mulbuzh » 25 janv. 2013, 18:00

si j'essaye avec ton code et celui d'origine, j'ai les memes résultats, c'est à dire a priori aucune donnée :

echo $mime_struct : array
echo $structure : rien, page blanche


var_dump($structure) renvoie :
object(stdClass)#12 (4) { ["headers"]=> array(1) { [""]=> string(0) "" } ["ctype_primary"]=> string(4) "text" ["ctype_secondary"]=> string(5) "plain" ["mime_id"]=> string(1) "1" }
var_dump($mime_struct) renvoie :
array(1) { [1]=> &object(stdClass)#12 (4) { ["headers"]=> array(1) { [""]=> string(0) "" } ["ctype_primary"]=> string(4) "text" ["ctype_secondary"]=> string(5) "plain" ["mime_id"]=> string(1) "1" } }

Re: Probleme compatibilite php5 et Mail_mimeDecode

par Mazarini » 25 janv. 2013, 17:26

tu peux essayer :
$decoder = new Mail_mimeDecode();
$structure = $decoder->decode($params);
$mime_struct =$decoder->getMimeNumbers($structure);
J'ai regardé les sources de Mail_mimeDecode rapidement, il faudrait que tu t'y plonges.
Autrement remplaces les echo par des var_dump(), ca sera plus explicite comme info sur le contenu des variables.

Re: Probleme compatibilite php5 et Mail_mimeDecode

par mulbuzh » 25 janv. 2013, 16:47

En fait, ta résolution de l'erreur semble bonne mais on dirait que le problème est ailleurs et lié a mail_mimeDecode

si je vais un echo $mime_struct cela me donne : "array"
Si je fais un echo $structure cela me renvoie rien du tout, page blanche !

C'est comme si Mail_mimeDecode ne fonctionne pas.

Re: Probleme compatibilite php5 et Mail_mimeDecode

par Mazarini » 25 janv. 2013, 16:22

Dans la doc de pear on trouve :
$decoder = new Mail_mimeDecode($input);
$structure = $decoder->decode($params);
(http://pear.php.net/manual/en/package.m ... xample.php)

L'utilisation de mimeDecode semble donc passer par la création d'un objet (new) et non en static contrairement à ce qui est dit dans la doc. A priori l'utilitaire pear fait une utilisation bizarre des objets avec du code :
// determine if this method has been called statically
        $isStatic = empty($this) || !is_a($this, __CLASS__);
Ce mélange pas très propre ne doit plus fonctionner avec les nouvelles versions de php.

Edit :
$structure = Mail_mimeDecode::decode($params);
$mime_struct = Mail_mimeDecode::getMimeNumbers($structure);
à remplacer par :
$decoder = new Mail_mimeDecode($params);
$structure = $decoder->decode();
$mime_struct =$decoder->getMimeNumbers($structure);
Avec un peu de chance...

Re: Probleme compatibilite php5 et Mail_mimeDecode

par mulbuzh » 25 janv. 2013, 15:48

bonjour,

C'est pas moi qui a codé la page, j'essaye juste de faire fonctionner mailwatch sur mon nouveau serveur.
viewmail.php et censé afficher le mail, mais cela ne fonctionne pas, j'ai une page blanche. Mais je sais pas si c'est vraiment l'erreur "non-static method" quii pose souci. En tout cas j'ai aucune autre erreur dans les logs

le code complet de viewmail.php est ici :
require_once('./functions.php');
require_once('Mail/mimeDecode.php');
ini_set("memory_limit",MEMORY_LIMIT);

session_start();
require('login.function.php');

html_start("Message Viewer");
?>
<SCRIPT LANGUAGE="JavaScript">
<!--
function do_action(id,action) {
ActionString = "quarantine_action.php?id="+id+"&action="+action+"&html=true"
DoActionWindow = window.open(ActionString,'','toolbar=no, directories=no, location=no, status=no, menubar=no, resizable=no, scrollbars=no, width=900, height=150');
}
-->
</SCRIPT>


<?php
if(!isset($_GET['id'])) {
die("No input Message ID");
} else {
$sql = "SELECT * FROM maillog WHERE id='".mysql_escape_string($_GET['id'])."' AND ".$_SESSION["global_filter"]."";
$row = @mysql_fetch_object(dbquery($sql));
// See if message is local
if(empty($row)) {
die("Message '".$_GET['id']."' not found\n");
} else {
audit_log('Quarantined message ('.$_GET['id'].') body viewed');
}
if(!is_local($row->hostname) || RPC_ONLY) {
// Host is remote - use XML-RPC
$using_rpc = true;
//$client = new xmlrpc_client(constant('RPC_RELATIVE_PATH').'/rpcserver.php',$row->hostname,80);
$input = new xmlrpcval($_GET['id']);
$parameters = array($input);
$msg = new xmlrpcmsg('return_quarantined_file',$parameters);
//$rsp = $client->send($msg);
$rsp = xmlrpc_wrapper($row->hostname,$msg);
if($rsp->faultcode()==0) {
$response = php_xmlrpc_decode($rsp->value());
} else {
die("Error: ".$rsp->faultstring());
}
$file = base64_decode($response);
} else {
// If filename input not present - work out path
$date = @mysql_result(dbquery("SELECT DATE_FORMAT(date,'%Y%m%d') FROM maillog where id='".mysql_escape_string($_GET['id'])."'"),0);
$qdir = get_conf_var('QuarantineDir');
switch(true) {
case (file_exists($qdir.'/'.$date.'/nonspam/'.$_GET['id'])):
$_GET['filename'] = $date.'/nonspam/'.$_GET['id'];
break;
case (file_exists($qdir.'/'.$date.'/spam/'.$_GET['id'])):
$_GET['filename'] = $date.'/spam/'.$_GET['id'];
break;
case (file_exists($qdir.'/'.$date.'/mcp/'.$_GET['id'])):
$_GET['filename'] = $date.'/mcp/'.$_GET['id'];
break;
case (file_exists($qdir.'/'.$date.'/'.$_GET['id'].'/message')):
$_GET['filename'] = $date.'/'.$_GET['id'].'/message';
break;
}

// File is local
if(!isset($_GET['filename'])) {
die("No input filename");
} else {
// SECURITY - strip off any potential nasties
$_GET['filename'] = preg_replace('[\.\/|\.\.\/]','',$_GET['filename']);
$filename = get_conf_var('QuarantineDir')."/".$_GET['filename'];
if(!@file_exists($filename)) {
die("Error: file not found\n");
}
$file = file_get_contents($filename);
}
}
}

$params['include_bodies'] = false;
$params['decode_bodies'] = true;
$params['decode_headers'] = true;
$params['input'] = $file;

$structure = Mail_mimeDecode::decode($params);
$mime_struct = Mail_mimeDecode::getMimeNumbers($structure);


echo "<table border=0 cellspacing=1 cellpadding=1 class=\"maildetail\" width=100%>\n";
echo " <thead>\n";
if($using_rpc) {
$title = "Message Viewer: ".$_GET['id']." on ".$row->hostname;
} else {
$title = "Message Viewer: ".$_GET['id'];
}
echo " <th colspan=2>$title</th>\n";
echo " </thead>\n";


function lazy($title, $val) {
echo ' <tr>
<td class="heading" align="right" width="10%">'.$title.'</td>
<td class="detail" width="80%">'.$val.'</td>
</tr>'."\n";
}

// Display the headers
switch(true) {
case isset($structure->headers['date']):
lazy("Date:",$structure->headers['date']);
case isset($structure->headers['from']):
lazy("From:",str_replace('"','',$structure->headers['from']));
case isset($structure->headers['to']):
lazy("To:",str_replace('"','',$structure->headers['to']));
case isset($structure->headers['subject']):
lazy("Subject:",$structure->headers['subject']);
}

if (($row->virusinfected == 0 && $row->nameinfected == 0 && $row->otherinfected == 0) || $_SESSION['user_type'] == 'A') {
lazy("Actions:","<a href=\"javascript:void(0)\" onClick=\"do_action('".$row->id."','release')\">Release this message</a> | <a href=\"javascript:void(0)\" onClick=\"do_action('".$row->id."','delete')\">Delete this message</a>");
}

foreach($mime_struct as $key=>$part) {
$type = $part->ctype_primary.'/'.$part->ctype_secondary;
echo " <tr>\n";
echo " <td colspan=2 class=\"heading\">MIME Type: $type</td>\n";

switch($type) {
case "text/plain":
case "text/html":
echo " <tr>\n";
echo " <td colspan=2>\n";
echo " <iframe frameborder=0 width=\"100%\" height=300 src=\"viewpart.php?id=".$_GET['id']."&filename=".$_GET['filename']."&part=".$part->mime_id."\"></iframe>\n";
echo " </td>\n";
echo " </tr>\n";
break;
case "message/rfc822":
break;
case "multipart/related":
break;
case "multipart/alternative":
break;
default:
echo " <tr>\n";

echo " <td colspan=2 class=\"detail\">".$part->d_parameters['filename'];
if (($row->virusinfected == 0 && $row->nameinfected == 0 && $row->otherinfected == 0) || $_SESSION['user_type'] == 'A') {
echo " <a href=\"viewpart.php?id=".$_GET['id']."&filename=".$_GET['filename']."&part=".$part->mime_id."\">Download</a>";
}
echo " </td>";

echo " </tr>\n";
break;
}
}


echo "</table>\n";

// Add footer
html_end();
// Close any open db connections
dbclose();
?>

Re: Probleme compatibilite php5 et Mail_mimeDecode

par xTG » 25 janv. 2013, 15:41

En instanciant l'objet plutôt qu'en faisant des appels statique ? :)

Car il est normal de voir ces erreurs si tu appelles de façon statique une fonction non statique.
Une fonction non statique peut être amenée à travailler sur des variables d'objet, or si l'objet n'existe pas...
Bref ce n'est pas une belle façon de coder.

Probleme compatibilite php5 et Mail_mimeDecode

par mulbuzh » 25 janv. 2013, 14:54

Bonjour,

J'utilise une passerelle mail sous linux, sur laquelle j'ai installé mailwatch qui est une interface web pour controler les spam et les mails.
bref, j'ai installé le tout sur un nouveau serveur mais mailwatch semble incompatible avec la dernière version php5

Je ne peux lire les emails, j'ai ces messages d'erreur dans apache:
PHP Strict Standards: Non-static method Mail_mimeDecode::decode() should not be called statically in /var/www/mailscanner/viewmail.php
PHP Strict Standards: Non-static method Mail_mimeDecode::getMimeNumbers() should not be called statically in/var/www/mailscanner/viewmail.php
j'ai désactivé E_STRICT dans php.ini mais cela ne résoud pas le problème , c'est vraiment le code qui pose soucis

Ce qui pose souci, c'est vraiment :
$params['include_bodies'] = false;
$params['decode_bodies'] = true;
$params['decode_headers'] = true;
$params['input'] = $file;

$structure = Mail_mimeDecode::decode($params);
$mime_struct = Mail_mimeDecode::getMimeNumbers($structure);

comment puis-je corriger ?

merci