[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Переименовать файлы при загрузке на сервер
SweetJulia
Коллеги!

Есть хороший скрипт - парсит почту, записывает ее в MySQL, вложения сохраняет на сервере.
phpclasses.org/package/3324-PHP-Retrieve-e-mail-messages-into-a-MySQL-database.html

Но у меня проблема - никак не могу исправить код.

Но он сохраняет файлы так: IDfilemane (напр.: 25myimage.jpg)

А мне нужно: filemame_ID (напр.: myimage_25.jpg)
или
filemame_ID_date_time (напр.: myimage_25_2015-01-25-12-00.jpg)

Пожалуйста, помогите!!!
--------

Вот скрипт:

<?
/** EMAIL TO DB Author:Ernest Wojciuk */
class EMAIL_TO_DB {

var $IMAP_host; #pop3 server
var $IMAP_port; #pop3 server port
var $IMAP_login;
var $IMAP_pass;
var $link;
var $error = array();
var $status;
var $max_headers = 10; #How much headers to retrive 'max'=all headers
var $filestore;
var $file_path = '/var/www/files/email/'; #Where to write file attachments
var $partsarray = array();
var $msgid =1;
var $newid;
var $logid;
var $this_file_name = 'example_1.php'; #If mode "html"
var $mode = 'html'; #If script run from cron = "cron" or "html"
var $spam_folder = 1; #Folder where moving spam (ID from DB)
var $file = array(); #File in multimart message
function connect($host, $port, $login, $pass){
$this->IMAP_host = $host;
$this->IMAP_login = $login;
$this->link = imap_open("{". $host . $port."}INBOX", $login, $pass);
if($this->link) {
$this->status = 'Connected';
} else {
$this->error[] = imap_last_error();
$this->status = 'Not connected';
}
}

function set_path(){
$path = $this->file_path;
return $path;
}
function set_filestore(){
$dir = $this->dir_name();
$path = $this->set_path();
$this->filestore = $path.$dir;
}
/** Get mailbox info*/
function mailboxmsginfo(){
//$mailbox = imap_mailboxmsginfo($this->link); #It's wery slow
$mailbox = imap_check($this->link);
if ($mailbox) {
$mbox["Date"] = $mailbox->Date;
$mbox["Driver"] = $mailbox->Driver;
$mbox["Mailbox"] = $mailbox->Mailbox;
$mbox["Messages"]= $this->num_message();
$mbox["Recent"] = $this->num_recent();
$mbox["Unread"] = $mailbox->Unread;
$mbox["Deleted"] = $mailbox->Deleted;
$mbox["Size"] = $mailbox->Size;
} else {
$this->error[] = imap_last_error();
}
return $mbox;
}
/** Number of Total Emails */
function num_message(){
return imap_num_msg($this->link);
}
/** Number of Recent Emails */
function num_recent(){
return imap_num_recent($this->link);
}
/** Type and subtype message */
function msg_type_subtype($_type){
if($_type > 0){
switch($_type){
case '0': $type = "text"; break;
case '1': $type = "multipart"; break;
case '2': $type = "message"; break;
case '3': $type = "application"; break;
case '4': $type = "audio"; break;
case '5': $type = "image"; break;
case '6': $type = "video"; break;
case '7': $type = "other"; break;
}
}

return $type;
}
/** Flag message */
function email_flag(){
switch ($char) {
case 'S':
if (strtolower($flag) == '\\seen') {
$msg->is_seen = true;
}
break;
case 'A':
if (strtolower($flag) == '\\answered') {
$msg->is_answered = true;
}
break;
case 'D':
if (strtolower($flag) == '\\deleted') {
$msg->is_deleted = true;
}
break;
case 'F':
if (strtolower($flag) == '\\flagged') {
$msg->is_flagged = true;
}
break;
case 'M':
if (strtolower($flag) == '$mdnsent') {
$msg->is_mdnsent = true;
}
break;
default:
break;
}
}

/** Parse e-mail structure */
function parsepart($p,$msgid,$i){
$part=imap_fetchbody($this->link,$msgid,$i);
#Multipart
if ($p->type!=0){
#if base64
if ($p->encoding==3)$part=base64_decode($part);
#if quoted printable
if ($p->encoding==4)$part=quoted_printable_decode($part);
#If binary or 8bit -we no need to decode
#body type (to do)

switch($p->type) {
case '5': # image
$this->partsarray[$i][image] = array('filename'=>imag1,'string'=>$part, 'part_no'=>$i);
break;
}
#Get attachment
$filename='';
if (count($p->dparameters)>0){
foreach ($p->dparameters as $dparam){
if ((strtoupper($dparam->attribute)=='NAME') ||(strtoupper($dparam->attribute)=='FILENAME')) $filename=$dparam->value;
}
}

#If no filename
if ($filename==''){
if (count($p->parameters)>0){
foreach ($p->parameters as $param){
if ((strtoupper($param->attribute)=='NAME') ||(strtoupper($param->attribute)=='FILENAME')) $filename=$param->value;
}
}
}

if ($filename!='' ){
$this->partsarray[$i][attachment] = array('filename'=>$filename,'string'=>$part, 'encoding'=>$p->encoding, 'part_no'=>$i,'type'=>$p->type,'subtype'=>$p->subtype);
}
#end if type!=0
}
#Text email
else if($p->type==0){
#decode text
#if QUOTED-PRINTABLE

if ($p->encoding==4) $part=quoted_printable_decode($part);
#if base_64
if ($p->encoding==3) $part=base64_decode($part);
#if plain text
if (strtoupper($p->subtype)=='PLAIN')1;
#if HTML
else if (strtoupper($p->subtype)=='HTML')1;
$this->partsarray[$i][text] = array('type'=>$p->subtype,'string'=>$part);
}
#if subparts
if (count($p->parts)>0){
foreach ($p->parts as $pno=>$parr){
$this->parsepart($parr,$this->msgid,($i.'.'.($pno+1)));
}
}

return;
}
/** All email headers */
function email_headers(){
#$headers=imap_headers($this->link);
if($this->max_headers == 'max'){
$headers = imap_fetch_overview($this->link, "1:".$this->num_message(), 0);
} else {
$headers = imap_fetch_overview($this->link, "1:$this->max_headers", 0);
}
if($this->max_headers == 'max') {
$num_headers = count($headers);
} else {
$count = count($headers);
if($this->max_headers >= $count){
$num_headers = $count;
} else {
$num_headers = $this->max_headers;
}
}

$size=sizeof($headers);
for($i=1; $i<=$size; $i++){
$val=$headers[$i];
//while (list($key, $val) = each($headers)){
$subject_s = (empty($val->subject)) ? '[No subject]' : $val->subject;
$lp = $lp +1;
imap_setflag_full($this->link,imap_uid($this->link,$i),'\\SEEN',SE_UID);
$header=imap_headerinfo($this->link, $i, 80,80);
if($val->seen == "0" && $val->recent == "0") {echo '<b>'.$val->msgno . '-' . $subject_s . '-' . $val->from .'-'. $val->date."</b><br><hr>" ;}
else {echo $val->msgno . '-' . $subject_s . '-' . $val->from .'-'. $val->date."<br><hr>" ;}
}
}

/** Get email */
function email_get(){
$email = array();
$this->set_filestore();
$header=imap_headerinfo($this->link, $this->msgid, 80,80);
$from = $header->from;
$udate= $header->udate;
$to = $header->to;
$size = $header->Size;
if ($header->Unseen == "U" || $header->Recent == "N") {
#Check is it multipart messsage
$s = imap_fetchstructure($this->link,$this->msgid);
if (count($s->parts)>0){
foreach ($s->parts as $partno=>$partarr){
#parse parts of email
$this->parsepart($partarr,$this->msgid,$partno+1);
}
}
else { #for not multipart messages
#get body of message

$text=imap_body($this->link,$this->msgid);
#decode if quoted-printable
if ($s->encoding==4) $text=quoted_printable_decode($text);
if (strtoupper($s->subtype)=='PLAIN') $text=$text;
if (strtoupper($s->subtype)=='HTML') $text=$text;
$this->partsarray['not multipart'][text]=array('type'=>$s->subtype,'string'=>$text);
}
if(is_array($from)){
foreach ($from as $id => $object) {
$fromname = $object->personal;
$fromaddress = $object->mailbox . "@" . $object->host;
}
}

if(is_array($to)){
foreach ($from as $id => $object) {
$toaddress = $object->mailbox . "@" . $object->host;
}
}

$email['CHARSET'] = $charset;
$email['SUBJECT'] = $this->mimie_text_decode($header->Subject);
$email['FROM_NAME'] = $this->mimie_text_decode($fromname);
$email['FROM_EMAIL'] = $fromaddress;
$email['TO_EMAIL'] = $toaddress;
$email['DATE'] = date("Y-m-d H:i:s",strtotime($header->date));
$email['SIZE'] = $size;
#SECTION - FLAGS
$email['FLAG_RECENT'] = $header->Recent;
$email['FLAG_UNSEEN'] = $header->Unseen;
$email['FLAG_ANSWERED']= $header->Answered;
$email['FLAG_DELETED'] = $header->Deleted;
$email['FLAG_DRAFT'] = $header->Draft;
$email['FLAG_FLAGGED'] = $header->Flagged;
}
return $email;
}
function mimie_text_decode($string){
$string = htmlspecialchars(chop($string));
$elements = imap_mime_header_decode($string);
if(is_array($elements)){
for ($i=0; $i<count($elements); $i++) {
$charset = $elements[$i]->charset;
$txt .= $elements[$i]->text;
}
}
else {
$txt = $string;
}
if($txt == ''){
$txt = 'No_name';
}
if($charset == 'us-ascii'){
//$txt = $this->charset_decode_us_ascii ($txt);
}
return $txt;
}
/** Save messages on local disc */
function save_files($filename, $part){
$fp=fopen($this->filestore.$filename,"w+");
fwrite($fp,$part);
fclose($fp);
chown($this->filestore.$filename, 'apache');
}
/** Set flags */
function email_setflag(){
imap_setflag_full($this->link, "2,5","\\Seen \\Flagged");
}
/** Mark a message for deletion */
function email_delete(){
imap_delete($this->link, $this->msgid);
}
/** Delete marked messages */
function email_expunge(){
imap_expunge($this->link);
}
/** Close IMAP connection */
function close(){
imap_close($this->link);
}
function listmailbox(){
$list = imap_list($this->link, "{".$this->IMAP_host."}", "*");
if (is_array($list)) {
return $list;
} else {
$this->error = "imap_list failed: " . imap_last_error() . "\n";
}
return array();
}
/*** SPAM DETECTION
******************************/

function spam_detect(){
$email = array();
$id = $this->newid; #ID email in DB
$execute = mysql_query("SELECT ID, IDEmail, EmailFrom, EmailFromP, EmailTo, Subject, Message, Message_html FROM emailtodb_email WHERE ID='".$id."'");
$row = mysql_fetch_array($execute);
$ID = $row['ID'];
$email['Email'] = $row['EmailFrom'];
$email['Subject'] = $row['Subject'];
$email['Text'] = $row['Message'];
$email['Text_HTML'] = $row['Message_html'];
if($this->check_blacklist($email['Email'])){
$this->update_folder($id, $this->spam_folder);
}
if($this->check_words($email['Subject'])){
$this->update_folder($id, $this->spam_folder);
}
if($this->check_words($email['Text'])){
$this->update_folder($id, $this->spam_folder);
}
if($this->check_words($email['Text_HTML'])){
$this->update_folder($id, $this->spam_folder);
}
}

function check_blacklist($email){
#spam - emails
$execute = mysql_query("SELECT Email FROM emailtodb_list WHERE Email='".addslashes($email)."' AND Type='B'");
$row = mysql_fetch_array($execute);
$e_mail = $row['Email'];
if($e_mail == $email){
return 1;
} else {
return 0;
}
}

function check_words($string){
#spam - words
$string = strtolower($string);
$execute = mysql_query("SELECT Word FROM emailtodb_words ");
while($row = mysql_fetch_array($execute)){
$word = strtolower($row['Word']);
if (eregi($word, $string)) {
return 1;
}
}
}

/*** DB FUNCTIONS
*****************************/
/** Add email to DB */

function db_add_message($email){
$execute = mysql_query("INSERT INTO emailtodb_email (IDEmail, EmailFrom, EmailFromP, EmailTo, DateE, DateDb, Subject, MsgSize) VALUES
('"
.$message_id."',
'"
.$email['FROM_EMAIL']."',
'"
.addslashes(strip_tags($email['FROM_NAME']))."',
'"
.addslashes(strip_tags($email['TO_EMAIL']))."',
'"
.$email['DATE']."',
'"
.date("Y-m-d H:i:s")."',
'"
.addslashes($email['SUBJECT'])."',
'"
.$email["SIZE"]."')");
$execute = mysql_query("select LAST_INSERT_ID() as UID");
$row = mysql_fetch_array($execute);
$this->newid = $row["UID"];
}
/** Add attachments to DB */
function db_add_attach($file_orig, $filename){
$execute = mysql_query("INSERT INTO emailtodb_attach (IDEmail, FileNameOrg, Filename) VALUES
('"
.$this->newid."',
'"
.addslashes($file_orig)."',
'"
.addslashes($filename)."')");
}
/** Add email to DB */
function db_update_message($msg, $type= 'PLAIN'){
if($type == 'PLAIN') $execute = mysql_query("UPDATE emailtodb_email SET Message='".addslashes($msg)."' WHERE ID= '".$this->newid."'");
if($type == 'HTML') $execute = mysql_query("UPDATE emailtodb_email SET Message_html='".addslashes($msg)."' WHERE ID= '".$this->newid."'");
}
/** Insert progress log */
function add_db_log($email, $info){
$execute = mysql_query("INSERT INTO emailtodb_log (IDemail, Email, Info, FSize, Date_start, Status) VALUES
('"
.$this->newid."',
'"
.$email['FROM_EMAIL']."',
'"
.addslashes(strip_tags($info))."',
'"
.$email["SIZE"]."',
'"
.date("Y-m-d H:i:s")."',
'2')"
);
$execute = mysql_query("select LAST_INSERT_ID() as UID");
$row = mysql_fetch_array($execute);
$this->logid = $row['UID'];
return $this->logid;
}
/** Set folder */
function update_folder($id, $folder){
$execute = mysql_query("UPDATE emailtodb_email SET Type = '".addslashes($folder)."' WHERE ID = '".$id."'");
}
/** Update progress log */
function update_db_log($info, $id){
$execute = mysql_query("UPDATE emailtodb_log SET Status = '1', Info='".addslashes(strip_tags($info))."', Date_finish = '".date("Y-m-d H:i:s")."' WHERE IDlog = '".$id."'");
}
/** Read log from DB */
function db_read_log(){
$email = array();
$execute = mysql_query("SELECT IDlog, IDemail, Email, Info, FSize, Date_start, Date_finish, Status FROM emailtodb_log ORDER BY Date_finish DESC LIMIT 100");
while($row = mysql_fetch_array($execute)){
$ID = $row['IDlog'];
$email[$ID]['IDemail'] = $row['IDemail'];
$email[$ID]['Email'] = $row['Email'];
$email[$ID]['Info'] = $row['Info'];
$email[$ID]['Size'] = $row['FSize'];
$email[$ID]['Date_start'] = $row['Date_start'];
$email[$ID]['Date_finish'] = $row['Date_finish'];
}
return $email;
}
/** Read emails from DB */
function db_read_emails(){
if (!isset($db)) $db = new DB_WL;
$email = array();
$execute = mysql_query("SELECT ID, IDEmail, EmailFrom, EmailFromP, EmailTo, DateE, DateDb, Subject, Message, Message_html, MsgSize FROM emailtodb_email ORDER BY ID DESC LIMIT 25");
while($row = mysql_fetch_array($execute)){
$ID = $row['ID'];
$email[$ID]['Email'] = $row['EmailFrom'];
$email[$ID]['EmailName'] = $row['EmailFrom'];
$email[$ID]['Subject'] = $row['Subject'];
$email[$ID]['Date'] = $row['DateE'];
$email[$ID]['Size'] = $row['MsgSize'];
}
return $email;
}
function dir_name() {
$year = date('Y');
$month = date('m');
$dir_n = $year . "_" . $month;
echo $this->set_path();
if (is_dir($this->set_path() . $dir_n)) {
return $dir_n . '/';
} else {
mkdir($this->set_path() . $dir_n, 0777);
return $dir_n . '/';
}
}

function do_action(){
if($this->num_message() >= 1) {
if($this->msgid <= 0) {
$this->msgid = 1;
} else {
$this->msgid = $_GET[msgid] + 1;
}
#Get first message
$email = $this->email_get();
#Get store dir
$dir = $this->dir_name();
#Insert message to db
$ismsgdb = $this->db_add_message($email);
$id_log = $this->add_db_log($email, 'Copy e-mail - start ');
foreach($this->partsarray as $part){
if($part[text][type] == 'HTML'){
#$message_HTML = $part[text][string];
$this->db_update_message($part[text][string], $type= 'HTML');
}elseif($part[text][type] == 'PLAIN'){
$message_PLAIN = $part[text][string];
$this->db_update_message($part[text][string], $type= 'PLAIN');
}elseif($part[attachment]){
#Save files(attachments) on local disc

// $message_ATTACH[] = $part[attachment];

foreach(array($part[attachment]) as $attach){
$attach[filename] = $this->mimie_text_decode($attach[filename]);
$attach[filename] = preg_replace('/[^a-z0-9_\-\.]/i', '_', $attach[filename]);
$this->add_db_log($email, 'Start coping file:"'.strip_tags($attach[filename]).'"');
$this->save_files($this->newid.$attach[filename], $attach[string]);
$filename = $dir.$this->newid.$attach[filename];
$this->db_add_attach($attach[filename], $filename);
$this->update_db_log('<b>'.$filename.'</b>Finish coping: "'.strip_tags($attach[filename]).'"', $this->logid);
}
//

}elseif($part[image]){
#Save files(attachments) on local disc
$message_IMAGE[] = $part[image];
foreach($message_IMAGE as $image){
$image[filename] = $this->mimie_text_decode($image[filename]);
$image[filename] = preg_replace('/[^a-z0-9_\-\.]/i', '_', $image[filename]);
$this->add_db_log($email, 'Start coping file: "'.strip_tags($image[filename]).'"');
$this->save_files($this->newid.$image[filename], $image[string]);
$filename = $dir.$this->newid.$image[filename];
$this->db_add_attach($image[filename], $filename);
$this->update_db_log('<b>'.$filename.'</b>Finish coping:"'.strip_tags($image[filename]).'"', $this->logid);
}
}
}

$this->spam_detect();
$this->email_setflag();
$this->email_delete();
$this->email_expunge();
$this->update_db_log('Finish coping', $id_log);
if($email <> ''){
unset($this->partsarray);
# echo "<meta http-equiv=\"refresh\" content=\"2; url=email.monitor.mail.php?msgid=".$this->msgid."\">";
if($this->mode == 'html') {
echo "<meta http-equiv=\"refresh\" content=\"2; url=".$this->this_file_name."?msgid=0\">";
echo "E-mail extract";
}
}
}
else {
# No messages
if($this->mode == 'html') {
echo "<meta http-equiv=\"refresh\" content=\"10; url=".$this->this_file_name."?msgid=0\">";
echo "E-mail extract";
}
}
}
}
#end class
?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.