Контактные данные

PHP Не работает загрузка файлов на сервер?

Всем привет, я совсем недавно начал углубляться в разработку и столкнулся с одной проблемой! Помогите, пожалуйста, кто разбирается, целый день вожусь с этим. В php массиве список полей формы с указанием, какие из них уже загружены. Загруженные поля должны отображаться с пометкой «Уже загружен» и ним не должно быть возможности загружать файл. В общем после того, как добавил проверку загруженных файлов, файлы перестали загружаться в нужный каталог.

 array('name' => 'Устав', 'uploaded' => true), 'file_2' => array('name' => 'Расчетный счет', 'uploaded' => false), 'file_3' => array('name' => 'Паспорт ответственного', 'uploaded' => true), 'file_4' => array('name' => 'ИНН ответственного', 'uploaded' => false) ); // echo key($blacklist); ?>     %s', $_SESSION['message']); unset($_SESSION['message']); > ?> 

$file) Имя поля: '.$file['name'].'

' ?>


else: < ?>

Файл не загружен' ?>

?> ?>


       else < $message = 'При перемещении файла в каталог загрузки произошла ошибка. Убедитесь, что каталог загрузки доступен для записи веб-сервером.'; >> else < $message = 'Загрузка не удалась. Допустимые типы файлов: ' . implode(',', $allowedfileExtensions); >> else < $message = 'При загрузке файла произошла ошибка. Пожалуйста, проверьте следующую ошибку.
'; $message .= 'Error:' . $_FILES['file_1']['error']; > > $_SESSION['message'] = $message; header("Location: index.php"); ?>

Простой 18 комментариев

Источник

Не отправляется файл с формы на почту при помощи php. Что делать?

У меня имеется форма, которая содержит поля куда вводится информация и отправляется на почту. Сегодня был добавлен элемент который загружает файл на форму. У меня возникла проблема в том, что файл не отправляется на почту.

HTML форма 
Отправить
Сообщение успешно отправлено!
Сообщение успешно отправлено!
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 » );

readfile ( «file.exe» ); // соственно выводим это
exit; // и завершаем работу скрипта, больше ничего ненужно
?>

Вот таким образом можно послать на скачку в виде файла, любой контент через обычную ноду с форматом ввода PHP.
Нет ничего проще drupal`a.

Источник

Читайте также:  Java collection new list
Оцените статью