Отправить
Сообщение успешно отправлено!
Сообщение успешно отправлено!
email.php if($_SERVER["REQUEST_METHOD"] == "POST") < if(isset($_POST["your_name"])) < $name = trim(strip_tags($_POST["your_name"])); >if(isset($_POST["your_contact"])) < $number = trim(strip_tags($_POST["your_contact"])); >if (isset( $_POST["message"])) < $question = trim(strip_tags($_POST["message"])); >if (isset($_POST['send'])) < if (!empty($_FILES['attachment']['name']))< //переменные $file_name = $_FILES['attachment']['name']; $temp_name = $_FILES['attachment']['tmp_name']; $file_type = $_FILES['attachment']['type']; // получить расширение файла $base = basename($file_name); $extension = substr($base, strlen($base)-4,strlen($base)); $file = $temp_name; $content = chunk_split(base64_encode(file_get_contents($file))); $uid = md5(uniqid(time())); >> $message = ""; $message .= ""; $message .= "Телефон: ".$number; $message .= "
"; $message .= "Имя: ".$name; $message .= "
"; $message .= "Вопрос: ".$question; $message .= "
"; //$headers .= "--".$uid."\r\n"; //$headers .= "Content-Type:". $file_type.":name=\"".$file_name."\"\r\n"; //$headers .= "Content-Transfer-Encoding: base64\r\n"; //$headers .= "Content-Description: attachment;filename=\"".$file_name."\r\n"; $message .= "Файл: ".$content."\r\n\r\n"; $message .= ""; $message .= ""; $sent = mail ($to, $subject, $message, $headers); //include 'reload_page.php'; //reload_page(); > else < exit(); >?>
Можете пожалуйста помочь дописать php файл, чтобы он отправлял письма с вложенным файлом на почту.
Заранее вам благодарен!
Простой 1 комментарий
Источник
Не получается отправить файл
Вообщем должен загрузится файл а затем распасится в parse.php если вручную я прописываю пути до файла то он работает а вот мне надо через форму в которую загружается файл а затем отправляется в parse.php
вот форма :
form action="parse.php" method="get" enctype="multipart/form-data"> Модуль: input type="text" name="module" />br /> input type="file" name="myfile" />br /> input type="submit" value="ОК" /> form>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
set_time_limit(0); require_once('db.php'); $myfile=$_POST['myfile']; $path = $myfile; $file_ru = file_get_contents($path); $file_ru = explode("\n", $file_ru); ?> foreach ($file_ru as $v) { if (strpos($v, "=") !== false) { list($id, $ru) = explode("=", $v,2); echo $id . " = " . $ru; echo "
"; $data = array(); $data['id'] = $id; $data['ru'] = $ru; $db->query("replace into koko set ?a ",$data); echo mysql_error(); } }
выдает ошибку : Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in Z:\home\localhost\www\ipgo\parse.php on line 7
Источник
[Решено] Не получается корректно отдать файл на php
Пытаюсь организовать отдачу файла пользователю таким скриптом:
Если использовать такой код в отдельно созданном файле на хостинге, то все работает, но когда я вставляю этот текст в ноду друпала через фильтр PHP code, exe файлы перестают корректно скачиваться.
Файл скачивается, но «портиться» и перестает запускаться.
zip файлы при этом скачиваются и работают корректно.
Комментарии
Я бы хотел разобраться, что мешает этому коду работать корректно в друпале и как-то решить эту проблему.
А что должен делать этот модуль?
Эх если бы кто-нибудь на более понятном языке объяснил.
Добавьте в скрипт exit()
Не помню где здесь писал про отдачу картинок, давно это было, но может в доках осело
У себя http://shaman.asiadata.ru/node/108
Можно сделать по аналогии, только MIME-тип сменить надо
Может кто-нибудь объяснить, почему в моем случае файлы zip отдаются корректно, а файлы exe нет?
Проблема в том что хидер отправляете на скачку а выдаете содержимое файла внутри всей страницы drupal, то есть там и и и тд и тп.
Зип файлы отдаются так же только архиватор в состоянии увидеть сигнатуру зипфайла не в начале файла а внутри .
Rar.
, а эксешный файл должен начинаться именно с сигнатуры MZ а начинается с
MZ.
Вам только через менюколбэк можно сделать чистый вывод или (череззадный способ но простой)через создание шаблона перекрытия.
Например у вас пхп-нода с номером 2082? адрес /node/2083
создаете в своей теме файл page-node-2082.tpl.php с содержимым
а в файле node.tpl.php в самое начало вставить
теперь отключаем тему и заново включаем, и усе, ваш файл качается.
Ну и на последок поправка, хидеры лучше отправлять drupal-функциями, например
// Send Header
drupal_set_header ( «Pragma: public» );
drupal_set_header ( «Expires: 0» );
drupal_set_header ( «Cache-Control: must-revalidate, post-check=0, pre-check=0» );
drupal_set_header ( «Content-Type: application/force-download» );
drupal_set_header ( «Content-Type: application/octet-stream» );
drupal_set_header ( «Content-Type: application/download» );
drupal_set_header ( «Content-Disposition: attachment;filename=file.exe» );
drupal_set_header ( «Content-Transfer-Encoding: binary » );
Опятьже спасибо мне в виде стотыщьпиццот баксов
Точно открыл получаемый zip файл блокнотом, а там html-код Спасибо большое за объяснение, теперь хоть понял с чем бороться надо.
Тут подумал, что и после кода exit ставить бессмысленно. PHP код исполняется с перехватом данных из буфера, так что содержимое файла в любом случае попадёт внутрь переменной шаблона. Сорри. Вам или решение Владимира подойдёт или модификация того, на что я приводил ссылки.
Сделал свой модуль как тут http://shaman.asiadata.ru/node/108 все получилось
Спасибо direqtor за ссылку и Vladimir_VVV за объяснение сути проблемы.
Вот содержание модуля, может пригодиться кому-нибудь
$items [ ‘download’ ] = array(
‘type’ => MENU_CALLBACK ,
‘page callback’ => ‘smspartner_file’ ,
‘access arguments’ => array( ‘access content’ ),
);
return $items ;
>
smspartner_file ( $file = » ) drupal_set_header ( «Content-Disposition: attachment; filename= $file » );
drupal_set_header ( «Content-Type: application/octet-stream» );
readfile ( «/путь к файлу на сервере/ $file » );
exit();
>
потом в нужном месте вызываю: smspartner_file(file.exe)
и запускается скачивание файла file.exe из папки указанной в модуле
делал все это для отдачи файлов за смс
PS. Мой первый модуль для друпала
есть еще простой вариант, я просто немного усложнил написав вначале пост, а потом подумал и вспомнил что друпал выводит на печать через ob_start(); а это сильно упрощает дело.
И так все что я писал выше — забудте, никаких изменений в файлах шаблона ненужно:
пишем в своей ноде с PHP-фильтром:
ob_get_contents (); // типо получаем все что до этого нарендерил drupal
// и никуда его не отправляем, и никакой переменной неприсваиваем
// далее обычные хидеры для скачки файла
drupal_set_header ( «Pragma: public» );
drupal_set_header ( «Expires: 0» );
drupal_set_header ( «Cache-Control: must-revalidate, post-check=0, pre-check=0» );
drupal_set_header ( «Content-Type: application/force-download» );
drupal_set_header ( «Content-Type: application/octet-stream» );
drupal_set_header ( «Content-Type: application/download» );
drupal_set_header ( «Content-Disposition: attachment;filename=file.exe» );
drupal_set_header ( «Content-Transfer-Encoding: binary » );?php
readfile ( «file.exe» ); // соственно выводим это
exit; // и завершаем работу скрипта, больше ничего ненужно
?>
Вот таким образом можно послать на скачку в виде файла, любой контент через обычную ноду с форматом ввода PHP.
Нет ничего проще drupal`a.
Источник