|
|
|
|
|
для: Trianon
(27.07.2007 в 12:49)
| | я с самого начала свой конфиг вместо предложенного поставил, тоже самое было. потом подумал, может я что-то не догоняю и поставил этот - результат один и тот же. еще попробую у себя на хостинге потестить. | |
|
|
|
|
|
|
|
для: veb
(27.07.2007 в 12:45)
| | есть ли хотя бы один php-скрипт, работающий с БД MySQL у Вас на сайте?
Перепишите код соединения из него. | |
|
|
|
|
|
|
|
для: cheops
(21.07.2007 в 11:27)
| | тестирую на локальной машине, apache2.2.4+mysql4.0.16+php5.2.3 под виндами. другие скрипты соединяются с mysql нормально | |
|
|
|
|
|
|
|
для: Veb
(21.07.2007 в 00:00)
| | Где тестируете на локальной машине (другие скрипты, с использованием MySQL работают нормально)?
>Вопрос еще такой: что обозначает это "@mysql_query("SET NAMES 'cp1251'"); " ?
Это настройка кодировки соединения, конкретно здесь этого не требуется, однако, если файл будет использоваться для работы с русскими символами - это позволит предотвратить их искажение. | |
|
|
|
|
|
|
|
для: Veb
(20.07.2007 в 20:50)
| | Чет не хочет работать...Просто показывает пустую страницу
Вопрос еще такой: что обозначает это "@mysql_query("SET NAMES 'cp1251'"); " ? | |
|
|
|
|
|
|
|
для: cheops
(19.07.2007 в 10:00)
| | Большое спасибо! Сейчас буду пробовать!
П.С. огромный респект за книгу PHP5! | |
|
|
|
|
|
|
|
для: Veb
(18.07.2007 в 23:30)
| | После этого участок кода, ответственный за формирование массива $bann_array
<?php
$bann_array = array(
"195.66.203.247"=>"bann", // реальный плохой IP
"220.94.220.60"=>"bann", // реальный плохой IP
//"127.0.0.1"=>"wrong" // Test
);
?>
|
следует переписать следующим образом
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");
$query = "SELECT * FROM bann";
$ban = mysql_query($query);
if(!$ban) exit("Ошибка обращения к таблице ".mysql_error());
$bann_array = array();
if(mysql_num_rows($ban))
{
while($bann = mysql_fetch_array($ban))
{
$bann_array[$bann['ip']] = $bann['bann_status'];
}
}
?>
|
PS Решение не самое эффективное, но позволяет внести изменения в скрипт малой кровью, если же количество записей в таблице bann предполагается очень большим, лучше создать скрипт с нуля, отказавшись от модификации существующего. | |
|
|
|
|
|
|
|
для: Veb
(18.07.2007 в 23:30)
| | Затем необходимо содать файл (config.php), при помощи которого вы будете осуществлять соединение с базой данных
<?php
// сейчас выставлен сервер локальной машины
$dblocation = "localhost";
// Имя базы данных, на хостинге или локальной машине
$dbname = "test";
// Имя пользователя базы данных
$dbuser = "root";
// и его пароль
$dbpasswd = "";
// Устанавливаем соединение с базой данных
$dbcnx = mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) {
exit( "<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" );
}
// Выбираем базу данных
if (! @mysql_select_db($dbname,$dbcnx) ) {
exit( "<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>" );
}
@mysql_query("SET NAMES 'cp1251'");
?>
|
| |
|
|
|
|
|
|
|
для: Veb
(18.07.2007 в 23:30)
| | В первую очередь необходимо создать таблицу bann, где будут храниться IP-адреса
CREATE TABLE bann (
id_ban INT NOT NULL AUTO_INCREMENT ,
ip TINYTEXT NOT NULL ,
bann_status ENUM( 'bann', 'wrong' ) DEFAULT 'bann' NOT NULL ,
PRIMARY KEY (id_ban)
);
|
| |
|
|
|
|
|
|
| Здравствуйте уважаемые разработчики!
Собственно сабж. Есть такой код:
<?php
/* Сообщение при банне ip */
define("bann_message", "Для вашего IP: %ip% доступ к сайту закрыт.");
/* Предупреждение о возможности банна по ip */
define("wrong_message", "Вы предупреждены администратором данного сайта о возможной блокировке вашего IP: %ip% в случае дальнейшего нарушения правил.");
/* массив с ip и типом блокировки. в ключе массива IP, в значении тип блокировки */
$bann_array = array(
"195.66.203.247"=>"bann", // реальный плохой IP
"220.94.220.60"=>"bann", // реальный плохой IP
//"127.0.0.1"=>"wrong" // Test
);
/* Функция для почти 100% определения IP адреса посетителя. */
/* Перебирает все возможные переменные с IP. */
function _ip()
{
if(isset($HTTP_SERVER_VARS)) {
if(isset($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])) {
$realip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
}elseif(isset($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])) {
$realip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
}else{
$realip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
}
}else{
if(getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
$realip = getenv( 'HTTP_X_FORWARDED_FOR' );
}elseif ( getenv( 'HTTP_CLIENT_IP' ) ) {
$realip = getenv( 'HTTP_CLIENT_IP' );
}else {
$realip = getenv( 'REMOTE_ADDR' );
}
}
return $realip;
}
/* Определяет, что делать с владельцем того или иного ip адреса */
function bann_on_not_to_bann()
{
global $bann_array; // получаем массив с ip адресами
$user_ip = _ip(); // получаем ip
/* разбираем массив на ключ и значение */
foreach($bann_array as $ip=>$type)
{
if ($ip == $user_ip) // проверяем
{
switch($type) // если ip совпал то смотрим что делать
{
case "wrong": // предупреждение
{
echo str_replace("%ip%", $user_ip, wrong_message); // выводим предупреждение
break; // выход из switch
}
case "bann": // блокировка
{
die(str_replace("%ip%", $user_ip, bann_message)); // Сообщение о том, что доступ закрыт + завершение работы php
// break не требуется т.к. дальше уже ничего не выполняется
}
}
}
}
}
/* проверяем владельца ip и блокируемпредупреждаем если это спамер */
bann_on_not_to_bann();
?>
Вопрос следующий: в этом примере используется массив с ip-адресами, что очень неудобно, т.к. хочу хранить ip-адреса и статус бана (т.е. бан или предупреждение) в базе данных MySQL. Как правильно модифицировать этот код? | |
|
|
|
|