Problème avec la fonction Copy

Eléphant du PHP | 121 Messages

27 janv. 2010, 22:16

Bonjour à tous,

J'ai un petit souci avec la fonction Copy.

J'aimerai envoyer un mail depuis mon site avec un fichier word, mais j'ai un message d'erreur.
Warning: copy() [function.copy]: open_basedir restriction in effect. File() is not within the allowed path(s): (/home/www/f4e28b24b8dad49a90a589664765c79c:/tmp:/opt/php/lib/php) in /home/www/f4e28b24b8dad49a90a589664765c79c/web/club/membres/formmailmembres.php on line 41
Class Mail, method attach : file upload/PVAG23012010.doc can't be found
Si je prends une photo par exemple cela fonction, mais pas avec ce fichier.

Merci à celui qui pourra m'aider.

Eléphant du PHP | 121 Messages

27 janv. 2010, 22:45

Re,

D'après mes recherches, le problème vient du poids de mon fichier. Mais dans la class mail que l'on m'a fourni je ne trouve pas pour modifier la taille maximum du fichier téléchargé.

Ma class mail.
<?php
class Mail
{

        var $sendto= array();
        var $from, $msubject;
        var $acc= array();
        var $abcc= array();
        var $aattach= array();
        var $priorities= array( '1 (Highest)', '2 (High)', '3 (Normal)', '4 (Low)', '5 (Lowest)' );


// Mail contructor

function Mail()
{
        $this->autoCheck( true );
}


/*                autoCheck( $boolean )
 *                activate or desactivate the email addresses validator
 *                ex: autoCheck( true ) turn the validator on
 *                by default autoCheck feature is on
 */

function autoCheck( $bool )
{
        if( $bool )
                $this->checkAddress = true;
        else
                $this->checkAddress = false;
}


/*                Subject( $subject )
 *                define the subject line of the email
 *                $subject: any valid mono-line string
 */

function Subject( $subject )
{
        $this->msubject = strtr( $subject, "\r\n" , "  " );
}


/*                From( $from )
 *                set the sender of the mail
 *                $from should be an email address
 */

function From( $from )
{

        if( ! is_string($from) ) {
                echo "Class Mail: error, From is not a string";
                exit;
        }
        $this->from= $from;
}


/*                To( $to )
 *         set the To ( recipient )
 *                $to : email address, accept both a single address or an array of addresses
 */

function To( $to )
{

        // TODO : test validité sur to
        if( is_array( $to ) )
                $this->sendto= $to;
        else
                $this->sendto[] = $to;

        if( $this->checkAddress == true )
                $this->CheckAdresses( $this->sendto );

}


/*                Cc()
 *                set the CC headers ( carbon copy )
 *                $cc : email address(es), accept both array and string
 */

function Cc( $cc )
{
        if( is_array($cc) )
                $this->acc= $cc;
        else
                $this->acc[]= $cc;

        if( $this->checkAddress == true )
                $this->CheckAdresses( $this->acc );

}



/*                Bcc()
 *                set the Bcc headers ( blank carbon copy ).
 *                $bcc : email address(es), accept both array and string
 */

function Bcc( $bcc )
{
        if( is_array($bcc) ) {
                $this->abcc = $bcc;
        } else {
                $this->abcc[]= $bcc;
        }

      
}


/*                Body()
 *                set the body of the mail ( message )
 */

function Body( $body )
{
        $this->body= $body;
}


/*                Send()
 *                fornat and send the mail
 */

function Send()
{
        // build the headers
        $this->_build_headers();

        // include attached files
        if( sizeof( $this->aattach > 0 ) ) {
                $this->_build_attachement();
                $body = $this->fullBody . $this->attachment;
        }

        // envoie du mail aux destinataires principal
        for( $i=0; $i< sizeof($this->sendto); $i++ ) {
                $res = mail($this->sendto[$i], $this->msubject,$body, $this->headers);
                // TODO : trmt res
        }

}


/*                Organization( $org )
 *                set the Organisation header
 */

function Organization( $org )
{
        if( trim( $org != "" )  )
                $this->organization= $org;
}


/*                Priority( $priority )
 *                set the mail priority
 *                $priority : integer taken between 1 (highest) and 5 ( lowest )
 *                ex: $m->Priority(1) ; => Highest
 */

function Priority( $priority )
{

        if( ! intval( $priority ) )
                return false;

        if( ! isset( $this->priorities[$priority-1]) )
                return false;

        $this->priority= $this->priorities[$priority-1];

        return true;

}


/*                Attach( $filename, $filetype )
 *                attach a file to the mail
 *                $filename : path of the file to attach
 *                $filetype : MIME-type of the file. default to 'application/x-unknown-content-type'
 *                $disposition : instruct the Mailclient to display the file if possible ("inline") or always as a link ("attachment")
 *                        possible values are "inline", "attachment"
 */

function Attach( $filename, $filetype='application/x-unknown-content-type', $disposition = "inline" )
{
        // TODO : si filetype="", alors chercher dans un tablo de MT connus / extension du fichier
        $this->aattach[] = $filename;
        $this->actype[] = $filetype;
        $this->adispo[] = $disposition;
}


/*                Get()
 *                return the whole e-mail , headers + message
 *                can be used for displaying the message in plain text or logging it
 */

function Get()
{
        $this->_build_headers();
        if( sizeof( $this->aattach > 0 ) ) {
                $this->_build_attachement();
                $this->body= $this->body . $this->attachment;
        }
        $mail = $this->headers;
        $mail .= "\n$this->body";
        return $mail;
}


/*         ValidEmail( $email )
 *         return true if email adress is ok - regex from Manuel Lemos ([email protected])
 *                $address : email address to check
 */

 function ValidEmail($address)
{
        if( preg_match( "/.*<(.+)>/", $address, $regs ) ) {
                $address = $regs[1];
        }
         if(preg_match( "/^[^@  ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|com|gov|mil|org|edu|int)\$/",$address) )
                 return true;
         else
                 return false;
}
 


/*                CheckAdresses()
 *         check validity of email addresses
 *         if unvalid, output an error message and exit, this may be customized
 *                $aad : array of emails addresses
 */

function CheckAdresses( $aad )
{
        for($i=0;$i< sizeof( $aad); $i++ ) {
                if( ! $this->ValidEmail( $aad[$i]) ) {
                        echo "Class Mail, method Mail : invalid address $aad[$i]";
                        exit;
                }
        }
}


/********************** PRIVATE METHODS BELOW **********************************/



/*                _build_headers()
 *                 [INTERNAL] build the mail headers
 */

function _build_headers()
{

        // creation du header mail

        $this->headers= "From: $this->from\n";

        $this->to= implode( ", ", $this->sendto );

        if( count($this->acc) > 0 ) {
                $this->cc= implode( ", ", $this->acc );
                $this->headers .= "CC: $this->cc\n";
        }

        if( count($this->abcc) > 0 ) {
                $this->bcc= implode( ", ", $this->abcc );
                $this->headers .= "BCC: $this->bcc\n";
        }

        if( $this->organization != ""  )
                $this->headers .= "Organization: $this->organization\n";

        if( $this->priority != "" )
                $this->headers .= "X-Priority: $this->priority\n";

}



/*
 *                _build_attachement()
 *                internal use only - check and encode attach file(s)
*/
function _build_attachement()
{
        $this->boundary= "------------" . md5( uniqid("myboundary") ); // TODO : variable bound

        $this->headers .= "MIME-Version: 1.0\nContent-Type: multipart/mixed;\n boundary=\"$this->boundary\"\n";
        $this->fullBody = "This is a multi-part message in MIME format.\n--$this->boundary\nContent-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bit\n\n" . $this->body ."\n";
        $sep= chr(13) . chr(10);

        $ata= array();
        $k=0;

        // for each attached file, do...
        for( $i=0; $i < sizeof( $this->aattach); $i++ ) {

                $filename = $this->aattach[$i];
                $basename = basename($filename);
                $ctype = $this->actype[$i];        // content-type
                $disposition = $this->adispo[$i];

                if( ! file_exists( $filename) ) {
                        echo "Class Mail, method attach : file $filename can't be found"; exit;
                }
                $subhdr= "--$this->boundary\nContent-type: $ctype;\n name=\"$basename\"\nContent-Transfer-Encoding: base64\nContent-Disposition: $disposition;\n  filename=\"$basename\"\n";
                $ata[$k++] = $subhdr;
                // non encoded line length
                $linesz= filesize( $filename)+1;
                $fp= fopen( $filename, 'r' );
                $data= base64_encode(fread( $fp, $linesz));
                fclose($fp);
                $ata[$k++] = chunk_split( $data );

/*
                // OLD version - used in php < 3.0.6 - replaced by chunk_split()
                $deb=0; $len=76; $data_len= strlen($data);
                do {
                        $ata[$k++]= substr($data,$deb,$len);
                        $deb += $len;
                } while($deb < $data_len );

*/
        }
        $this->attachment= implode($sep, $ata);
}


} // class Mail
?>
Ma page d'envoie.
<?php
session_start(); // Une fois par script
if(isset($_SESSION['mavar'])){
if($_SESSION["mavar"]=='non' || $_SESSION["mavar"]=='oui' ) {
if(isset($_SESSION['numero'])){
$numero = $_SESSION["numero"];
$dest="[email protected]";
include("../include/confige.php");
$select = "select * FROM membres2  "; 
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$email1 = ''; // on déclare la variable
while($row = mysql_fetch_assoc($result)) {
  if ($email2!='') // si la chaine n'est pas vide, on ajoute une virgule entre les adresses
    $email2.= ', ';
  $email2.= $row["email"]; // pour concaténer on utilise l'opérateur ".=" au lieu du "=".
}
$email1=$email2;

$reponse=StripSlashes("Ton mail a bien été envoyé à tous les membres");


include("class_mail.php");
$subject = $_POST['subject'];
$subject=StripSlashes($subject);
$msg=StripSlashes($msg);
$msg="Message depuis le  site parapente-portesdusoleil.ch:
$msg";
$m= new Mail; // create the mail
        $m->From( "$email" );
        $m->To( "$dest");     
        $m->Subject( "$subject" );
        $m->Body( $msg);        // set the body
//affiche le menu selon les membres

if ($email1!="") {
        $m->BCc($email1);
	}

        $m->Priority($priority) ;   
if ("$NomFichier_name"!="") {
	copy("$NomFichier","upload/$NomFichier_name");
	$m->Attach( "upload/$NomFichier_name", "application/octet-stream" );
	}

        $m->Send(); 
if ("$NomFichier_name"!="") {
Unlink("upload/$NomFichier_name");   }
$select = "select * FROM membres WHERE numero='$numero'"; 
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_array($result);
$admin=$row['admin'];
if ($admin =='comite' ){
include("../mise_en_page_haut_comite.php");
}
else  {
include("../mise_en_page_haut_membres.php");
}
?>
<table cellspacing="0" cellpadding="0" width="550" align="center" >
<tr><td background="../images/titrepage.jpg" align="center" height="40" >
<img src="../image/petitlogo.jpg" width="50" height="54" />&nbsp;&nbsp;<span class="titre">Accès Réservé aux Membres</span>&nbsp;&nbsp;<img src="../image/petitlogo.jpg" width="50" height="54" />
</td></tr>
</table>
<table  bordercolor="000000" bgcolor="#00000" border="0"  cellspacing="0" cellpadding="0" width="550" align="center" >
<tr><td align="center"><br><table width="480" border="1" cellspacing="2" cellpadding="0" bordercolor="#ccccCC">
  <tr><td  align="center" valign="middle" class="mm4" bgcolor="#9966FF">Confirmation</td></tr>
<tr bgcolor="#6699cc"><td align="center" width="500" class="mm4"  ><br>
<?php
echo "$reponse";
?>
<br /><br /><br /></td></tr>
</table>
<br>
</table><br>

<br><br><br>
<?php
include("../mise_en_page_bas_dossier.php");
}
}
else  {
header("location:../espacejoueur/autorisation.php");
}
}
?>
qui peu me dire ou je peux changer la valeur du fichier maximum.
Merci beaucoup.

Eléphant du PHP | 121 Messages

28 janv. 2010, 12:20

Hello,

je viens encore de tester ma fonction.

je peux envoyer des fichiers jusqu' a 99 ko ,mais si je dépasse j'ai le message d'erreur.

Comment je peux changer pour que je puisse envoyer des fichier de plus de 100 ko.

Merci pour votre aide

ViPHP
fab
ViPHP | 2657 Messages

28 janv. 2010, 12:21

Dans le fichier de configuration de php ( PHP.INI ), tu as une direction MAX_UPLOAD_SIZE ou quelque chose du genre :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

ViPHP
ViPHP | 5462 Messages

28 janv. 2010, 15:41

Dans le fichier de configuration de php ( PHP.INI ), tu as une direction MAX_UPLOAD_SIZE ou quelque chose du genre :)
ouai,
http://www.php.net/manual/fr/ini.core.p ... t-max-size
http://www.php.net/manual/fr/ini.core.p ... x-filesize

ViPHP
fab
ViPHP | 2657 Messages

28 janv. 2010, 15:49

faut le laisser chercher :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

ViPHP
ViPHP | 5462 Messages

28 janv. 2010, 15:50

faut le laisser chercher :)
mince... #-o

Eléphant du PHP | 121 Messages

28 janv. 2010, 18:18

Hello,

merci pour vos infos,

Ma fonction upload_max_filesize et configurée 48M , donc cela viens pas de celà .

Donc il y a un autre bug.

Merci d'avance a celui qui pourra m'aider.

Eléphant du PHP | 121 Messages

28 janv. 2010, 20:34

Youpppiiiiiii j'ai trouvé.

La taille était indiquée dans le formulaire d'envois et c'est pour celà que j'avais un problème.


Maintenant j'en ai un autre.

Lorsque je reçois un mail il m' écrit des caractères bizzard.

exemple :

il écrit :
voici en pihce jointe le PV de l'assemblie.

a la place

voici en pièce jointe le PV de l'assemblée.

Je suppose que c'est un problème d'encodage:
function _build_attachement()
{
        $this->boundary= "------------" . md5( uniqid("myboundary") ); // TODO : variable bound

        $this->headers .= "MIME-Version: 1.0\nContent-Type: multipart/mixed;\n boundary=\"$this->boundary\"\n";
        $this->fullBody = "This is a multi-part message in MIME format.\n--$this->boundary\nContent-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bits\n\n" . $this->body ."\n";
        $sep= chr(13) . chr(10);

        $ata= array();
        $k=0;

        // for each attached file, do...
        for( $i=0; $i < sizeof( $this->aattach); $i++ ) {

                $filename = $this->aattach[$i];
                $basename = basename($filename);
                $ctype = $this->actype[$i];        // content-type
                $disposition = $this->adispo[$i];

                if( ! file_exists($filename) ) {
                        echo "Class Mail, method attach : file $filename can't be found"; exit;
                }
                $subhdr= "--$this->boundary\nContent-type: $ctype;\n name=\"$basename\"\nContent-Transfer-Encoding: base64\nContent-Disposition: $disposition;\n  filename=\"$basename\"\n";
                $ata[$k++] = $subhdr;
                // non encoded line length
                $linesz= filesize( $filename)+1;
                $fp= fopen( $filename, 'r' );
                $data= base64_encode(fread( $fp, $linesz));
                fclose($fp);
                $ata[$k++] = chunk_split( $data );

/*
                // OLD version - used in php < 3.0.6 - replaced by chunk_split()
                $deb=0; $len=76; $data_len= strlen($data);
                do {
                        $ata[$k++]= substr($data,$deb,$len);
                        $deb += $len;
                } while($deb < $data_len );

*/
        }
        $this->attachment= implode($sep, $ata);
}
Je ne connais rien en encodage est ce que quelqu'un peu m'aiguiller.

Merci beaucoup

ViPHP
ViPHP | 5462 Messages

28 janv. 2010, 22:55

normale ta mis

charset=us-ascii

faut mettre :

charset=utf-8

ou

charset=iso-18859-1

ViPHP
fab
ViPHP | 2657 Messages

29 janv. 2010, 12:17

L'utf8 étant vraiment l'encodage qu'il est conseillé d'utiliser :D
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

ViPHP
AB
ViPHP | 5818 Messages

29 janv. 2010, 18:50

Je ne connais rien en encodage est ce que quelqu'un peu m'aiguiller.
Merci beaucoup
Quand tu en auras besoin y'a un tuto sur l'encodage utf-8 ici

Eléphant du PHP | 121 Messages

29 janv. 2010, 19:11

Hello,

Merci a vous tous pour votre aide.

J'ai réussi à mettre le bon format d'encodage et cela fonctionne super bien.

voilà mon code corrigé.
*/
function _build_attachement()
{
        $this->boundary= "------------" . md5( uniqid("myboundary") ); // TODO : variable bound

        $this->headers .= "MIME-Version: 1.0\nContent-Type: multipart/mixed;\n boundary=\"$this->boundary\"\n";
        $this->fullBody = "This is a multi-part message in MIME format.\n--$this->boundary\nContent-Type: text/plain; charset=iso-18859-1\nContent-Transfer-Encoding: 7bits\n\n" . $this->body ."\n";
        $sep= chr(13) . chr(10);

        $ata= array();
        $k=0;

        // for each attached file, do...
        for( $i=0; $i < sizeof( $this->aattach); $i++ ) {

                $filename = $this->aattach[$i];
                $basename = basename($filename);
                $ctype = $this->actype[$i];        // content-type
                $disposition = $this->adispo[$i];

                if( ! file_exists($filename) ) {
                        echo "Class Mail, method attach : file $filename can't be found"; exit;
                }
                $subhdr= "--$this->boundary\nContent-type: $ctype;\n name=\"$basename\"\nContent-Transfer-Encoding: base64\nContent-Disposition: $disposition;\n  filename=\"$basename\"\n";
                $ata[$k++] = $subhdr;
                // non encoded line length
                $linesz= filesize( $filename)+1;
                $fp= fopen( $filename, 'r' );
                $data= base64_encode(fread( $fp, $linesz));
                fclose($fp);
                $ata[$k++] = chunk_split( $data );

/*
                // OLD version - used in php < 3.0.6 - replaced by chunk_split()
                $deb=0; $len=76; $data_len= strlen($data);
                do {
                        $ata[$k++]= substr($data,$deb,$len);
                        $deb += $len;
                } while($deb < $data_len );

*/
        }
        $this->attachment= implode($sep, $ata);
}


} // class Mail
Merci encore