Bonjour à tous,
Voila mon soucis :
J'ai un script PHP qui copie des pièces jointes dans un dossier. Le script fonctionne très bien lorsqu'il est lancé dans un navigateur, par contre lorsqu'il est lancé à partir d'une tâche planifiée Windows, il s'exécute bien mais ne fait pas la copie de fichiers....
Autre soucis, comment récupérer dans le mail envoyé, tous les noms des pièces jointes copiées. (problème au niveau du $msg ligne 169)
Ci-dessous mon code en espérant que vous puissiez m'aider.
Merci d'avance à vous tous.
<?php
function getFileExtension($fileName){
$parts=explode(".",$fileName);
return $parts[count($parts)-1];
}
// Connexion sur le boîte mail
$server = '{192.168.75.4:143/novalidate-cert}_Test';
$username = 'user';
$password = 'motdepasse';
$imap = imap_open($server, $username, $password) or die("imap connection error");
$message_count = imap_num_msg($imap);
for ($m = 1; $m <= $message_count; ++$m){
$header = imap_header($imap, $m);
$email[$m]['from'] = $header->from[0]->mailbox.'@'.$header->from[0]->host;
$email[$m]['fromaddress'] = $header->from[0]->personal;
$email[$m]['to'] = $header->to[0]->mailbox;
$email[$m]['subject'] = $header->subject;
$email[$m]['message_id'] = $header->message_id;
$email[$m]['date'] = $header->udate;
$from = $email[$m]['fromaddress'];
$from_email = $email[$m]['from'];
$to = $email[$m]['to'];
$subject = $email[$m]['subject'];
echo $from_email . '</br>';
echo $to . '</br>';
echo $subject . '</br>';
$structure = imap_fetchstructure($imap, $m);
$attachments = array();
if(isset($structure->parts) && count($structure->parts)) {
for($i = 0; $i < count($structure->parts); $i++) {
$attachments[$i] = array(
'is_attachment' => false,
'filename' => '',
'name' => '',
'attachment' => ''
);
if($structure->parts[$i]->ifdparameters) {
foreach($structure->parts[$i]->dparameters as $object) {
if(strtolower($object->attribute) == 'filename') {
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['filename'] = $object->value;
}
}
}
if($structure->parts[$i]->ifparameters) {
foreach($structure->parts[$i]->parameters as $object) {
if(strtolower($object->attribute) == 'name') {
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['name'] = $object->value;
}
}
}
if($attachments[$i]['is_attachment']) {
$attachments[$i]['attachment'] = imap_fetchbody($imap, $m, $i+1);
if($structure->parts[$i]->encoding == 3) { // 3 = BASE64
$attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
}
elseif($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
$attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
}
}
}
}
if(count($attachments)!=0){
foreach ($attachments as $key){
if($key['is_attachment']==1){
file_put_contents($key['filename'], $key['attachment']);
}
}
}
}
// Copy des pièces jointes dans le dossier ou est lancé le script
function recurse_copy($src,$dst) {
$dir = opendir($src);
@mkdir($dst);
while(false !== ( $file = readdir($dir)) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src . '/' . $file) ) {
recurse_copy($src . '/' . $file,$dst . '/' . $file);
}
else {
copy($src . '/' . $file,$dst . '/' . $file);
}
}
}
closedir($dir);
}
// Copie des fichiers vers mon pc
// Repertoire source
$src = "C:/Program Files (x86)/OCS Inventory NG/xampp/htdocs/Script_Fourn2/";
// Repertoire de destination
$dst = "//MonPC/Partage/_AZ";
recurse_copy($src,$dst);
// Suppression du fichier php
unlink("//MonPC/Partage/_AZ/Move_Attachments_Test2.php");
// Test du répertoire //MonPC/Partage/_AZ/ si vide ou non
$OK=99;
$dir = ("//Didier-d/Partage/_AZ");
if (is_dir($dir))
{
if ($Pointeur = opendir($dir))
{
while (($file = readdir($Pointeur)) !== false)
{
if ($file!="." && $file!=".." ) $OK=0;
if ($file=="." || $file==".." ) $OK=1;
}
closedir($Pointeur);
}
}
// if( $OK==0) echo ("Le répertoire n'est pas vide");
// if( $OK==99) echo ("Le répertoire n'existe pas");
// if( $OK==1) echo ("Le répertoire existe et est vide");
if ( $OK==1)
{
echo ("...Le répertoire $dir existe et est vide...");
}
else
{
$to = '[email protected], [email protected]';
$subject = 'Copie des pièces jointes fournisseurs';
$msg = 'Nom de la pièce jointe déplacée : ' . $key['filename'] .'';
$headers = "From: Didier Dalcantara <[email protected]>\r\n";
mail($to, $subject,$msg, $headers);
}
// Copie des fichiers du repertoire _AZ vers _AZ2
$src2 = "//MonPC/Partage/_AZ";
$dst2 = "//MonPC/Partage/_AZ2";
recurse_copy($src2,$dst2);
// Suppression des fichiers contenu dans le répertoire _AZ
$dir2 = "//MonPC/Partage/_AZ";
function unlinkRecursive($dir2, $deleteRootToo)
{
if(!$dh = @opendir($dir2))
{
return;
}
while (false !== ($obj = readdir($dh)))
{
if($obj == '.' || $obj == '..')
{
continue;
}
if (!@unlink($dir2 . '/' . $obj))
{
unlinkRecursive($dir2.'/'.$obj, true);
}
}
closedir($dh);
if ($deleteRootToo)
{
@rmdir($dir2);
}
return;
}
unlinkRecursive($dir2, false);
// Suppression des fichiers dans le répertoire d'origine sauf les PHP
foreach (glob("*.pdf") as $filename)
{
@unlink($filename);
}
foreach (glob("*.xlsx") as $filename)
{
@unlink($filename);
}
foreach (glob("*.doc") as $filename)
{
@unlink($filename);
}
foreach (glob("*.xls") as $filename)
{
@unlink($filename);
}
foreach (glob("*.csv") as $filename)
{
@unlink($filename);
}
foreach (glob("*.docx") as $filename)
{
@unlink($filename);
}
foreach (glob("*.txt") as $filename)
{
@unlink($filename);
}
// Déplacement des mails de INBOX vers Olds_Msgs
$nbmess = imap_num_msg($imap);
for($j=1;$j<=$nbmess;$j++)
{
imap_mail_move($imap,$message_count,'_test2');
}
imap_expunge($imap);
imap_close($imap);
?>
Bonjour à tous,
Voila mon soucis :
J'ai un script PHP qui copie des pièces jointes dans un dossier. Le script fonctionne très bien lorsqu'il est lancé dans un navigateur, par contre lorsqu'il est lancé à partir d'une tâche planifiée Windows, il s'exécute bien mais ne fait pas la copie de fichiers....
Autre soucis, comment récupérer dans le mail envoyé, tous les noms des pièces jointes copiées. (problème au niveau du $msg ligne 169)
Ci-dessous mon code en espérant que vous puissiez m'aider.
Merci d'avance à vous tous.
[php]
<?php
function getFileExtension($fileName){
$parts=explode(".",$fileName);
return $parts[count($parts)-1];
}
// Connexion sur le boîte mail
$server = '{192.168.75.4:143/novalidate-cert}_Test';
$username = 'user';
$password = 'motdepasse';
$imap = imap_open($server, $username, $password) or die("imap connection error");
$message_count = imap_num_msg($imap);
for ($m = 1; $m <= $message_count; ++$m){
$header = imap_header($imap, $m);
$email[$m]['from'] = $header->from[0]->mailbox.'@'.$header->from[0]->host;
$email[$m]['fromaddress'] = $header->from[0]->personal;
$email[$m]['to'] = $header->to[0]->mailbox;
$email[$m]['subject'] = $header->subject;
$email[$m]['message_id'] = $header->message_id;
$email[$m]['date'] = $header->udate;
$from = $email[$m]['fromaddress'];
$from_email = $email[$m]['from'];
$to = $email[$m]['to'];
$subject = $email[$m]['subject'];
echo $from_email . '</br>';
echo $to . '</br>';
echo $subject . '</br>';
$structure = imap_fetchstructure($imap, $m);
$attachments = array();
if(isset($structure->parts) && count($structure->parts)) {
for($i = 0; $i < count($structure->parts); $i++) {
$attachments[$i] = array(
'is_attachment' => false,
'filename' => '',
'name' => '',
'attachment' => ''
);
if($structure->parts[$i]->ifdparameters) {
foreach($structure->parts[$i]->dparameters as $object) {
if(strtolower($object->attribute) == 'filename') {
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['filename'] = $object->value;
}
}
}
if($structure->parts[$i]->ifparameters) {
foreach($structure->parts[$i]->parameters as $object) {
if(strtolower($object->attribute) == 'name') {
$attachments[$i]['is_attachment'] = true;
$attachments[$i]['name'] = $object->value;
}
}
}
if($attachments[$i]['is_attachment']) {
$attachments[$i]['attachment'] = imap_fetchbody($imap, $m, $i+1);
if($structure->parts[$i]->encoding == 3) { // 3 = BASE64
$attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
}
elseif($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
$attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
}
}
}
}
if(count($attachments)!=0){
foreach ($attachments as $key){
if($key['is_attachment']==1){
file_put_contents($key['filename'], $key['attachment']);
}
}
}
}
// Copy des pièces jointes dans le dossier ou est lancé le script
function recurse_copy($src,$dst) {
$dir = opendir($src);
@mkdir($dst);
while(false !== ( $file = readdir($dir)) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src . '/' . $file) ) {
recurse_copy($src . '/' . $file,$dst . '/' . $file);
}
else {
copy($src . '/' . $file,$dst . '/' . $file);
}
}
}
closedir($dir);
}
// Copie des fichiers vers mon pc
// Repertoire source
$src = "C:/Program Files (x86)/OCS Inventory NG/xampp/htdocs/Script_Fourn2/";
// Repertoire de destination
$dst = "//MonPC/Partage/_AZ";
recurse_copy($src,$dst);
// Suppression du fichier php
unlink("//MonPC/Partage/_AZ/Move_Attachments_Test2.php");
// Test du répertoire //MonPC/Partage/_AZ/ si vide ou non
$OK=99;
$dir = ("//Didier-d/Partage/_AZ");
if (is_dir($dir))
{
if ($Pointeur = opendir($dir))
{
while (($file = readdir($Pointeur)) !== false)
{
if ($file!="." && $file!=".." ) $OK=0;
if ($file=="." || $file==".." ) $OK=1;
}
closedir($Pointeur);
}
}
// if( $OK==0) echo ("Le répertoire n'est pas vide");
// if( $OK==99) echo ("Le répertoire n'existe pas");
// if( $OK==1) echo ("Le répertoire existe et est vide");
if ( $OK==1)
{
echo ("...Le répertoire $dir existe et est vide...");
}
else
{
$to = '
[email protected],
[email protected]';
$subject = 'Copie des pièces jointes fournisseurs';
$msg = 'Nom de la pièce jointe déplacée : ' . $key['filename'] .'';
$headers = "From: Didier Dalcantara <
[email protected]>\r\n";
mail($to, $subject,$msg, $headers);
}
// Copie des fichiers du repertoire _AZ vers _AZ2
$src2 = "//MonPC/Partage/_AZ";
$dst2 = "//MonPC/Partage/_AZ2";
recurse_copy($src2,$dst2);
// Suppression des fichiers contenu dans le répertoire _AZ
$dir2 = "//MonPC/Partage/_AZ";
function unlinkRecursive($dir2, $deleteRootToo)
{
if(!$dh = @opendir($dir2))
{
return;
}
while (false !== ($obj = readdir($dh)))
{
if($obj == '.' || $obj == '..')
{
continue;
}
if (!@unlink($dir2 . '/' . $obj))
{
unlinkRecursive($dir2.'/'.$obj, true);
}
}
closedir($dh);
if ($deleteRootToo)
{
@rmdir($dir2);
}
return;
}
unlinkRecursive($dir2, false);
// Suppression des fichiers dans le répertoire d'origine sauf les PHP
foreach (glob("*.pdf") as $filename)
{
@unlink($filename);
}
foreach (glob("*.xlsx") as $filename)
{
@unlink($filename);
}
foreach (glob("*.doc") as $filename)
{
@unlink($filename);
}
foreach (glob("*.xls") as $filename)
{
@unlink($filename);
}
foreach (glob("*.csv") as $filename)
{
@unlink($filename);
}
foreach (glob("*.docx") as $filename)
{
@unlink($filename);
}
foreach (glob("*.txt") as $filename)
{
@unlink($filename);
}
// Déplacement des mails de INBOX vers Olds_Msgs
$nbmess = imap_num_msg($imap);
for($j=1;$j<=$nbmess;$j++)
{
imap_mail_move($imap,$message_count,'_test2');
}
imap_expunge($imap);
imap_close($imap);
?>[/php]