|
|
|
| народ,создал сайт на html,написал скрипт на php для загрузки файлов на сервер.как сделать чтобы на сайте показывались уже в нормальном виде.и как сделать чтобы они и могли же их скачивать.работаю на Денвере. | |
|
|
|
|
|
|
|
для: ilya1991
(21.06.2012 в 13:13)
| | Народ спрашивает - нормально показывалось что? Файлы формата .doc, о которых вы ранее спрашивали? | |
|
|
|
|
|
|
|
для: confirm
(21.06.2012 в 13:47)
| | да,документы .doc. | |
|
|
|
|
|
|
|
для: ilya1991
(22.06.2012 в 06:00)
| | Документы формата .doc имеют совсем другую структуру, и отобразить их на html странице как есть нельзя. Либо отдавайте их на скачивание, либо преобразовывайте их в формат html, чтобы поместить на странице. | |
|
|
|
|
|
|
|
для: confirm
(22.06.2012 в 07:49)
| | я вот написал скрипт загрузки файлов на сервер когда выбираешь он не загружает.Это Денвер тупит или я не так сделал что-то? | |
|
|
|
|
|
|
|
для: ilya1991
(22.06.2012 в 08:49)
| | А кто же его знает, кто из вас тупит. Вы покажите свой скрипт и форму, которой загружаете, тогда можно сказать кто из вас не прав. | |
|
|
|
|
|
|
|
для: ilya1991
(22.06.2012 в 08:49)
| | Форма как выглядит и появляется ли файл во временной папке? | |
|
|
|
|
|
|
|
для: cheops
(22.06.2012 в 20:56)
| | <html>
<head>
<title>Загрузка файла</title>
</head>
<body>
<h1>Загрузка файла</h1>
<form method="post" action="do_upload.php" enctype="multipart/form-data">
<p><strong>Файл для загрузки:</strong><br>
<input type="file" name="img1" size="30"></p>
<p><input type="submit" name="sumbit" value="Загрузить"></p>
</form>
</body>
</html>
вот форма hrml | |
|
|
|
|
|
|
|
для: cheops
(22.06.2012 в 20:56)
| | <?
if ($imgl_name !="") {
@copy("imgl", "/home/localhost/www/$imgl_name")
or die ("Невозможно скопировать файл")
} else {
die ("файл не обнаружен.");
}
?>
<html>
<head>
<title>Успешная загрузка файла</title>
</head>
<body>
<hl>загрузка завершилась успешно!</hl>
<p>Вы отправили файл: <? echo "$imgl_name"; ?>, размером: <? echo
"$imgl_size"; ?> байт, тип файла: <? echo "$imgl_type"; ?>. </p>
</body>
</html>
вот форма php | |
|
|
|
|
|
|
|
для: ilya1991
(23.06.2012 в 17:37)
| | <input type="file" name="img1" size="30"></p>
Это поле, которое будет содержать путь к файлу на компьютере пользователя. А при отправке формы файл будет размещен в суперглобальном массиве $_FILES.
Того что вы написали:
if ($imgl_name !="") ...
на сервере и близко не будет. Да и при перемещении файла (даже когда его получите) функцию copy() использовать не рекомендуется.
Выбрасывайте этот РНР-скрипт, и вместо него напишите:
<?php
echo '<pre>;
print_r($_FILES);
?>
|
Чтобы ознакомиться с тем, как получаются файлы, и как это выглядит. Ну а потом уже и к практике. | |
|
|
|
|
|
|
|
для: confirm
(23.06.2012 в 17:46)
| | извините еще раз,я вот написал как вы и при загрузки он либо просит открыть или загрузить.Что тут не так? | |
|
|
|
|
|
|
|
для: ilya1991
(23.06.2012 в 18:28)
| | Если при обращении к странице содержащего активный скрипт (а это ваш РНР скрипт), запрос на сохранение, то значит ваш скрипт (php-файл) не выполняется, то есть не работает сервер, php.
То что я вам написал, должно вывести на экран содержимое массива $_FILES, в котором будет описано все, что касается загружаемого файла. Вот с этим массивом и надо работать.
Но. Прежде чем загружать файл, вы все-таки определитесь, что с этим файлом вы будете дальше делать:
1) отдавать пользователю на скачивание, чтобы они его могли открывать в Word?
2) просто отображать на веб странице (о чем был ранее вопрос)?
от выбора 1 или 2, будут зависеть действия по загрузке. | |
|
|
|
|
|
|
|
для: confirm
(23.06.2012 в 18:39)
| | а два не как совместить?лучше чтобы на странице отображалось,пусть сами разбираются.Просто видите я студен и язык php мы не изучали((((а на практике попросили такую ерунду сделать. | |
|
|
|
|
|
|
|
для: ilya1991
(23.06.2012 в 19:15)
| | Можно и то, и то, чтобы было.
Но если "лучше чтобы на странице отображалось,пусть сами разбираются", то делать нужно следующим образом.
Учтите, что это пример, так как я не знаю, как вы эти файлы будете выставлять на страницу, то есть где и как помещать на них ссылки. Поэтому, в примере при каждом добавлении нового файла, на этой же странице просто выводится список загруженных на сервер файлов.
И еще важный момент. Я ведь вам ранее говорил, что загруженным файлам нужен "учет", нужна удобная структура, которая бы описывала такие файлы на сервере. Можно такое описать и в статическом файле, но чем больше файлов будет загружаться, тем более неудобным такое управление будет становиться. Поэтому лучше сразу позаботиться о простенькой базе, которая бы все хранила. Вот с этого и начнем пример.
Что-то мне подсказывает, что ваши страницы, это кодировка windows-1251. Согласно этому и база будет в этой кодировке. База имеет одну таблицу 'files', в которой три поля - первичный ключ, который служит одновременно и именем под которым загруженные файлы будут сохраняться на сервере, второе поле, это оригинальное имя файла, и третье, время когда файл был загружен на сервер. Мне трудно сказать какой длины в вашей организации могут иметь наименования .doc файлов, я эту длину определил в 120 символов. Если мало, значит надо будет увеличить.
Вот структура таблицы. Если выполнить этот запрос в РМА Денвера, то эта таблица будет добавлена в указанную базу. Но сначала нужно создать базу с которой вы будете работать, имя пользователя для нее и пароль. Все это делается в РМА (phpmyadmin). В примере имя базы у меня условно указано как 'test', измените это имя на свое, реальное, а также в запросе подключения к серверу укажите имя пользователя и пароль. Имя хоста в запросе подключения не изменяйте, такое же и у вас будет 'localhost'.
CREATE TABLE IF NOT EXISTS `files` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(120) NOT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
|
Понятное дело, что doc-файл не будет отображаться на странице непосредственно. Для того, чтобы его поместить, нужно его конвертировать в html-формат. Сделать это можно с помощью COM объекта MS Word, поэтому он должен быть установлен у вас.
MS Word может сохранить html в трех разных форматах:
1) html файл, которому будет соответствовать и созданная под именем файла и папка, в которой будут размещаться и другие файлы связанные с исходным.
2) html файл с фильтром, также будет создана папка, но содержащая только такие элементы как изображения, которые могут быть в doc-файле.
3) вебархивный файл (.mht), который будет содержать в себе все, как-то изображения, которые могут быть в doc-файле, и т.п.. То есть будет создаваться всего один файл.
Формат 3 удобен, но его открыть можно как локальный файл, и то, браузерами IE и Opera (в последнем Chrome тоже добавлена поддержка этого формата, в FF только при установленном расширении). Можно и на страницу поместить такой файл, но это вопрос пространный и не будем его затрагивать, для краткости - могут быть огрехи при этом. В общем, более подходящим форматом является формат 2, в этот формат и будет конвертировать.
В примере, условно, загруженные и сконвертированные файлы сохраняются в папке doc, которую вы должны создать у себя на сайте, чтобы проверить работу скрипта. Можете и другую папку указать, только поменяйте название и в примере. Сохраните весь код примера в файл с расширением php, и запустите его (не забыв предварительно создать базу и таблицу в ней).
<?php
//это блок загрузки, конвертирования и сохранения файла
//подключаемся к серверу
mysql_connect('localhost','user','password') or die (mysql_error());
//выбираем базу
mysql_select_db('test') or die (mysql_error());
//указываем кодировку
mysql_query("SET NAMES 'CP1251'");
header('Content-type: text/html; charset=windows-1251');
if(isset($_FILES['doc']) && !$_FILES['doc']['error']) {
//меняем слеши, иначе при сохранении word может и плеваться
$dir = str_replace('/','\\',$_SERVER['DOCUMENT_ROOT']).'\\doc\\';
//открываем Word объект
$word = new COM("word.application");
//любоваться на него незачем, поэтому сделаем его невидимым
$word->Visible = 0;
//записываем имя загруженного файла в базу
mysql_query("INSERT INTO `files` (`name`)
VALUES ('".mysql_real_escape_string($_FILES['doc']['name'])."')")
or die (mysql_error());
//это имя под которым файл будет сохранен на сервере
$name = mysql_insert_id().'.htm';
//открываем файл в Word
$word->Documents->Open($_FILES['doc']['tmp_name']);
//и сохраняем его в html-формате
$word->Documents[1]->SaveAs($dir.$name, 9);
//закрываем Word
$word->Quit();
$word = null;
}
?>
<!-- Форма загрузки файла и вывод списка загруженных -->
<html>
<head>
<title>Загрузка</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="doc"
accept="application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/msword" />
<input type="submit" value="Отправить" />
</form>
<?php
//вывод списка загруженных файлов
$q = mysql_query("SELECT *, DATE_FORMAT(`time`, '%e.%m.%Y %T') AS `time`
FROM `files` ORDER BY `name`") or die (mysql_error());
if($q && mysql_num_rows($q)) {
while($r = mysql_fetch_assoc($q))
echo '<a href="./doc/'.$r['id'].'.htm">'.$r['name'].'</a> Добавлено: '.$r['time'].'<br>';
}
?>
</body>
</html>
| Проверка isset($_FILES['doc']) нужна только в этом примере. Ваша форма может обращаться к отдельному файлу, содержащему такой скрипт загрузки, поэтому в этом случае такая проверка не нужна. Необходимо проверять только на отсутствие ошибки при загрузке.
Таблица может содержать и другие сведения о файле, например, аннотацию к нему, и т.п.. А вот размер загруженного файла не нужен, если он помещается непосредственно на страницу. | |
|
|
|
|
|
|
|
для: confirm
(23.06.2012 в 20:03)
| | извените еще раз!я создал базу данных,добавил в нее запрос,создал папку doc как вы и писали,создал код с расширением php.Но у меня он все равно его либо открывает либо сохраняет.отключил firewall,антивирусника нету.что мне еще надо сделать чтобы все заработало? | |
|
|
|
|
|
|
|
для: ilya1991
(27.06.2012 в 06:22)
| | Ну если вы создали базу, и в ней указанную таблицу, то РМА у вас работает, то есть по адресу http://localhost/ все ОК.
А где в Денвере находится ваш сайт, и как вы его запускаете?
Создайте в папке home Денвера папку с именем вашего сайта, для примера это будет mysite.ru. В этой папке создайте папку www, в которую и должны быть помещены ваши файлы и папки. То есть папка www корневая для этого сайта.
Поместите в корень и вот этот файл, с именем test.php:
Перезапустите Денвер, чтобы он подключил этот созданный виртуальный хост. После этого в браузере наберите http://mysite.ru/test.php. Если вы в браузере прочтете Work!, значит все работает.
Поместите в корень и скрипт примера, работает?
Ну а как дальше его использовать я не знаю, то есть на какой странице у вас будет форма, что должен выполнять скрипт еще, кроме обработки загруженного файла, и что выдавать в итоге пользователю, и т.д., и т.п.. | |
|
|
|
|