PHP скрипт

Reademonster
На сайте с 30.06.2014
Offline
17
864

Помогите с PHP скриптом, нужно реализовать запись в определённую строку (253). Сейчас записывается в конец файла.

<?php

//Авто бан людей который хотят попасть в админку admin.php

$ip = getenv ("REMOTE_ADDR");

$log = fopen("banip.txt", "a+");

fwrite($log, "// ".$ip."\n");

fclose($log);

$f = fopen($_SERVER['DOCUMENT_ROOT'] . '/.htaccess', "a");

fwrite($f, "\n");

fwrite($f, '<files ~ "(admin|12312426)\.php">');

fwrite($f, "\ndeny from " . $ip);

fwrite($f, "\n</files>");

fclose($f);

echo <<<HTML

<!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>

<title>DataLife Engine - Панель управления</title>

<meta content="text/html; charset=windows-1251" http-equiv="content-type" />

<style type="text/css">

html,body{

width:100%;

margin:0px;

padding: 0px;

background: #F4F3EE;

font-size: 11px;

font-family: verdana;

}

#login-box {

width:447px;

height:377px;

margin:10% auto 0 auto;

background:#FFFFFF;

}

form {

margin:0px;

padding: 0px;

}

input,

select {

color: #000000;

outline:none;

}

input[type="text"],

input[type="password"],

select {

width:340px;

background-color: #FFFFFF;

color: #000000;

font-size: 18px;

font-family: verdana;

font-weight: bold;

border: none;

margin-top: 20px;

margin-left: 60px;

}

input[type="checkbox"] {

padding:0px;

margin-top: 25px;

}

label {

padding:0px;

margin:0px;

}

.error {

padding-top: 75px;

padding-left: 27px;

}

</style>

</head>

<body>

<form name="login" action="" method="post"><input type="hidden" name="subaction" value="dologin">

<div id="login-box">

<div style="width:447px;height:95px;background: url(engine/skins/images/loginheader.png);"><a href="http://dle-news.ru/" style="display:block; float:right;width:90px;height:90px;" target="_blank"></a><div class="error"></div></div>

<div style="width:447px;height:66px;background: url(engine/skins/images/loginbox1.png);"><input type="text" name="username"></div>

<div style="width:447px;height:67px;background: url(engine/skins/images/loginbox3.png);"><input type="password" name="password"></div>

<div style="width:447px;height:67px;background: url(engine/skins/images/loginbox4.png);"><select name="selected_language">

<option value="Russian" selected >Russian</option>

</select></div>

<div style="width:37px;height:82px;float:left;background: url(engine/skins/images/loginbox6.png);"></div>

<div style="width:283px;height:82px;float:left;background: url(engine/skins/images/loginbox7.png);"><input type="checkbox" name="login_not_save" id="login_not_save" value="1"/><label for="login_not_save">&nbsp;Чужой компьютер</label></div>

<div style="width:102px;height:82px;float:left;"><input type="image" src="engine/skins/images/loginbox8.png"></div>

<div style="width:25px;height:82px;float:right;background: url(engine/skins/images/loginbox5.png);"></div>

</div></form>

</body>

</html>

HTML;

?>

Где я монетезирую файловой трафик (http://installmonster.ru/ru/user/registration?ref=5117) (1к рублей с 1200-1300 посещений)
VHS
На сайте с 28.09.2007
Offline
142
VHS
#1

$fcontents = implode ('', file('banip.txt')); // считали файл в массив

// тут откроем для записи файл или что-то еще сделаем
$log = fopen("banip.txt", "w+");
foreach($fcontents as $k=>$v){
if($k ==252) {
fwrite($log, "// ".$ip."\n");
}
fwrite($log, "// ".$v."\n");
}

fclose($log);

Написано на коленке, при кривом исполнении файл можно потерять, лучше через копию делать, но принцип примерно такой

Reademonster
На сайте с 30.06.2014
Offline
17
#2
VHS:
$fcontents = implode ('', file('banip.txt')); // считали файл в массив


// тут откроем для записи файл или что-то еще сделаем
$log = fopen("banip.txt", "w+");
foreach($fcontents as $k=>$v){
if($k ==252) {
fwrite($log, "// ".$ip."\n");
}
fwrite($log, "// ".$v."\n");
}

fclose($log);



Написано на коленке, при кривом исполнении файл можно потерять, лучше через копию делать, но принцип примерно такой

Не работает

VHS
На сайте с 28.09.2007
Offline
142
VHS
#3
Reademonster:
Не работает

Вообще не работает? )))) Ничего не происходит? ))))

$ip = getenv ("REMOTE_ADDR"); включил в код?

Reademonster
На сайте с 30.06.2014
Offline
17
#4
VHS:
Вообще не работает? )))) Ничего не происходит? ))))
$ip = getenv ("REMOTE_ADDR"); включил в код?

Да, при запуске скрипта файл полностью отчищается. Так быть не должно))

Joker-jar
На сайте с 26.08.2010
Offline
154
#5
VHS:
$fcontents = implode ('', file('banip.txt')); // считали файл в массив


// тут откроем для записи файл или что-то еще сделаем
$log = fopen("banip.txt", "w+");
foreach($fcontents as $k=>$v){
if($k ==252) {
fwrite($log, "// ".$ip."\n");
}
fwrite($log, "// ".$v."\n");
}

fclose($log);



Написано на коленке, при кривом исполнении файл можно потерять, лучше через копию делать, но принцип примерно такой

А зачем тут implode? При помощи file() получаем массив, по индексу заменяем элемент.

L5
На сайте с 11.10.2009
Offline
65
La5
#6


<?php

$banned = file_exists('ban.json') ? json_decode(file_get_contents('ban.json'), true) : [];
$banned[$_SERVER['REMOTE_ADDR']] = 1;
file_put_contents('ban.json', json_encode($banned));
Если я Вам помог, не забывайте ставить + в карму!
VHS
На сайте с 28.09.2007
Offline
142
VHS
#7
Joker-jar:
А зачем тут implode? При помощи file() получаем массив, по индексу заменяем элемент.

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

---------- Добавлено 07.07.2015 в 20:05 ----------

La5:

<?php

$banned = file_exists('ban.json') ? json_decode(file_get_contents('ban.json'), true) : [];
$banned[$_SERVER['REMOTE_ADDR']] = 1;
file_put_contents('ban.json', json_encode($banned));

И как этот код вставит айпи адрес в 253 строку?

Reademonster
На сайте с 30.06.2014
Offline
17
#8

Так как сделать чтобы писало в 253 строку?

S7
На сайте с 15.08.2010
Offline
79
#9
Reademonster:
реализовать запись в определённую строку (253)

берём файл ('.htaccess' || "banip.txt") и кладем данные в массив построчно


$filepatch = $_SERVER['DOCUMENT_ROOT'] . '/.htaccess';
$content = file_get_contents($filepatch);
$content = explode("\n" , $content);

берем 223-ю строку $content[252] (потому как массив начинается с 0)


// проверяем существование строки
if (array_key_exists(252, $content)) {

// добавляем $ip к строке
$content[252] .= ' '.$ip;

// пишем в файл
file_put_contents($filepatch, join("\n", $content));
}

НО! этот способ с работает верно если строка - deny from IP IP IP, всегда будет 253

иначе и правильнее, прочитать и парсить нужную строку в '.htaccess' или "banip.txt" с помощью preg_match()

затем изменять и перезаписывать .htaccess

а это уж немного другой вопрос и код..

P.S. код на странице закомментировать

Собственно.. как говориться "Не зная брода, не лезь в воду"..

это я к тому что выше приведен код в котором нет строки 253,

но есть код который добавляет в конец файла .htaccess директивы доступа к файлу (admin|12312426)\.php c указанных IP..

..и код записи в "banip.txt"

а это только половина информации..

нужная для изменяемая строка находится в файле ('.htaccess' || "banip.txt")

фрагмент которого с 253-й строкой отсутствует в посте..

поэтому более точно угадать не просто.

Reademonster
На сайте с 30.06.2014
Offline
17
#10
senks777:
берём файл '.htaccess' и кладем данные в массив построчно

$filepatch = $_SERVER['DOCUMENT_ROOT'] . '/.htaccess';
$content = file_get_contents($filepatch);
$content = explode("\n" , $content);

берем нужную строку $content[252] (потому как массив начинается с 0)

// проверяем существование строки
if (array_key_exists(252, $content)) {

// добавляем $ip к строке
$content[252] .= ' '.$ip;

// пишем в файл
file_put_contents($filepatch, join("\n", $content));
}

НО! этот способ с работает верно если строка - deny from IP IP IP, всегда будет 253

иначе и правильнее, прочитать и парсить нужную строку в .htaccess с помощью preg_match()
затем изменять и перезаписывать .htaccess

а это уж немного другой вопрос и код..

P.S. код на странице закомментировать
Собственно.. как говориться "Не зная брода, не лезь в воду"..

это я к тому что выше приведен код в котором нет строки 253, но есть код который добавляет в конец файла .htaccess
директивы доступа к файлу (admin|12312426)\.php c указанных IP..

а это половина информации..

нужная для изменяемая строка 253 находится в файле .htaccess код которого отсутствует..
поэтому более точно ответить не просто.

Спасибо огромное, всё работает как надо

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий