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

Форум PHP

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

 

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

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

тема: Вопрос насчёт гостевой книге
 
 автор: Axxil   (26.07.2004 в 10:32)   письмо автору
 
 

У меня на локальной машине ваша гостевая работает отлично, файлы записываются всё нормально в каталог /records.
Но когда закачал на сервер выдаёт информацию о ошибках. Похоже почему-то не могут записаться файлы.
Если не сложно не могли бы вы посмотреть. В чём может быть проблема?
http://www.kvnkgu.fatal.ru/forum/forum.php

   
 
 автор: cheops   (26.07.2004 в 10:59)   письмо автору
 
   для: Axxil   (26.07.2004 в 10:32)
 

Судя по всему права доступа на папку records выставлены таким образом, что скрипт не имеет права записывать в неё что-либо.

   
 
 автор: Axxil   (26.07.2004 в 11:08)   письмо автору
 
   для: cheops   (26.07.2004 в 10:59)
 

И чего теперь делать?

   
 
 автор: Artem S.   (26.07.2004 в 11:39)   письмо автору
 
   для: Axxil   (26.07.2004 в 11:08)
 

Измени chmod папки records на 777

Можешь это сделать через FTP клиент.

   
 
 автор: Axxil   (26.07.2004 в 12:01)   письмо автору
 
   для: Artem S.   (26.07.2004 в 11:39)
 

А нельзя ли подробнее что такое , права доступа, chmod, и как их настроить через FTP клиент. (я использую FileZilla)

   
 
 автор: Artem S.   (26.07.2004 в 12:17)   письмо автору
 
   для: Axxil   (26.07.2004 в 12:01)
 

chmod это и есть права.
Чтоб изменить chmod надо:
- происоединится к серверу через FTP клиент
- Стукнуть правой кнопкой мыши по папку recods
- Выбрать CHMOD и поставить все 9 галочек или ввести 777

   
 
 автор: Axxil   (26.07.2004 в 13:31)   письмо автору
 
   для: Artem S.   (26.07.2004 в 12:17)
 

Агромадное, человеческое спасибо! Всё работает.

   
 
 автор: Karum   (20.12.2005 в 21:35)   письмо автору
 
   для: Artem S.   (26.07.2004 в 12:17)
 

Дякую вам! І мені допомогло)))))))))

   
 
 автор: Axxil   (26.07.2004 в 13:36)   письмо автору
 
   для: Axxil   (26.07.2004 в 10:32)
 

И ещё вопрос туда же. Как лучше добавить к коду гостевой штучку которая удаляла бы самые старые файлы сообщений. Т.е. чтобы кол-во сообщений в гостевой было максиму например 50.

   
 
 автор: cheops   (26.07.2004 в 14:17)   письмо автору
 
   для: Axxil   (26.07.2004 в 13:36)
 

Хм... а действительно штука полезная. Этого можно добиться вставив следующий код в файле addrec.php после строчки 107 (закрытие файла - fclose($file);)
<?php
  
// Открываем директорию records
  
$dir opendir("records");
  while((
$file readdir($dir)))
  {
    
// Помещаем названия файлов в массив $array_file[]
    
if(is_file("records/$file")) $array_file[] = $file;
  }
  
// Проверяем количество файлов в директории
  
if(count($array_file)>50)
  {
    
// Производим обратную сортировку массива
    
@rsort($array_file);
    
// Удаляем лишние файлы
    
for($i=50$i<count($array_file); $i++) unlink("records/".$array_file[$i]);
  }
  
// Закрываем директорию 
  
closedir($dir);
?>

   
 
 автор: Artem S.   (26.07.2004 в 14:48)   письмо автору
 
   для: cheops   (26.07.2004 в 14:17)
 

Раз тут принимаются заявки на расширение функций гостевой : ) можно и от меня заявку. Как заставить посылать письмо о каждом новом сообщении? Конечно если это не будит слишком сложно для вас.

   
 
 автор: cheops   (26.07.2004 в 15:18)   письмо автору
 
   для: Artem S.   (26.07.2004 в 14:48)
 

Хм... ну у файловой гостевой нет админа, а так, каждое Web-приложение, сопровождается фразой:

Если у вас не работает это Web-приложение, вы всегда можете найти помощь по его установке и настройке на нашем форуме http://www.softtime.ru/forum/ Возможно вам также потребуется дополнительная функциональность, в этом случае Вы также можете посетить наш форум и выссказать свои предложения. Если Ваше предложение действительно актуально и интересно, мы доработаем приложение с учетом Ваших пожеланий.

Так что, заявки приветствуются :)))
На самом деле, это уже реализовано в гостевой книге на MySQL, пожалуй, действительно следует добавить предложенную Axxil фичу и отправку на e-mail, как в варианте на MySQL.

Если вы не хотите ждать новой версии, вы можете самостоятельно портировать эту особенность из гостевой книги на MySQL, для этого в конфигурационном файле config.php следует добавить строчки:
<?php
    
// Отпрвлять письмо на e-mail при добавлении нового сообщения
    // в гостевую книгу? Для включения данного сервиса исправте на true
    
$sendmail true;
    
// em-mail на который следует отправлять сообщение
    
$valmail "mymail@mail.ru";
?>

А после 107 строчки addrec.php, перед редиректом на главную страницу:
<?php
        
// Если в конфигурационном файле $sendmail = true отправляем уведомление
        
if($sendmail)
        {
          
$thm "guestbook - a new post";
          
$msg "post: $msg\nname: $name";
          
mail($valmail$thm$msg);
        }
?>

   
 
 автор: Axxil   (27.07.2004 в 16:18)   письмо автору
 
   для: Axxil   (26.07.2004 в 10:32)
 

Ещё одно предложение можно?
ИМХО было бы не плохо сделать вместо ссылок предыдущая следующая номера страниц гостевой книги. Чтобы пользовательмог сразу попасть на нужную страницу...
Я у себя сделал ;)))

   
 
 автор: cheops   (27.07.2004 в 22:07)   письмо автору
 
   для: Axxil   (27.07.2004 в 16:18)
 

Поделимся ;)))?

   
 
 автор: Axxil   (28.07.2004 в 10:05)   письмо автору
 
   для: cheops   (27.07.2004 в 22:07)
 

Конечно!
Не гарантирую что лучшее решение, но главное рабочее.
Всё начинается после сортировки файлов гостевой книги.
<?php
@rsort($names);  

  
$count $i;
  
$numpages=floor($count/MESSONPAGE);// определяем кол-во страниц.
  // MESSONPAGE заранее определёная константа, 
//определяющая кол-во сообщений на странице.
  
if (empty($start))
  {
    
$start 0;
  }
  if (
$start 0)
  {
    
$start 0;
  } 
  

  print 
"<div align='right'> Страницы" ;
// выводим в цикле номера страниц с сылками на эти страницы.
   
for ($i=1;$i<=$numpages;$i++)
    {
      print 
"[<A  href=forum.php?start=".MESSONPAGE*($i-1).">".$i."</A>]";       
    }
  print 
"</div>";
  
  print 
"<div align='center'> Страница ".(floor($start/MESSONPAGE)+1). "</div>";



   for (
$i $start$i $start+MESSONPAGE$i++)
?>

И далее по коду...

   
 
 автор: cheops   (28.07.2004 в 10:27)   письмо автору
 
   для: Axxil   (28.07.2004 в 10:05)
 

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

   
 
 автор: Axxil   (28.07.2004 в 10:09)   письмо автору
 
   для: Axxil   (27.07.2004 в 16:18)
 

И сразу вопросик.
У меня в гостевой книге в поле ввода сообщения изначально стоит 2 строки пробелов.
Не подскажете как от них можно избавиться, а то нигде ответ найти не могу.

   
 
 автор: cheops   (28.07.2004 в 10:25)   письмо автору
 
   для: Axxil   (28.07.2004 в 10:09)
 

В коде страницы тэг <textarea> у вас выглядит следующим образом:
    <tr>
      <td colspan=2>Сообщение:<br>
        <textarea cols=50 rows=8 name=msg>
         
        </textarea>
      </td>
    </tr>

Если сгенерировать этот кусок HTML-страницы следующим образом - строки пропадут:
<tr>
      <td colspan=2>Сообщение:<br>
        <textarea cols=50 rows=8 name=msg></textarea>
      </td>
    </tr>

   
 
 автор: Axxil   (28.07.2004 в 10:29)   письмо автору
 
   для: cheops   (28.07.2004 в 10:25)
 

Ха, точно точно. А ларчик просто открывался...
Спасибо.

   
 
 автор: Axxil   (28.07.2004 в 10:40)   письмо автору
 
   для: Axxil   (26.07.2004 в 10:32)
 

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

   
 
 автор: cheops   (28.07.2004 в 10:44)   письмо автору
 
   для: Axxil   (28.07.2004 в 10:40)
 

Страницу администрирования... ну в принципе можно сделать, чем эта гостевая хуже других :). Отпишу свои идеи по этому поводу чуть по-позже...

   
 
 автор: Axxil   (28.07.2004 в 12:11)   письмо автору
 
   для: cheops   (28.07.2004 в 10:44)
 

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

   
 
 автор: Кузнецов М.В.   (28.07.2004 в 14:08)   письмо автору
 
   для: Axxil   (28.07.2004 в 12:11)
 

В странице администрирования обычно присутсуют следующие возможности:
- редактирования сообщений
- скрытия сообщений (с последующей возможностью отображения)
- удаление сообщений
- ответ администратора на сообщение
Вот в принципе и все, наверное. Это то, что находится у нас на странице администрирования в гостевой на mysql.
Можно еще добавить выставление количества сообщений, выводимых на страницу... Если в гостевой планируется реализация отправки уведомлений на почту, соответсвенно в странице администрирования должна быть предусмотрена возможность выставления адресов, на которые это уведомление отправляется.
----------------
У нас на странице администрирования все просто: выводятся все сообщения и около каждого стоят ссылки: Редактировать, Скрыть, Удалить. По ссылке "Редактировать" открывается страница редактирования, на которой можно как отредактировать сообщение посетителя, так и ответить на него. При нажатии ссылки "Скрыть" сообщение не удаляется физически, а просто не показывается на сайте, а в системе администрирования около этого сообщения ссылка "Скрыть" заменяется на ссылку "Отобразить". Ну а по ссылке удалить происходит физическое удаление сообщения.


http://www.softtime.ru/info/gbmysql.php

   
 
 автор: cheops   (28.07.2004 в 18:18)   письмо автору
 
   для: Axxil   (28.07.2004 в 10:40)
 

Можно в отдельной папке (пусть admin) поместить файл гостевой index.php (конечно, перед каждым обращением к records следует добавть "../"). Папку следует запаролить средствами серевера apache.
При выводе каждого из сообщений следует добавить ссылку вида:

// В переменной $entry названия файлов "../records/rec.1091022230"
<a href=delete.php?file=$entry>Удалить</a>

А в файле delete.php удаляем этот файл и перегружаем страницу...
<?php
// Файл delete.php
// Удаляем файл
unlink($_GET['file']);
// Осуществляеме редирект на главную страницу
  
echo "<HTML><HEAD>\n";
  echo  
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>";
  echo 
"</HEAD></HTML>";
?>

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

   
 
 автор: Axxil   (29.07.2004 в 09:34)   письмо автору
 
   для: cheops   (28.07.2004 в 18:18)
 

Ну я сделал примерно также, только для того чтобы нельзя было удалить любой файл с хоста я поставил проверку того что удаляемый файл начинается на rec. Файлы другого вида удалить невозможно...
А как защитить папку средствами apache?

   
 
 автор: glsv (Дизайнер)   (29.07.2004 в 10:30)   письмо автору
 
   для: Axxil   (29.07.2004 в 09:34)
 

В директории Apache/bin есть утилита htpasswd.exe C помошью нее создаем и шифруем пароль.
Пишем так:

htpasswd.exe -cm pass admin

cm - это ключи
pass - имя файла с хэшем пароля
admin - логин для которого будет создан пароль

нажимаем ентер и он попросит ввести пароль 2 раза. Если все правильно, то будет создан файл pass c зашифрованным паролем.

Пароль создали - теперь как защитить директорию:

В защищаемой директории создаем файл .htaccess. В нем пишем:

AuthType Basic  
AuthName admin
AuthUserFile  путь к файл pass 
require valid-user

Здесь написано, что директория запаролена. Хеши паролей для проверки лежат в файле pass.
И доступ разрешен всем пользователям, которые перечислены в этом файле и которые прошли проверку (правильно ввели пароль)

Вот теперь ньюансы:
Путь к файлу pass должен быть абсолютным. От корня сервера. И располагать его надо (если есть такая возможность) на один уровень(директорию) выше чем лежат ваши HTML файлы. Т.е. выше корневой директории сайта - в ту директорию куда нельзя получить доступ посредством браузера.
Ну уж если положить файл выше корневой директории сайта не получается (а это очень рекомендуется), то нужно поставить запрет на любой доступ к этому файлу опять же через .htaccess.

Чтобы посмотреть путь от корня сервера запустите функцию phpinfo() на сервере. Это будет значение переменной doc_root.

   
 
 автор: Axxil   (29.07.2004 в 11:09)   письмо автору
 
   для: glsv (Дизайнер)   (29.07.2004 в 10:30)
 

>В директории Apache/bin есть утилита htpasswd.exe
Наверное есть :)))
Только как до него добраться на реальном сервере.
А то меня дальше корня сайта не пускают :(((

   
 
 автор: glsv (Дизайнер)   (29.07.2004 в 11:37)   письмо автору
 
   для: Axxil   (29.07.2004 в 11:09)
 

Так и не надо на реальном сервере. Я думал у Вас апач локально установлен. Ну если нет, то вот прикладываю в аттач.

   
 
 автор: Andron   (01.08.2004 в 17:24)   письмо автору
 
   для: glsv (Дизайнер)   (29.07.2004 в 10:30)
 

Здравствуйте.
Пожалуйста, если можно, раскажите подробнее о настройках доступа.
Сейчас сайт у меня на локальной машине, doc_root - не выставлен. Как его выставить?

Позднее, думаю поставить сайт на платный хостинг. Вопрос-а там как? Как создать свой файл pass (можно будет сделать локально или на хостинге?).
Каким будет doc_root там? Можно ли там запустить функцию phpinfo()?

Спасибо, жду ответа.

   
 
 автор: glsv (Дизайнер)   (02.08.2004 в 00:53)   письмо автору
 
   для: Andron   (01.08.2004 в 17:24)
 

>Сейчас сайт у меня на локальной машине, doc_root - не выставлен. Как его выставить?

А не надо выставлять. Пиши путь от корня диска, например c:\www\pass
pass - это имя файла

>Как создать свой файл pass (можно будет сделать локально или на хостинге?).
Файл с паролями создаешь локально, а потом переписываешь на сервер. Если есть права писать в директорию выше сайта - прекрасно - пишешь туда. Если нет - бросай куда хочешь. Главное путь правильно прописать.

>Каким будет doc_root там?
Ну прямо там и будет видно. Примерно такого вида:
/pub/home/mysite/

>Можно ли там запустить функцию phpinfo()?
Конечно, создаешь файл пусть так и называется phpinfo.php, пишешь в нем одну функцию:

<?
   phpinfo
();
?>
И вызываешь этот файл.

   
 
 автор: Axxil   (29.07.2004 в 11:13)   письмо автору
 
   для: Axxil   (26.07.2004 в 10:32)
 

И ещё.
Я у себя в гостевой книге сделал смайлики. То есть смайлы теперь у меня графические.
Кому интересно рассказываю. делается это черезвычайно просто.
В файле addrec.php находим фрагмент кода где идёт замена квадратных скобок на соответствующие HTML теги.
Вставляем:
<?php
$msg 
str_replace(":)))","<img src='../images/laugh.gif'  border='0'>",$msg);
    
$msg str_replace(":)","<img src='../images/smile.gif'  border='0'>",$msg);
    
$msg str_replace(":(","<img src='../images/weep.gif'  border='0'>",$msg);
    
$msg str_replace(":[","<img src='../images/bad_evil.gif'  border='0'>",$msg);
?>

Здесь вместо текстового смайлика вставляется графическое изображение.

   
 
 автор: Sonic   (29.07.2004 в 11:15)   письмо автору
 
   для: Axxil   (29.07.2004 в 11:13)
 

Правда сасибо :) Не сталкивался с таким, но припомню :)

   
 
 автор: glsv (Дизайнер)   (29.07.2004 в 11:39)   письмо автору
 
   для: Axxil   (29.07.2004 в 11:13)
 

А можно посмотреть Вашу гостевую? Или еще рано? :)

   
 
 автор: glsv (Дизайнер)   (29.07.2004 в 11:44)   письмо автору
 
   для: glsv (Дизайнер)   (29.07.2004 в 11:39)
 

Вроде нашел сам:)

Это бывшая наша гостевая?! Круто! Сам не узнал :))

   
 
 автор: Axxil   (29.07.2004 в 12:03)   письмо автору
 
   для: glsv (Дизайнер)   (29.07.2004 в 11:44)
 

Спасибо, стараемся с Вашей помощью :)

   
Rambler's Top100
вверх

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