Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

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

 

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

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

тема: не скачаивается файл, пишет Rar! и прочую абракадабру
 
 автор: hitball   (10.10.2008 в 14:11)   письмо автору
280.4 Кб
 
 

Здравствуйте уважаемые посетители и администраторы форума.
Возникла такая проблема.
Делаю сайт на PHP + MySQL, хочу чтобы там можно было скачивать книги. Но при нажатии на "скачать", выводится страница с таким текстом "Rar!" и прочая абракадабра.
Создала 2 файла, который будут отвечать за это действие.

Первый - view_books.php
<?php 
include ("blocks/bd.php"); /*соединяемся с базой*/
if (isset($_GET['id'])) {$id $_GET['id'];}
if (!isset(
$id)) {$id 1;}
$result mysql_query ("SELECT * FROM books WHERE id='$id'",$db);
if (!
$result
{
echo 
"<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (
mysql_error());
}
if (
mysql_num_rows($result) > 0)
{
$myrow mysql_fetch_array($result);
$new_view $myrow["view"] + 1;
$update mysql_query ("UPDATE books SET view='$new_view' WHERE id='$id'",$db);
}
else
{
echo 
"<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="Description" content="<?php echo $myrow['meta_d']; ?>" />
<meta name="Keywords" content="<?php echo $myrow['meta_k']; ?>" />
<meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
<title><?php echo $myrow['title']; ?></title>
<meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
<link href="style.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
.стиль31 {font-size: 14px}
-->
</style>
</head>
<body>
<table width="1150" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="main_border">
<!--Подключаем шапку-->
<? include("blocks/header.php"); ?>
<td ><div align="center">
<table width="1150" cellpadding="0" cellspacing="0">
<tr>
<!--левую часть-->
<? include ("blocks/lefttd.php"); ?>
<td width="742" valign="top"><? include ("blocks/form_poisk.php");?> <p>
<? 
printf 
("
<p class='view_title'>%s</p>
<p class='lesson_left'><span class='lesson_add'>Автор: %s</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span class='lesson_add'>Дата добавления: %s</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class='lesson_add'>Просмотров: %s</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span class='lesson_add'>Размер: %s</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span class='lesson_add'>Закачек: %s</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span class='lesson_add'><a style='font-size:12px; color:#cc0000' href='%s'>Скачать: </a></span></p><p class='lesson_left'>%s</p>"
,$myrow["title"],$myrow["author"],$myrow["date"],$myrow["view"],$myrow["size"],$myrow["zaka"],$myrow["link"],$myrow["text"]); 
?>
<form action="vote_res_books.php" method="post" name="vv">
<p class="pvot">Поставить оценку: &nbsp; 1 <input name="score" type="radio" value="1" /> 2 <input name="score" type="radio" value="2" /> 3 <input name="score" type="radio" value="3" /> 4 <input name="score" type="radio" value="4" /> 5 <input name="score" type="radio" value="5" checked/>&nbsp;&nbsp;
<input class="sub_vote" name="submit" type="submit" value="Оценить" />
<input name="id" type="hidden" value="<? echo "$id";?>" />
</p>
</form>
<?
echo "<p class='post_comment'>Коммментарии:</p>";
$result3 mysql_query ("SELECT * FROM comments_books WHERE post='$id'",$db);
if (
mysql_num_rows ($result3) > 0)
{
$myrow3 mysql_fetch_array($result3);
do
{
printf ("<div class='post_div'><p class='post_comment_add'>Комментарий добавил(а): <strong>%s </strong><br> Дата: <strong> %s</strong></p><p class='post_comment_addd'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%s</p></div>",$myrow3["author"], $myrow3["date"], $myrow3["text"]);
}
while (
$myrow3 mysql_fetch_array($result3));
}
$result4 mysql_query ("SELECT img FROM comments_setting",$db);
$myrow4 mysql_fetch_array ($result4);
?> 
<p class='post_comment'>Добавить Ваш комментарий:</p>
<form action="comment_books.php" method="post" name="form_com">
<p class='post_comment_add'><label>Ваше имя: </label><input name="author" type="text" size="42" maxlength="40" /></p>
<p class='post_comment_add'><label>Текст комментария: <br><textarea name="text" cols="40" rows="4"></textarea></label></p>
<p class='post_comment_add'>Введите сумму чисел с картинки</p>
<p class='post_comment_add' ><img style='margin-top:9px;' src="<? echo $myrow4["img"]; ?>" alt="Финансовая грамотность" width="58" height="31" /> 
<input style='margin-bottom:10px;' name="pr" type="text" size="5" maxlength="5" /></p>
<input name="id" type="hidden" value="<? echo $id?>" />
<p class='post_comment_add' ><input name="sub_com" type="submit" value="Комментировать" /></p>
</form>
</p></td>
<!--Подключаем правую часть-->
<div align="center">
<? include("blocks/pravtd.php"); ?>
</div>
</tr>
</table>
</div></td>
</tr>
<!--Подключаем низ-->
<? include ("blocks/footer.php")?>
</table>
</body>
</html>


2-й файл - download.php

<title>Обратно</title>
<? 
include ("blocks/bd.php");
if (isset(
$_POST['score'])) 
{
$score $_POST['score'];}
if (isset(
$_POST['id'])) 
{
$id $_POST['id'];}
$result mysql_query("SELECT rating,q_vote,zaka,link FROM books WHERE id='$id'",$db);
if (!
$result
{
echo 
"<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (
mysql_error());
}
if (
mysql_num_rows($result) > 0)
{
$myrow mysql_fetch_array($result);
$link $myrow ['link'];
$new_rating $myrow['rating'] + $score;
$new_q_vote $myrow ['q_vote'] + 1;
$new_zaka $myrow['zaka'] + 1;
$update mysql_query("UPDATE books SET rating = '$new_rating', q_vote = '$new_q_vote' zaka = '$new_zaka' WHERE id='$id'",$db);
if (
$update)
{
echo 
"<html><head>
<meta http-equiv='Refresh' content='0'; URL='
$link'>
</head></html>"
;
exit();
}
}
else
{
echo 
"<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>


Также прикрепляю фото заполнения таблицы БД,
Огромнейшая просьба, если кто знает что нужно исправить в коде или в заполнении таблицы, чтобы файл начал скачиваться, подскажите, пожалуйста!!!

   
 
 автор: sim5   (10.10.2008 в 14:27)   письмо автору
 
   для: hitball   (10.10.2008 в 14:11)
 

У вас прямая ссылка на файл получается, и она верная? И удалите вы этот ужас со страницы - <meta http-equiv="Content-type" content="text/html; charset=windows-1251" />.

   
 
 автор: hitball   (10.10.2008 в 14:32)   письмо автору
 
   для: sim5   (10.10.2008 в 14:27)
 

В базе адрес прописан так:

books/blog.rar

А в адресной строке браузера, при нажатии на ссылку:

http://localhost/phpsite/books/blog.rar

   
 
 автор: sim5   (10.10.2008 в 14:35)   письмо автору
 
   для: hitball   (10.10.2008 в 14:32)
 

Ну если ссылка эта верная, то у вас должно появиться окно предлагающее скачать файл. Проверьте просто так на локальном сервере: <a href="phpsite/books/blog.rar">download</a>

   
 
 автор: hitball   (10.10.2008 в 14:40)   письмо автору
 
   для: sim5   (10.10.2008 в 14:35)
 

Вы хотите сказать, что код правильный, да?
А у меня при и нажатии на ссылку открывается страница с таким тестом :

Rar!ПђsіEtЂ‚H]&? *жY§r¬83(Љ Є гбв ®ўЁвм Ў«®Ј.exeПЃђ Ѓ`ѓђПЂ` ‚ђ%ХTМЊС&#65533;^8’гmЃ"DK‘K±ШЬѓ•9+"rF r bIЌ"P¤*Є™)A"F"ЏЏb”— |№оKl2ЛlцдМЙ™ff9ielr4Вйќ$Ў’

Это только маленькая часть того чуда, которым заполнена вся страница

   
 
 автор: Николай2357   (10.10.2008 в 14:42)   письмо автору
 
   для: hitball   (10.10.2008 в 14:40)
 

Много букв. Скажите, то что Вы пытаетесь скачать находится в базе или это файл?

   
 
 автор: hitball   (10.10.2008 в 14:46)   письмо автору
 
   для: Николай2357   (10.10.2008 в 14:42)
 

это файл, заархивированая книга

   
 
 автор: Николай2357   (10.10.2008 в 14:52)   письмо автору
 
   для: hitball   (10.10.2008 в 14:46)
 

Может заголовок поможет?
<?
header
("Content-type: application/x-rar-compressed");
Только его нужно в функцию упрятать.

   
 
 автор: sim5   (10.10.2008 в 14:56)   письмо автору
 
   для: Николай2357   (10.10.2008 в 14:52)
 

Какую функцию? Файл отдается прямой ссылкой.

   
 
 автор: Николай2357   (10.10.2008 в 14:59)   письмо автору
 
   для: sim5   (10.10.2008 в 14:56)
 

Ну если не идет прямой, можно криво попробовать...

А .zip не пробовали?

   
 
 автор: sim5   (10.10.2008 в 14:49)   письмо автору
 
   для: hitball   (10.10.2008 в 14:40)
 

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

   
 
 автор: hitball   (10.10.2008 в 15:06)   письмо автору
 
   для: sim5   (10.10.2008 в 14:49)
 

слушайте, а zip, почему-то открывает. Ура хоть этому)
Так это мне что теперь кучу файлов в zip переархивировать?

   
 
 автор: hitball   (10.10.2008 в 15:12)   письмо автору
 
   для: hitball   (10.10.2008 в 15:06)
 

у меня установлен "Денвер3" (Aphach).
А что нужно сделать с ним, чтобы он правильно открывал .rar

   
 
 автор: Николай2357   (10.10.2008 в 15:23)   письмо автору
 
   для: hitball   (10.10.2008 в 15:12)
 

Смешно, я не пользовался этим архивом, а у меня та же история. Попробую докопаться, если найдете - отпишите пожалуйста.

   
 
 автор: Drago   (10.10.2008 в 16:36)   письмо автору
 
   для: hitball   (10.10.2008 в 15:12)
 

Добавьте в файл .htaccess строчку, и все будет скачиваться.
Addtype application/x-rar-compressed .rar

   
 
 автор: Николай2357   (10.10.2008 в 17:04)   письмо автору
 
   для: Drago   (10.10.2008 в 16:36)
 

И Вам спасибо. Это я уже сделал. А вот сам апач как настроить? На хостинге у меня все работает, неужели тоже чере штакес? По крайней мере в моих ничего подобного нету...

   
 
 автор: Drago   (10.10.2008 в 18:59)   письмо автору
 
   для: Николай2357   (10.10.2008 в 17:04)
 

Нужно добавить в файл mime.types строку
application/x-rar-compressed rar

   
 
 автор: Николай2357   (10.10.2008 в 19:08)   письмо автору
 
   для: Drago   (10.10.2008 в 18:59)
 

Так я же написал выше, что не хочет он это кушать... Может в Денвере какие то особенности...

   
 
 автор: sim5   (10.10.2008 в 19:11)   письмо автору
 
   для: Николай2357   (10.10.2008 в 19:08)
 

Видимо что-то в самом Денвере, либо еще что-то необходимо, так как добавление типов в конфиг и миме в Денвере ничего не дает.

   
 
 автор: Drago   (10.10.2008 в 19:25)   письмо автору
 
   для: Николай2357   (10.10.2008 в 19:08)
 

А может, апач нужно перезагрузить?

   
 
 автор: sim5   (10.10.2008 в 19:26)   письмо автору
 
   для: Drago   (10.10.2008 в 19:25)
 

Не поможет :)

   
 
 автор: Drago   (10.10.2008 в 19:45)   письмо автору
 
   для: sim5   (10.10.2008 в 19:26)
 

Почему же?

   
 
 автор: sim5   (10.10.2008 в 19:47)   письмо автору
 
   для: Drago   (10.10.2008 в 19:45)
 

Не знаю :) У меня (да как я понимаю и у автора) в Денвере это не работает. Может Денвера сборка у меня такая, есть в ней некоторые вещи кроме этого, которые тоже не работают.

   
 
 автор: Drago   (10.10.2008 в 19:53)   письмо автору
 
   для: sim5   (10.10.2008 в 19:47)
 

Странно, потому что на моем денвере все заработало после того, как я добавил строку в файл mime.types и перезагрузил денвер.

   
 
 автор: sim5   (10.10.2008 в 20:03)   письмо автору
 
   для: Drago   (10.10.2008 в 19:53)
 

Ну значит проблемы в модуле Апач есть в моей сборке.

   
 
 автор: Николай2357   (10.10.2008 в 20:16)   письмо автору
 
   для: sim5   (10.10.2008 в 20:03)
 

Вот, у меня так заработало:
application/octet-stream        bin dms lha lzh exe class rar r00 r01 r02 r03

   
 
 автор: sim5   (10.10.2008 в 20:42)   письмо автору
 
   для: Николай2357   (10.10.2008 в 20:16)
 

Пробовал - не хочет.

   
 
 автор: Николай2357   (10.10.2008 в 21:05)   письмо автору
 
   для: sim5   (10.10.2008 в 20:42)
 

Ну дык переставьте Денвер, дело недолгое. Видимо у Вас версия битая, я видел, что проблемы и в других местах...

   
 
 автор: sim5   (10.10.2008 в 21:57)   письмо автору
 
   для: Николай2357   (10.10.2008 в 21:05)
 

Зато в других местах работает, переставим, придет еще время ;-)

   
 
 автор: sim5   (10.10.2008 в 15:19)   письмо автору
 
   для: hitball   (10.10.2008 в 15:06)
 

Ой нет, при rar-архиве будет переход на страницу и вывод этого файла в окно (если запрос с сервера). Его можно только забрать как объект.

   
 
 автор: sim5   (10.10.2008 в 15:23)   письмо автору
 
   для: hitball   (10.10.2008 в 15:06)
 

Можно отдавать файл не по прямой ссылке, а через скрипт.

   
 
 автор: hitball   (10.10.2008 в 15:32)   письмо автору
 
   для: sim5   (10.10.2008 в 15:23)
 

doc, xls - сохраняются, djvu - открываются.
а что делать таки с rar, где скрипт подсмотреть?

   
 
 автор: Николай2357   (10.10.2008 в 15:42)   письмо автору
 
   для: hitball   (10.10.2008 в 15:32)
 

Вы сильно не переживайте, на хостинге наверняка все правильно настроено. А я все равно докопаюсь.
Странно, апач application/x-rar-compressed rar кушать не хочет, может что не так?
пойду на форум про апач...

   
 
 автор: hitball   (10.10.2008 в 15:47)   письмо автору
 
   для: Николай2357   (10.10.2008 в 15:42)
 

спасибо за участие)

   
 
 автор: Николай2357   (10.10.2008 в 15:55)   письмо автору
 
   для: hitball   (10.10.2008 в 15:47)
 

Вот пока, чтоб не стопориться, в начало Вашего скрипта пропишите это:
<?
if(isset($_GET['p']))$p $_GET['p'];else $p null;
if(
$p){
header("Content-type: application/x-rar-compressed");
echo 
file_get_contents($p);
exit();
}
?> 
а ссылку сделайте так:
<?
"<a style='font-size:12px; color:#cc0000' href='?p=".$myrow['link']."'>Скачать: </a>"
а потом уберете.
В принципе, можно скрипт не останавливать, если других заголовков нет. Или сессий...

   
 
 автор: sim5   (10.10.2008 в 16:03)   письмо автору
 
   для: Николай2357   (10.10.2008 в 15:55)
 

И добавить:
<?
header
("Content-Length: ".filesize("Имя файла"));
header("Content-Disposition: attachment; filename=Имя файла");
header("Content-type: application/rar");
fpassthru($f);

   
 
 автор: Николай2357   (10.10.2008 в 16:29)   письмо автору
 
   для: sim5   (10.10.2008 в 16:03)
 

Спасибо, но проблема не в том. Проблема - как апач настроить, чтоб он rar не исполнял...

   
 
 автор: sim5   (10.10.2008 в 18:26)   письмо автору
 
   для: Николай2357   (10.10.2008 в 16:29)
 

По идее, нужно добавить в конфиг Апач: AddType application/x-rar-compressed .rar
Но не работает, у меня по крайней мере, попробуйте у себя.

   
 
 автор: sim5   (10.10.2008 в 15:58)   письмо автору
 
   для: Николай2357   (10.10.2008 в 15:42)
 

Расширение rar вообще не значится среди типов в Апач.

   
 
 автор: Николай2357   (10.10.2008 в 15:59)   письмо автору
 
   для: sim5   (10.10.2008 в 15:58)
 

Вот вот. А как тогда?

   
 
 автор: hitball   (10.10.2008 в 16:02)   письмо автору
 
   для: Николай2357   (10.10.2008 в 15:59)
 

http://softtime.ru/forum/read.php?id_forum=1&id_theme=37589.

   
 
 автор: sim5   (10.10.2008 в 15:52)   письмо автору
 
   для: hitball   (10.10.2008 в 15:32)
 

Я вам давал ссылку - как отдавать файл на скачивание через скрипт, а не по прямой ссылке.

   
 
 автор: hitball   (10.10.2008 в 22:23)   письмо автору
 
   для: sim5   (10.10.2008 в 15:52)
 

Николай2357 и sim5, спасибо Вам огромное за советы, но я наврядли пока разберусь со всеми этими кодами (в голове - целина непаханая), так, что пока просто поменяю во всех файлах расширение с rar на zip. Грустно конечно.
Но теперь нашла еще одну ошибку: не работает счетчик закачек.
Это переделаный 2-й файл - download.php
<title>Обратно</title>
<? 
include ("blocks/bd.php");
if (isset(
$_POST['id'])) 
{
$id $_POST['id'];}
else {
exit(
'Вы ошиблись при наборе адреса странички');
}
$result mysql_query("SELECT zaka,link FROM books WHERE id='$id'",$db);
if (!
$result
{
echo 
"<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (
mysql_error());
}
if (
mysql_num_rows($result) > 0)
{
$myrow mysql_fetch_array($result);

$link $myrow ['link'];
$zaka $myrow ['zaka'];
$new_zaka $myrow ['zaka'] + 1;

 
$update mysql_query("UPDATE books SET zaka = '$new_zaka' WHERE id='$id'",$db);
if (
$update)
{
echo 
"<html><head>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=
$link'>
</head></html>"
;
exit();
}
}
else
{
echo 
"<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>

В коде:
zaka - это колечество закачек.
Мне кажется где-то в первом файле (приведен первым наверху) - view_books.php,
я пропустила место где указывается ссылка на файл download.php и подскажите пожалуйста, как ее правильно оформить.

   
 
 автор: Николай2357   (11.10.2008 в 02:17)   письмо автору
2.8 Кб
 
   для: hitball   (10.10.2008 в 22:23)
 

Вот, не мучайтесь. Не надо менять расширение. ===================================================================>

Все будет работать. Сейчас гляну, что там с закачками.

Ну вот так попробуйте. Я не тестировал правда, слишком муторно. Если не пойдет, выкладывайте всё, вместе с SQL, я поставлю и попробую разобраться.

   
 
 автор: sim5   (11.10.2008 в 05:59)   письмо автору
 
   для: Николай2357   (11.10.2008 в 02:17)
 

Вы так и оставили свой код скачивания, ну а что будет сохранять пользователем у себя в таком случае? Ну это ведь не так лучше, как и переименовать rar в zip.

   
 
 автор: hitball   (11.10.2008 в 09:30)   письмо автору
 
   для: sim5   (11.10.2008 в 05:59)
 

Доброе утро)
Не поняла ваш вопрос.>Вы так и оставили свой код скачивания, ну а что будет сохранять пользователем у себя в таком случае? Ну это ведь не так лучше, как и переименовать rar в zip.

   
 
 автор: Николай2357   (11.10.2008 в 09:56)   письмо автору
2.9 Кб
 
   для: hitball   (11.10.2008 в 09:30)
 

1. Найдите файл mime.types Он находится по адресу Z:\usr\local\apache\conf
2. Откройте его в редакторе.
3. Найдите строчку application/octet-stream bin dms lha lzh exe class so dll dmg
4. Замените ее на application/octet-stream bin dms lha lzh exe class so dll dmg rar r00 r01 r02 r03
5. Сохраните файл.
6. Перезапустите Денвер.
Теперь у Вас rar файлы должнны обрабатываться корректно.

Ну а вот это уже конечный вариант, правда повторюсь - не тестировал.

   
 
 автор: hitball   (11.10.2008 в 10:12)   письмо автору
 
   для: Николай2357   (11.10.2008 в 09:56)
 

спасибо за разжеваный материал)))
Но не помогло

   
 
 автор: Николай2357   (11.10.2008 в 10:22)   письмо автору
2.9 Кб
 
   для: hitball   (11.10.2008 в 10:12)
 

Странно, и очень жаль.
Ну тогда так.

   
 
 автор: hitball   (11.10.2008 в 10:31)   письмо автору
 
   для: Николай2357   (11.10.2008 в 10:22)
 

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

   
 
 автор: Николай2357   (11.10.2008 в 10:34)   письмо автору
 
   для: hitball   (11.10.2008 в 10:31)
 

Все, терпение лопнуло. Давайте все в аттач. Вместе с SQL.

   
 
 автор: hitball   (11.10.2008 в 10:37)   письмо автору
 
   для: Николай2357   (11.10.2008 в 10:34)
 

только не смейтесь!
я не знаю что такое аттач

   
 
 автор: Николай2357   (11.10.2008 в 10:42)   письмо автору
 
   для: hitball   (11.10.2008 в 10:37)
 

Аттач, это файл прикрепленный. От слова attach (прикреплять).
А SQL знаете как сделать?

   
 
 автор: hitball   (11.10.2008 в 10:45)   письмо автору
 
   для: Николай2357   (11.10.2008 в 10:42)
 

Нет, спасибо за то, что возитесь со мной

   
 
 автор: Николай2357   (11.10.2008 в 10:51)   письмо автору
 
   для: hitball   (11.10.2008 в 10:45)
 

Благодарить будете, когда все заработает, а так может зря...
Что бы сделать .sql файл Вашей базы, в PHPmyadmin выбирете базу и нажмите сверху ссылку "экспорт" Потом внизу "пошел" по моему. Сохраните в крневую деррикторию сайта. Зазипуйте весь сайт и в студию(в аттач). Будем просить помощь зала.
PS Забыл, нужно еще поставить галочку, там где предлагается zip сделать...

   
 
 автор: hitball   (11.10.2008 в 10:57)   письмо автору
5.9 Кб
 
   для: Николай2357   (11.10.2008 в 10:51)
 

Вроде бы так

   
 
 автор: Николай2357   (11.10.2008 в 11:17)   письмо автору
 
   для: hitball   (11.10.2008 в 10:57)
 

Не. я так до второго пришествия не разберусь. Весь сайт надо, с шапками, формами и т.д.

   
 
 автор: sim5   (11.10.2008 в 11:05)   письмо автору
 
   для: hitball   (11.10.2008 в 09:30)
 

Если вы сделаете так как предлагал Николай2357, то у пользователя файл будет сохраняться под именем download.php (по имени вашего скрипта обработчика), а также пользователь не будет видеть размер файла. Все это от того, что не передаются все необходимые заголовки. Делайте так, для отдачи файла пользователю скриптом:
<?
//это проверка запроса, что ранее и предлагал вам Николай2357
$p = isset($_GET['p']) ? trim($_GET['p']) : = null
//если запрос пришел
if($p) {
//получаем путь и имя файла
$fp "./path/".$p//где path ваш путь к файлу
//читаем файл
$f fopen($fp'rb');
//передаем заголовки:
//размер файла 
header("Content-Length: ".filesize($p));
//имя файла 
header("Content-Disposition: attachment; filename=$p");
//тип файла 
header("Content-type: application/rar");
//выводим файл пользователю 
fpassthru($f); 
exit(); 

?>

Теперь проверьте, и в окне загрузки посмотрите разницу, что было "до" и что "теперь" )

   
 
 автор: Николай2357   (11.10.2008 в 11:18)   письмо автору
 
   для: sim5   (11.10.2008 в 11:05)
 

Да я переделал уже, все равно что то не так.

   
 
 автор: Николай2357   (11.10.2008 в 11:21)   письмо автору
 
   для: sim5   (11.10.2008 в 11:05)
 

.

   
 
 автор: sim5   (11.10.2008 в 11:23)   письмо автору
 
   для: Николай2357   (11.10.2008 в 11:21)
 

А, ну я вчера (это у меня означает сегодня. но рано утром:) смотрел, когда еще было на то, на это и ответил ;-)

   
 
 автор: Николай2357   (11.10.2008 в 09:41)   письмо автору
 
   для: sim5   (11.10.2008 в 05:59)
 

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

   
 
 автор: hitball   (11.10.2008 в 11:20)   письмо автору
 
   для: Николай2357   (11.10.2008 в 09:41)
 

УРРРРРРРРРРРРРРРРРРРААААААААААААА!!!!
rar скачался!!!
какое счастье!!!!
Сделала как в примере Николая и все получилось))) (Поменяла ссылку и вставила код наверху)
Огромное человеческое СПАСИБИЩЕ!!!

   
 
 автор: hitball   (11.10.2008 в 11:22)   письмо автору
 
   для: hitball   (11.10.2008 в 11:20)
 

Блин, а счетчик закачек так и не работает

   
 
 автор: sim5   (11.10.2008 в 11:25)   письмо автору
 
   для: hitball   (11.10.2008 в 11:22)
 

SET zaka = '$new_zaka' - у вас что поле zaka имеет строковый тип?

   
 
 автор: hitball   (11.10.2008 в 11:33)   письмо автору
 
   для: sim5   (11.10.2008 в 11:25)
 

тип поля int

   
 
 автор: Николай2357   (11.10.2008 в 11:43)   письмо автору
 
   для: hitball   (11.10.2008 в 11:33)
 

Залейте всё сюда, так проще разобраться, когда тестировать можно. Давно бы все работало.

   
 
 автор: sim5   (11.10.2008 в 11:43)   письмо автору
 
   для: hitball   (11.10.2008 в 11:33)
 

Тогда нет необходимости поступать так как это делаете вы - извлекаете значение поля закачек, добавляете к нему единицу и записываете опять в базу. Это можно сделать непосредственно в запросе:
<?
mysql_query
("UPDATE books SET zaka = zaka+1 WHERE id='$id'",$db);

Без всякого предварительного извлечения этого значения из базы. Если у вас не происходит обновление, то проверьте, получаете ли вы перменную $id, то есть, есть ли она у вас в строке запроса.
Но заметьте - тогда, если ID у вас есть в строке запроса, то нет смысла выставлять имя файла для скачавния в строку запроса, достаточно этого ID. Вы ведь все равно получаете путь/имя к файлу, а значит это уже 50% для того, чтобы отказаться от скачавания по прямой ссылке - сделайте ее на 100% скриптом, и удалите имя файла из строки запроса как параметр. Кстати, в таблице желательно иметь только имя файла, а вот путь к нему, лучше держать в файле конфигурации или таблице конфигурации.

   
 
 автор: hitball   (11.10.2008 в 11:53)   письмо автору
 
   для: sim5   (11.10.2008 в 11:43)
 

сделала как вы сказали, но мне кажется где-то в первом файле (приведен первым наверху) - view_books.php, я пропустила место где указывается ссылка на файл download.php и в этом ошибка, наверное.

   
 
 автор: sim5   (11.10.2008 в 12:06)   письмо автору
 
   для: hitball   (11.10.2008 в 11:53)
 

Сейчас трудно судить, что на данный момент у вас в ссылке есть, с учетом того, что вам предлагал Николай, и что вы могли изменить. Но, ваша ссылка, должна иметь в конечном итоге вид, типа:
<a href="paht/download.php?vars...">Скачать: </a>

где vars..., это список параметров. Для того чтобы обновить счетчик скачиваний, вам нужно передать номер id записи, а также, если вы по прямой ссылке отдаете файл, или скриптом, но по имени файла, передать имя этого файла. Значит у вас доложно выглядеть примерно так:
<a href="paht/download.php?id=15&p=name.rar">Скачать: </a>

Вот тут вам нужно решить - либо так и оставить, либо удалить из запроса p=name.rar, и все определять по id=номер. Другими словами - вы производите лишнюю операцию.

PS. Уберите все стили определенные в тегах, укажите элементам классы, и перенесите все стили в CSS файл, это вам облегчит "жизнь верстальщика" и разгрузит код страницы. К тому же, избавитесь от бесчисленных &nbsp; в коде - все это можно решить стилями.

   
 
 автор: Николай2357   (11.10.2008 в 12:29)   письмо автору
2.8 Кб
 
   для: hitball   (11.10.2008 в 11:53)
 

A зачем как наверху, я же Вам поправил. Только проверить не смог.
<?  
printf 
(
<p class='view_title'>%s</p> 
<p class='lesson_left'><span class='lesson_add'>Автор: %s</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<span class='lesson_add'>Дата добавления: %s</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class='lesson_add'>Просмотров: %s</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<span class='lesson_add'>Размер: %s</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<span class='lesson_add'>Закачек: %s</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<span class='lesson_add'><a style='font-size:12px; color:#cc0000' href='download.php?id=%s'>Скачать: </a></span></p><p class='lesson_left'>%s</p>"
,$myrow["title"],$myrow["author"],$myrow["date"],$myrow["view"],$myrow["size"],$myrow["zaka"],$myrow["id"],$myrow["text"]);  
?> 
И donload.php тоже. Вот так попробуйте.(аттач)
Только не понятно, зачем $_POST['score']... Количество закачек будет изменяться, если оцкнку нажать.

   
 
 автор: sim5   (11.10.2008 в 12:32)   письмо автору
 
   для: Николай2357   (11.10.2008 в 12:29)
 

А как оценка с количеством закачек связана? :) Пользователь может скачать сегодня, а оценить завтра, или вообще не дать оценку. "Развязать" надо это дело )

   
 
 автор: hitball   (11.10.2008 в 12:51)   письмо автору
 
   для: sim5   (11.10.2008 в 12:32)
 

Отлучюсь на пару часов, приеду - буду разгребать

   
 
 автор: Николай2357   (11.10.2008 в 12:51)   письмо автору
 
   для: hitball   (11.10.2008 в 11:53)
 

Там все гораздо прозаичней, можно и не закачивать ничего, просто оценку нажать и будет +1.
Вот в начало download.php добавьте это:
<?
if (isset($_POST['submit']))$submit 1;else $$submit null;
а ниже вот так:
<?
if(!$submit)$zaka ", zaka = zaka+1";
$update mysql_query("UPDATE books SET rating = '$new_rating', q_vote = q_vote+1 $zaka WHERE id='$id'",$db);
и будет щастье.

   
 
 автор: hitball   (11.10.2008 в 18:54)   письмо автору
 
   для: Николай2357   (11.10.2008 в 12:51)
 

Переделаный файл download.php выглядит так, но счетчик закачек все равно не считает. А поле $_POST['score'] - это, уж извените меня за невнимательность, относится к другому файлу, который я создавала из этого, тот файл отвечает за рейтинг книги и количество проголосовавших.
В новом варианте я его удалила.


<title>Обратно</title>
<? 
include ("blocks/bd.php");
<? 
//это проверка запроса, что ранее и предлагал вам Николай2357 
$p = isset($_GET['p']) ? trim($_GET['p']) : = null;  
//если запрос пришел 
if($p) { 
//получаем путь и имя файла 
$fp "./path/".$p//где path ваш путь к файлу 
//читаем файл 
$f fopen($fp'rb'); 
//передаем заголовки: 
//размер файла  
header("Content-Length: ".filesize($p)); 
//имя файла  
header("Content-Disposition: attachment; filename=$p"); 
//тип файла  
header("Content-type: application/rar"); 
//выводим файл пользователю  
fpassthru($f);  
exit();  
}  
if (isset(
$_POST['submit']))
$submit 1;
else $
$submit null;
if (isset(
$_POST['id'])) 
{
$id $_POST['id'];}
else {
exit(
'Вы ошиблись при наборе адреса странички');
}

$result mysql_query("UPDATE books SET link, zaka = zaka+1 WHERE id='$id'",$db);

if (!
$result
{
echo 
"<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (
mysql_error());
}
if (
mysql_num_rows($result) > 0)
{
$myrow mysql_fetch_array($result);

$link $myrow ['link'];

if(!
$submit)
$zaka ", zaka = zaka+1"
$update mysql_query("UPDATE books $zaka WHERE id='$id'",$db);

if (
$update)
{
echo 
"<html><head>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=
$link'>
</head></html>"
;
exit();
}
}
else
{
echo 
"<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>

   
 
 автор: sim5   (11.10.2008 в 19:12)   письмо автору
 
   для: hitball   (11.10.2008 в 18:54)
 

Ну подумайте сами. Обращение к этой странице просиходит только тогда, когда пользователь будет делать запрос на скачивание файла, а это в свою очередь присходит по ссылке, то есть GET запросом. От куда в это время взяться POST запросу, по которому вы определяете закачку? Получается, что вот это:

if (isset($_POST['submit']))
$submit = 1;
else $$submit = null;
if (isset($_POST['id']))
{$id = $_POST['id'];}
else {
exit('Вы ошиблись при наборе адреса странички');
}

$result = mysql_query("UPDATE books SET link, zaka = zaka+1 WHERE id='$id'",$db);

if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);

$link = $myrow ['link'];

if(!$submit)
$zaka = ", zaka = zaka+1";

у вас лишнее на странице. Просто вам надо в url тега А, по которому идет запрос файла на скачивание, добавить этот GET параметр, например pid=номер_записи_из_базы.
Тогда сразу после скачивания в запросе на оновление счетчика:

$update = mysql_query("UPDATE books SET zaka = zaka+1 WHERE id=".intval($_GET['pid]),$db);

Я ведь об этом вам еще ранее говорил. И в записи:
$fp = "./path/".$p; //где path ваш путь к файлу
path - это как пример, вы должны заменить это на ваш реальный адрес. Вы получаете путь и адрес из базы как я понимаю, значит лучше бы было брать тогда его, а имя получать из него как basename(тут ваш путь из таблицы), и тогда имя файла в ссылку можно было не втсалять, а работать по ID. Впрочем это я опять по кругу пошел :)

   
 
 автор: Николай2357   (11.10.2008 в 20:27)   письмо автору
 
   для: hitball   (11.10.2008 в 18:54)
 

Вот не слушает меня упрямь человек. Ну я же сделал все, там работать должно на ура. И файла два не надо на рейтинги и закачки. Я же вот это написал,
<?$update mysql_query("UPDATE books SET rating = '$new_rating', q_vote = q_vote+1 $zaka WHERE id='$id'",$db); а
Вы кастрировали. И sсore оставьте на месте. Этот файл и то и другое сделает. И не трогайте (int) а то поломают Ваш сайт хацкеры к чертовой бабушке.
Вот в общем, так примерно:
<?  
include ("blocks/bd.php");

 
if (isset(
$_POST['score']))  
$score = (int)$_POST['score'];else $score null;

if (isset(
$_POST['id']))$id = (int)$_POST['id']; elseif (isset($_GET['id'])) $id =(int)$_GET['id']; else $id null;
if (isset(
$_POST['submit']))$submit 1;else $submit null;
$result mysql_query("SELECT rating,q_vote,zaka,link FROM books WHERE id='$id'",$db); 
if (!
$result)  

echo 
"<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>"
exit (
mysql_error()); 

if (
mysql_num_rows($result) > 0

$myrow mysql_fetch_array($result); 
$link $myrow ['link']; 
$new_rating $myrow['rating'] + $score
if(
$submit)$zaka "rating = '$new_rating', q_vote = q_vote+1"; else $zaka " zaka = zaka+1";
$update mysql_query("UPDATE books SET  $zaka WHERE id='$id'",$db);
if (
$update && !$submit

// Вот сюда можете поставить вариамт от sim5, хотя и этот работает
header("Content-type: application/x-rar-compressed");
header("Content-Length: ".filesize($link); 
header("Content-Disposition: attachment; filename=$link"); 
header("Content-type: application/rar"); 
echo 
file_get_contents($link);
exit(); 
}elseif(
$update){
header("Location: view_books.php");


else 

echo 
"<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>"
exit(); 

?>


PS Да, кстати, форму оценки в view_books.php переделайте так:
<form action="download.php" method="post" name="vv">
и файл vote_res_books.php совсем Вам не нужен будет.

   
 
 автор: hitball   (12.10.2008 в 13:14)   письмо автору
 
   для: Николай2357   (11.10.2008 в 20:27)
 

Это снова я.
Хочу поблагодарить за Ваше время потраченное на решение моих проблем. Все заработало. Спасибо профессионалам за советы, без Вас бы не справилась так быстро, если бы вообще справилась.
Все прекрастно - счетчик заработал, скачивание идет, но скачивание файлов возможно только с моего сайта, с данной папки (books).
А хотелось бы, чтобы скачивание шло еще и при ссылке на rapide или другой файлообменник.
Когда же нажимаю на скачивание с подобной ссылкой, то скачиваться начинает файл с именем download.rar, которого нет и в помине. Подскажите, пожалуйста, этот последний момент.

   
 
 автор: Николай2357   (12.10.2008 в 13:31)   письмо автору
 
   для: hitball   (12.10.2008 в 13:14)
 

>Спасибо профессионалам за советы,
Ну мне еще до профессионала.... огого! :)))
>А хотелось бы, чтобы скачивание шло еще и при ссылке на rapide или другой файлообменник.
Когда же нажимаю на скачивание с подобной ссылкой, то скачиваться начинает файл с именем download.rar,

Вот это место поподроюнее. Как я понял, у Вас в базе ссылки не только на Ваши файлы?

   
 
 автор: hitball   (12.10.2008 в 13:32)   письмо автору
 
   для: Николай2357   (12.10.2008 в 13:31)
 

ну да, надо было сразу это сказать, да?
И еще заметила, что при нажатии на оценить вторую статью, вылазит первая статья и не ставится оценка. А при оценке первой - она и остается и ставится оценка.

   
 
 автор: Николай2357   (12.10.2008 в 14:03)   письмо автору
 
   для: hitball   (12.10.2008 в 13:32)
 

А ссылки на Ваши файлы относительные или абсолютные? (http:// в них есть?) :)))
>И еще заметила, что при нажатии на оценить вторую статью, вылазит первая статья и не ставится оценка. А при оценке первой - она и остается и ставится оценка.
и вот это место поподробней, что за вторая статья?

   
 
 автор: hitball   (12.10.2008 в 14:07)   письмо автору
 
   для: Николай2357   (12.10.2008 в 14:03)
 

1. http - есть.

2. >>И еще заметила, что при нажатии на оценить вторую статью, вылазит первая статья и не ставится оценка. А при оценке первой - она и остается и ставится оценка.

У меня 2 статьи (пока:)).
Когда я нажимаю на оценить вторую статью, вылазит страница с первой статьей и не ставится оценка.
А при оценке первой - все правильно и оценка ставится.

   
 
 автор: Николай2357   (12.10.2008 в 14:23)   письмо автору
 
   для: hitball   (12.10.2008 в 14:07)
 

>1. http - есть.
Это хуже.
Тут два варианта. Либо отдавать файлы всё таки прямой ссылкой, тогда Вам нужно сервер до ума довести. Либо писать в базу свои файлы без http://, то есть относительный путь,
допустим так: books/vash_fail.rar
Тогда я напишу вариант.
А про статьи не понятно. Давайте подробнее. Что за статьи и откуда беруться. Может там опять камень подводный...

   
 
 автор: hitball   (12.10.2008 в 14:39)   письмо автору
 
   для: Николай2357   (12.10.2008 в 14:23)
 

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

   
 
 автор: Николай2357   (12.10.2008 в 15:23)   письмо автору
 
   для: hitball   (12.10.2008 в 14:39)
 

Не расстраивайтесь, бывает хуже.
Ничего сложного нет, и даже так будет правильней, но у Вас работать не будет, так как сервер вы домашний не настроили..
Вот это место:
<?
// Вот сюда можете поставить вариамт от sim5, хотя и этот работает 
header("Content-type: application/x-rar-compressed"); 
header("Content-Length: ".filesize($link);  
header("Content-Disposition: attachment; filename=$link");  
header("Content-type: application/rar");  
echo 
file_get_contents($link);
замените на это;
<?
header
("Location: $link");
и все будет хокей. Вы оставьте пока первый вариант, а когда на хостинг будете заливать, поставьте это.
А со "статьями" дошло наконец то. Моё упущение. Сделайте так:
<?
elseif($update){ 
header("Location: view_books.php?id=".$id);

   
 
 автор: hitball   (12.10.2008 в 16:26)   письмо автору
 
   для: Николай2357   (12.10.2008 в 15:23)
 

Нет, ну вы точно гениальный!!!
Все заработало: "статьи" не прыгают, оценка ставится, а самое главное - идет закачка с рапиды!!!
СПАСИБИЩЕ!!! ОГРОМНОЕ, бесконечно большущее СПАСИБИЩЕ!!!

   
 
 автор: Николай2357   (12.10.2008 в 16:48)   письмо автору
 
   для: hitball   (12.10.2008 в 16:26)
 

Приятно нубу слышать такие слова. Обращайтесь :)))

   
 
 автор: hitball   (12.10.2008 в 21:15)   письмо автору
 
   для: Николай2357   (12.10.2008 в 16:48)
 

Это Вам спасибо!

   
Rambler's Top100
вверх

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