|
|
|
| Здравствуйте. Большая просьба помочь. Как искуственно создать файл-вложение с именем import.txt (без формы) и впихнуть в него часть информации из текста письма, например id товара и количество, разделенных точкой с запятой
если через форму выбирать файл с локального диска, то все получается, а если указывать путь к файлу на сервере
файл не прицепляется, что делаю не так?
case "email":
//stricter email validation - udated to allow + in local name part
if (strlen($value)>0 && !preg_match(
'/^(?:[a-z0-9+_-]+?\.)*?[a-z0-9_+-]+?@(?:[a-z0-9_-]+?\.)*?[a-z0-9_-]+?\.[a-z0-9]{2,5}$/i', $value) ){
$vMsg[count($vMsg)] = isset($formats[$name][4]) ? $formats[$name][4] : $desc . $_lang["ef_invalid_email"];
$rClass[$name]=$invalidClass;
}
$name=$rb_base_url."cache/import.txt";
if ($_FILES[$name]['error']==1 || $_FILES[$name]['error']==2){
$vMsg[count($vMsg)]=$desc . $_lang['ef_upload_exceeded'];
$rClass[$name]=$invalidClass;
}elseif ($isRequired==1 && ($_FILES[$name] && $_FILES[$name]['type']=='')){
$rMsg[count($rMsg)]=$desc;
$rClass[$name]=$requiredClass;
}elseif ($_FILES[$name]['tmp_name']){
if( substr($fld[5],0,5)!="#LIST" || validateField($_FILES[$name]['name'],$fld,$vMsg,$isDebug) )
$attachments[count($attachments)] = $_FILES[$name]['tmp_name'];
else $rClass[$name]=$invalidClass;
}
break;
|
| |
|
|
|
|
|
|
|
для: vladimir_sko
(07.02.2010 в 11:11)
| | Если Вы подставляете файл Import.txt НЕ через форму причем здесь массив $_FILES ? | |
|
|
|
|
|
|
|
для: t3ma
(07.02.2010 в 11:59)
| | согласен, просто не знаю, что делать, не разу не сталкивался. есть файл на сервере , есть путь к нему
что надо записать в переменную $attachments ?
$attachments="path/import.txt";
# send user a copy of the report
if($ccsender && $fields['email']) {
$mail = new PHPMailer();
$mail->IsMail();
$mail->CharSet = $modx->config['modx_charset'];
$mail->IsHTML($isHtml);
$mail->From = $from;
$mail->FromName = $fromname;
$mail->Subject = $subject;
$mail->Body = $report;
AddAddressToMailer($mail,"to",$fields['email']);
AttachFilesToMailer($mail,$attachments);
if(!$mail->send()) return 'CCSender: ' . $_lang['ef_mail_error'] . $mail->ErrorInfo;
}
|
так файл не прицепляется | |
|
|
|
|
|
|
|
для: vladimir_sko
(07.02.2010 в 12:27)
| | Для начала следует прописать полный путь к файлу и посмотреть, что происходит. Если не работает, то проверить конфиг апаче относительно разрешенных директорий - лучше все делать не выходя за пределы корневой директории сервера и не подкручивая специально конфиги. Если работатет - смотреть где допустили ошибку в относительном пути. | |
|
|
|
|
|
|
|
для: Sergeich
(07.02.2010 в 13:05)
| | путь правильный, папка cache 777.
если файл на сервере, то достаточно просто указать путь к нему??
# send user a copy of the report
if($ccsender && $fields['email']) {
$mail = new PHPMailer();
$mail->IsMail();
$mail->CharSet = $modx->config['modx_charset'];
$mail->IsHTML($isHtml);
$mail->From = $from;
$mail->FromName = $fromname;
$mail->Subject = $subject;
$mail->Body = $report;
AddAddressToMailer($mail,"to",$fields['email']);
$attachments="/home/users/a/***/domains/***.ru/new/assets/cache/import.txt";
AttachFilesToMailer($mail,$attachments);
if(!$mail->send()) return 'CCSender: ' . $_lang['ef_mail_error'] . $mail->ErrorInfo;
}
|
# Attach Files to Mailer
function AttachFilesToMailer(&$mail,&$attachFiles) {
if(count($attachFiles)>0){
foreach($attachFiles as $attachFile){
if(!file_exists($attachFile)) continue;
$FileName = $attachFile;
$contentType = "application/octetstream";
if (is_uploaded_file($attachFile)){
foreach($_FILES as $n => $v){
if($_FILES[$n]['tmp_name']==$attachFile) {
$FileName = $_FILES[$n]['name'];
$contentType = $_FILES[$n]['type'];
}
}
}
$patharray = explode(((strpos($FileName,"/")===false)? "\\":"/"), $FileName);
$FileName = $patharray[count($patharray)-1];
$mail->AddAttachment($attachFile,$FileName,"base64",$contentType);
}
}
}
|
ошибка
Error: Invalid argument supplied for foreach()
Error type/ Nr.: Warning - 2
File: /home/users/a/***/domains/****.ru/new/assets/snippets/eform/eform.inc.php
Line: 662
Line 662 source: foreach($attachFiles as $attachFile){ | |
|
|
|
|
|
|
|
для: vladimir_sko
(07.02.2010 в 13:19)
| | А может все-таки неправильный? Или права на файл несоответствующие? Что будет, если звездочки реальными буквами заменить? | |
|
|
|
|
|
|
|
для: Sergeich
(07.02.2010 в 13:58)
| | >А может все-таки неправильный? Или права на файл несоответствующие? Что будет, если звездочки реальными буквами заменить?
путь у движка проверенный звездочки вместо названия домена, права на файл 777 на папку 777
и если файл приклеплять через форму , то все работает
case "file":
if ($_FILES[$name]['error']==1 || $_FILES[$name]['error']==2){
$vMsg[count($vMsg)]=$desc . $_lang['ef_upload_exceeded'];
$rClass[$name]=$invalidClass;
}elseif ($isRequired==1 && ($_FILES[$name] && $_FILES[$name]['type']=='')){
$rMsg[count($rMsg)]=$desc;
$rClass[$name]=$requiredClass;
}elseif ($_FILES[$name]['tmp_name']){
if( substr($fld[5],0,5)!="#LIST" || validateField($_FILES[$name]['name'],$fld,$vMsg,$isDebug) )
{$attachments[count($attachments)] = $_FILES[$name]['tmp_name'];
else $rClass[$name]=$invalidClass;
}
break;
|
| |
|
|
|
|
|
|
|
для: vladimir_sko
(07.02.2010 в 14:20)
| | Получилось
function AttachFilesToMailer1(&$mail,&$attachFiles) {
if(count($attachFiles)>0){
$contentType = "application/octetstream";
$mail->AddAttachment('/home/users/a/***/tmp/import.txt','import.txt',"base64",$contentType);
}
}
|
| |
|
|
|