Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: загрузка на Web-сервер
 
 автор: ilya1991   (21.06.2012 в 13:13)   письмо автору
 
 

народ,создал сайт на html,написал скрипт на php для загрузки файлов на сервер.как сделать чтобы на сайте показывались уже в нормальном виде.и как сделать чтобы они и могли же их скачивать.работаю на Денвере.

  Ответить  
 
 автор: confirm   (21.06.2012 в 13:47)   письмо автору
 
   для: ilya1991   (21.06.2012 в 13:13)
 

Народ спрашивает - нормально показывалось что? Файлы формата .doc, о которых вы ранее спрашивали?

  Ответить  
 
 автор: ilya1991   (22.06.2012 в 06:00)   письмо автору
 
   для: confirm   (21.06.2012 в 13:47)
 

да,документы .doc.

  Ответить  
 
 автор: confirm   (22.06.2012 в 07:49)   письмо автору
 
   для: ilya1991   (22.06.2012 в 06:00)
 

Документы формата .doc имеют совсем другую структуру, и отобразить их на html странице как есть нельзя. Либо отдавайте их на скачивание, либо преобразовывайте их в формат html, чтобы поместить на странице.

  Ответить  
 
 автор: ilya1991   (22.06.2012 в 08:49)   письмо автору
 
   для: confirm   (22.06.2012 в 07:49)
 

я вот написал скрипт загрузки файлов на сервер когда выбираешь он не загружает.Это Денвер тупит или я не так сделал что-то?

  Ответить  
 
 автор: confirm   (22.06.2012 в 11:28)   письмо автору
 
   для: ilya1991   (22.06.2012 в 08:49)
 

А кто же его знает, кто из вас тупит. Вы покажите свой скрипт и форму, которой загружаете, тогда можно сказать кто из вас не прав.

  Ответить  
 
 автор: cheops   (22.06.2012 в 20:56)   письмо автору
 
   для: ilya1991   (22.06.2012 в 08:49)
 

Форма как выглядит и появляется ли файл во временной папке?

  Ответить  
 
 автор: ilya1991   (23.06.2012 в 17:36)   письмо автору
 
   для: 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

  Ответить  
 
 автор: ilya1991   (23.06.2012 в 17:37)   письмо автору
 
   для: 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

  Ответить  
 
 автор: confirm   (23.06.2012 в 17:46)   письмо автору
 
   для: 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);
?>

Чтобы ознакомиться с тем, как получаются файлы, и как это выглядит. Ну а потом уже и к практике.

  Ответить  
 
 автор: ilya1991   (23.06.2012 в 18:28)   письмо автору
 
   для: confirm   (23.06.2012 в 17:46)
 

извините еще раз,я вот написал как вы и при загрузки он либо просит открыть или загрузить.Что тут не так?

  Ответить  
 
 автор: confirm   (23.06.2012 в 18:39)   письмо автору
 
   для: ilya1991   (23.06.2012 в 18:28)
 

Если при обращении к странице содержащего активный скрипт (а это ваш РНР скрипт), запрос на сохранение, то значит ваш скрипт (php-файл) не выполняется, то есть не работает сервер, php.

То что я вам написал, должно вывести на экран содержимое массива $_FILES, в котором будет описано все, что касается загружаемого файла. Вот с этим массивом и надо работать.

Но. Прежде чем загружать файл, вы все-таки определитесь, что с этим файлом вы будете дальше делать:
1) отдавать пользователю на скачивание, чтобы они его могли открывать в Word?
2) просто отображать на веб странице (о чем был ранее вопрос)?
от выбора 1 или 2, будут зависеть действия по загрузке.

  Ответить  
 
 автор: ilya1991   (23.06.2012 в 19:15)   письмо автору
 
   для: confirm   (23.06.2012 в 18:39)
 

а два не как совместить?лучше чтобы на странице отображалось,пусть сами разбираются.Просто видите я студен и язык php мы не изучали((((а на практике попросили такую ерунду сделать.

  Ответить  
 
 автор: confirm   (23.06.2012 в 20:03)   письмо автору
 
   для: 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.$name9);
  
//закрываем 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']) нужна только в этом примере. Ваша форма может обращаться к отдельному файлу, содержащему такой скрипт загрузки, поэтому в этом случае такая проверка не нужна. Необходимо проверять только на отсутствие ошибки при загрузке.

Таблица может содержать и другие сведения о файле, например, аннотацию к нему, и т.п.. А вот размер загруженного файла не нужен, если он помещается непосредственно на страницу.

  Ответить  
 
 автор: ilya1991   (27.06.2012 в 06:22)   письмо автору
 
   для: confirm   (23.06.2012 в 20:03)
 

извените еще раз!я создал базу данных,добавил в нее запрос,создал папку doc как вы и писали,создал код с расширением php.Но у меня он все равно его либо открывает либо сохраняет.отключил firewall,антивирусника нету.что мне еще надо сделать чтобы все заработало?

  Ответить  
 
 автор: confirm   (27.06.2012 в 11:09)   письмо автору
 
   для: ilya1991   (27.06.2012 в 06:22)
 

Ну если вы создали базу, и в ней указанную таблицу, то РМА у вас работает, то есть по адресу http://localhost/ все ОК.
А где в Денвере находится ваш сайт, и как вы его запускаете?
Создайте в папке home Денвера папку с именем вашего сайта, для примера это будет mysite.ru. В этой папке создайте папку www, в которую и должны быть помещены ваши файлы и папки. То есть папка www корневая для этого сайта.
Поместите в корень и вот этот файл, с именем test.php:
<?php
echo "Work!";
?>

Перезапустите Денвер, чтобы он подключил этот созданный виртуальный хост. После этого в браузере наберите http://mysite.ru/test.php. Если вы в браузере прочтете Work!, значит все работает.
Поместите в корень и скрипт примера, работает?
Ну а как дальше его использовать я не знаю, то есть на какой странице у вас будет форма, что должен выполнять скрипт еще, кроме обработки загруженного файла, и что выдавать в итоге пользователю, и т.д., и т.п..

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования