Сортировать новое сверху

vave

Полезный
Регистрация
22 Июн 2007
Сообщения
466
Реакции
16
Есть у меня такой вот код.

PHP:
<body style="font-size: 9pt">

<? 

class PHPruAuth 
{ 
    var $LOGIN; 
    var $PASSWORD; 
    var $USER; 
    var $PASS; 

    function Error() 
    { 
        echo '<CENTER><BR><BR><FONT COLOR=RED><B>ACCESS DENIED!...</B></FONT>'; 
        exit("<BR>\n</BODY>\n</HTML>"); 
    } 
     
    function CheckUser() 
    { 
        $this->LOGIN = 'asdasd'; // логин администратора 
        $this->PASSWORD = 'asdasd'; // пароль администратора 

        if($this->LOGIN === $_SERVER["PHP_AUTH_USER"] && $this->PASSWORD === $_SERVER["PHP_AUTH_PW"]) 
        { 
            $_SESSION["admin_online"] = 'true'; 
            $AUTH = array(trim($this->LOGIN),trim($this->PASSWORD)); 
            return ($AUTH); 
        } 
        $user = file('users.php'); 
        foreach($user as $value) 
        { 
            list($this->USER,$this->PASS,$email,$host,$web,$uslugi,$code,$time) = explode("^^",$value); 
            if(($this->USER === $_SERVER["PHP_AUTH_USER"]) && ($code == 'yes')) 
            { 
                $AUTH = array(trim($this->USER),trim($this->PASS)); 
                return ($AUTH); 
            } 
        } 
    } 

    function PHPruAuth() 
    { 
        if(isset($_SERVER["PHP_AUTH_USER"])) 
            $AUTH = $this->CheckUser(); 
        if ( (!isset($_SERVER["PHP_AUTH_USER"])) || ! (($_SERVER["PHP_AUTH_USER"] === $AUTH[0]) && ( $_SERVER["PHP_AUTH_PW"] === $AUTH[1] )) ) 
        { 
            header("HTTP/1.0 401 Unauthorized"); 
            header("WWW-Authenticate: Basic entrer=\"Form2txt admin\""); 
            header("WWW-Authenticate: Basic Realm=\"PROTECTED AREA\""); 
            $this->Error(); 
        } 
    } 
} 

session_name('PROTECT'); 
session_start(); 
$MEMBER = new PHPruAuth; 

?> 

<? 

function ListUser() 
{ 
    $list = file('users.php'); 
    $all = count($list); 
?> 
<TABLE WIDTH=1335 CELLPADDING=7 CELLSPACING=1 BGCOLOR=#FFFFFF> 
<TR ALIGN=CENTER BGCOLOR=#444444> 
    <TD bgcolor="#D2AD88" width="166">
    <font color="#FFFFFF" face="Tahoma" style="font-size: 9pt"><B>Имя \ Фамилия</B></font></TD> 
    <TD bgcolor="#D2AD88" width="169">
    <font color="#FFFFFF" face="Tahoma" style="font-size: 9pt"><B>Телефон</B></font></TD> 
    <TD bgcolor="#D2AD88" width="56">
    <font color="#FFFFFF" face="Tahoma" style="font-size: 9pt"><B>E-mail</B></font></TD> 
    <TD bgcolor="#D2AD88" width="44"><b>
    <font face="Tahoma" color="#FFFFFF" style="font-size: 9pt">№</font></b></TD> 
    <TD bgcolor="#D2AD88" width="166"><b>
    <font face="Tahoma" color="#FFFFFF" style="font-size: 9pt">Город</font></b></TD> 
    <TD bgcolor="#D2AD88" width="376"><b>
    <font face="Tahoma" color="#FFFFFF" style="font-size: 9pt">Встреча</font></b></TD> 
    <TD bgcolor="#D2AD88"><b>
    <font face="Tahoma" color="#FFFFFF" style="font-size: 9pt">Дата</font></b></TD>
    <TD bgcolor="#FFFFFF"></TD>
</TR> 
<? 
    $act = 0; 
    foreach($list as $string) 
    { 
        list($user,$pass,$email,$host,$web,$uslugi,$code,$time) = explode("^^",$string); 
        if ($code != 'yes') 
        { 
            if($time > time()) 
                $txt = '<FONT COLOR=#66CC00>ожидаем до</FONT> '; 
            else 
                $txt = '<FONT COLOR=#FF0000>на удаление</FONT> '; 
        } 
        else 
        { 
            $txt = '';    $act++; 
        } 
        echo '<TR ALIGN=CENTER BGCOLOR=#F8F8F8><TD >'.$user.'</TD><TD>'.$pass."</TD><TD>".trim($email)."</TD><TD>".trim($host)."</TD><TD>".trim($web)."</TD><TD>".trim($uslugi)."</TD><TD>".$txt.date("d.m.Yг.",$time)."</TD><TD><A onclick=\"return confirm('Удалить клиента из базы?')\" HREF='?user=del&login=".$user."' TITLE='Удалить'><FONT COLOR='#FF0000'><img border='0' src='del.gif'></FONT></A></TD><TD><A HREF='?user=edit&login=".$user."' TITLE='Редактировать'><FONT COLOR='#FF0000'><img border='0' src='edit.gif'></FONT></A></TD></TR>\n"; 
    } 
?> 
</TABLE> 

<font face="Tahoma" style="font-size: 9pt"> 

<BR></font><font face="Tahoma" color="#3366CC" style="font-size: 9pt">Всего клиентов -</font><font face="Tahoma" style="font-size: 9pt"> 
<? 
    echo '<B>'.$all.'</B>'; 
} 

function AddUser() 
{ 
?> 
</font> 
<FORM METHOD=POST ACTION=""> 
<TABLE width="576" cellspacing="5" cellpadding="3"> 
<TR> 
    <TD width="246"><b><font face="Tahoma" style="font-size: 9pt">Имя / Фамилия </font></b> </TD> 
    <TD width="303"><font face="Arial"><span style="font-size: 9pt">
    <font face="Tahoma"><INPUT class=auth TYPE="text" NAME="login" size="59"></font></span></font></TD> 
</TR> 
<TR> 
    <TD width="246"><b><font face="Tahoma" style="font-size: 9pt">Телефон: </font></b> </TD> 
    <TD width="303"><font face="Arial"><span style="font-size: 9pt">
    <font face="Tahoma"><INPUT class=auth TYPE="text" NAME="pass" size="59"></font></span></font></TD> 
</TR> 
<TR> 
    <TD width="246"><b><font face="Tahoma" style="font-size: 9pt">E-mail: </font></b> </TD> 
    <TD width="303"><font face="Arial"><span style="font-size: 9pt">
    <font face="Tahoma"><INPUT class=auth TYPE="text" NAME="email" size="59"></font></span></font></TD> 
</TR> 


<TR> 
    <TD width="246"><b><font face="Tahoma" style="font-size: 9pt">№: </font></b> </TD> 
    <TD width="303"><font face="Arial"><span style="font-size: 9pt">
    <font face="Tahoma"><INPUT class=auth TYPE="text" NAME="host" size="59"></font></span></font></TD> 
</TR> 


<TR> 
    <TD width="246"><b><font face="Tahoma" style="font-size: 9pt">Город: </font>
    </b> </TD> 
    <TD width="303"><font face="Arial"><span style="font-size: 9pt">
    <font face="Tahoma"><INPUT class=auth TYPE="text" NAME="web" size="59"></font></span></font></TD> 
</TR> 
<TR> 
    <TD width="246"><b><font face="Tahoma" style="font-size: 9pt">Встреча: </font></b> </TD> 
    <TD width="303"><font face="Arial"><span style="font-size: 9pt">
    <font face="Tahoma"><INPUT class=auth TYPE="text" NAME="uslugi" size="59"></font></span></font></TD> 
</TR>


<TR> 
    <TD COLSPAN=2><font face="Arial"><span style="font-size: 9pt">
    <font face="Tahoma"><INPUT class=auth TYPE="submit" NAME="protect" VALUE='Добавить'></font></span></font></TD> 
</TR> 
</TABLE> 
</FORM> 
<font face="Tahoma" style="font-size: 9pt"> 
<? 
} 

function DelUser() 
{ 
    $list = file('users.php'); 
    for($a = 0; $a < count($list); $a++) 
    { 
        list($user,$pass,$email,$host,$web,$uslugi,$code,$time) = explode("^^",$list[$a]); 
        if($user == trim($_GET["login"])) 
        { 
            $fix = 1; 
            unset($list[$a]); 
            echo 'Пользователь '.$user.' удален!'; 
            break; 
        } 
    } 
    if(!isset($fix)) 
        echo 'Ошибка. Пользователь '.$_GET["login"].' в базе не найден.'; 
    else 
    { 
        $user_info = str_replace("\r","",join("",$list)); 
        PHPruSave($user_info,'users.php','w+'); 
    } 
} 

function PHPruSave($input,$file,$chmod='w+') 
{ 
    $fp = fopen($file,$chmod); 
    flock($fp,2); 
    fputs ($fp,    $input); 
    flock($fp,3); 
    fclose($fp); 
} 


if (isset($_SESSION["admin_online"])) 
{ 
    ShowAdmin(); 
    exit("\n</BODY>\n</HTML>"); 
} 

function ShowAdmin() 
{ 
?> 
</font> 
<CENTER>
<P align="center"><font face="Tahoma"><font style="font-size: 9pt">
<img border="0" src="logo.jpg" width="246" height="137"> </font><span lang="ru">
<font color="#484848" style="font-size: 9pt"><br>
</font></span><font style="font-size: 9pt"><BR> 
</font></font> 
<font face="Tahoma" style="font-size: 9pt; font-weight: 700"> 
<A HREF="?user=add"><font color="#484848"><span style="text-decoration: none">Добавить клиента</span></font></A><font color="#484848">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</font>
<A HREF="?user=list"><span style="text-decoration: none"><font color="#484848">
Список клиентов</font></span></A><font color="#484848">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</font><font color="#3366CC">&nbsp;</font></font><a href="poc.php?user=list"><font face="Tahoma" style="font-weight: 700; text-decoration:none; font-size:9pt" color="#3366CC">ПОТЕНЦИАЛЬНЫЕ
КЛИЕНТЫ</font></a><font face="Tahoma" style="font-size: 9pt"><BR><BR> 
<? 

if(isset($_POST["protect"])) 
{ 
    $check = file('users.php'); 
    foreach($check as $string) 
    { 
        list($user,$pass,$email,$host,$web,$uslugi,$code,$time) = explode("^^",$string); 
        if(trim($_POST["login"]) == trim($user)) 
        { 
            $fix = 1; 
            break; 
        } 
    } 
    if(!isset($fix)) 
    { 
        $user_info = trim($_POST["login"]).'^^'.trim($_POST["pass"]).'^^'.trim($_POST["email"]).'^^'.trim($_POST["host"]).'^^'.trim($_POST["web"]).'^^'.trim($_POST["uslugi"]).'^^yes^^'.time()."\n"; 
        PHPruSave($user_info,'users.php','a+'); 
        echo 'Новый пользователь добавлен.'; 
        unset($_GET["user"]); 
    } 
    else 
    { 
        echo 'Ошибка. Пользователь с таким логином уже есть.<BR><BR>'; 
    } 
} 
//********************** редактируем юзера *********************
if(isset($_POST["edit"])) 
{ 
    $check = file('users.php'); 
    for($a = 0; $a < count($check); $a++) 
    { 
        list($user,$pass,$email,$host,$web,$uslugi,$code,$time) = explode("^^",$check[$a]); 
        if(trim($_POST["login"]) == trim($user)) 
        { 
            $fix = 1; 
            unset($check[$a]); 
            $user_info = str_replace("\r","",join("",$check)); 
            PHPruSave($user_info,'users.php','w+'); 
            break; 
        } 
    } 
    if(isset($fix)) 
    { 
        $user_info = trim($_POST["login"]).'^^'.trim($_POST["pass"]).'^^'.trim($_POST["email"]).'^^'.trim($_POST["host"]).'^^'.trim($_POST["web"]).'^^'.trim($_POST["uslugi"]).'^^yes^^'.time()."\n"; 
        PHPruSave($user_info,'users.php','a+'); 
        echo 'Пользователь отредактирован.'; 
        unset($_GET["user"]); 
    } 
    else 
    { 
        echo 'Ошибка. Пользователь с таким логином не существует.<BR><BR>'; 
    } 
} 
function EditUser() 
{ 
    $list = file('users.php'); 
    for($a = 0; $a < count($list); $a++) 
    { 
        list($user,$pass,$email,$host,$web,$uslugi,$code,$time) = explode("^^",$list[$a]); 
        if($user == trim($_GET["login"])) 
        { 
echo '<FORM METHOD=POST ACTION=""> 
<TABLE width="357"> 
<TR> 
    <TD width="141"><b><font face="Arial">Имя / Фамилия </font></b> </TD> 
    <TD width="206"><INPUT class=auth TYPE="text" NAME="login" size="28" value = "'.$user.'"></TD> 
</TR> 
<TR> 
    <TD width="141"><b><font face="Arial">Телефон: </font></b> </TD> 
    <TD width="206"><INPUT class=auth TYPE="text" NAME="pass" size="28" value = "'.$pass.'"></TD> 
</TR> 
<TR> 
    <TD width="141"><b><font face="Arial">E-mail: </font></b> </TD> 
    <TD width="206"><INPUT class=auth TYPE="text" NAME="email" size="28" value ="'.$email.'"></TD> 
</TR> 


<TR> 
    <TD width="141"><b><font face="Arial">Hosting: </font></b> </TD> 
    <TD width="206"><INPUT class=auth TYPE="text" NAME="host" size="28" value = "'.$host.'"></TD> 
</TR> 


<TR> 
    <TD width="141"><b><font face="Arial">Web Сайт: </font></b> </TD> 
    <TD width="206"><INPUT class=auth TYPE="text" NAME="web" size="28" value = "'.$web.'"></TD> 
</TR>


<TR> 
    <TD width="141"><b><font face="Arial">Услуги: </font></b> </TD> 
    <TD width="206"><INPUT class=auth TYPE="text" NAME="uslugi" size="28" value = "'.$uslugi.'"></TD> 
</TR> 

<TR> 
    <TD COLSPAN=2><INPUT class=auth TYPE="submit" NAME="edit" VALUE="Редактировать"></TD> 
</TR> 
</TABLE> 
</FORM> ';
 
            $fix = 1; 
            break; 
        } 
    } 
    if(!isset($fix)) 
        echo 'Ошибка. Пользователь '.$_GET["login"].' в базе не найден.'; 
   
} 
//**********************************************************
if(isset($_GET["user"])) 
{ 
    if($_GET["user"] == 'add') 
        AddUser(); 
    elseif($_GET["user"] == 'list') 
        ListUser(); 
    elseif($_GET["user"] == 'del') 
        DelUser(); 
    elseif($_GET["user"] == 'edit') 
        EditUser();
} 

?> 
<BR><BR><BR>       

</font>       
</body>
<? 
} 
?>

Как сделать так что бы новые пользователи, добавлялись сверху а не снизу?
И за одно подскажите как уменьшить шрифт, что выходит из PHP?
 
Код:
Есть у меня такой вот код.
Шикарный вид код (с)

Как сделать так что бы новые пользователи, добавлялись сверху а не снизу?
В блоке if(!isset($fix)) строчку
Код:
PHPruSave($user_info,'users.php','a+');
заменить на (бэкап сделай заранее:(
Код:
        array_unshift($check,$user_info);
        $user_info = str_replace("\r","",join("",$check));
        PHPruSave($user_info,'users.php','w+');
И за одно подскажите как уменьшить шрифт, что выходит из PHP?
Вообще, делается через стили (в отдельном файле, или в тэге <style> на худой конец.. но можно и в атрибуты style|font подобавлять, как в остальных местах)
 
Для просмотра ссылки Войди или Зарегистрируйся
'c' Открывает файл только для записи. Если файл не существует, то он создается. Если же файл существует, то он не обрезается (в отличии от 'w'), и вызов к этой функции не вызывает ошибку (также как и в случае с 'x'). Указатель на файл будет установлен на начало файла. Это может быть полезно при желании заблокировать файл (смотри Для просмотра ссылки Войди или Зарегистрируйся) перед изменением, так как использование 'w' может обрезать файл еще до того как была получена блокировка (если вы желаете обрезать файл, можно использовать функцию Для просмотра ссылки Войди или Зарегистрируйся после запроса на блокировку).
следовательно: function PHPruSave($input,$file,$chmod='c')

php не манипулирует шрифтами в html, ими управляет css..
 
Для просмотра ссылки Войди или Зарегистрируйся
следовательно: function PHPruSave($input,$file,$chmod='c')
BDSG, ты уже Для просмотра ссылки Войди или Зарегистрируйся (из того, что я заметил) этой "цэ"-шкой народ в заблуждение пытаешься ввести. И я повторюсь - попробуй сам сделать, поймёшь свою ошибку.
 
BDSG, ты уже Для просмотра ссылки Войди или Зарегистрируйся (из того, что я заметил) этой "цэ"-шкой народ в заблуждение пытаешься ввести. И я повторюсь - попробуй сам сделать, поймёшь свою ошибку.
это вот спасибо, что указал!.. признаться давно с фс не работал, прочел по докам, а протестировать неудосужился..

собственно задача запросто решается через чтение в буфер и запись конкаттенации добавляемой строки и буфера, но... порой текста много, а памяти мало, и весь файл не считать (собственно полагал, что fwrite + c решают эту проблему, спасибо esche за подсказку)..
на такой случай сообразил такой велосипед:
PHP:
$input_string = "this string must be first \n";

// тут нам надо кол-во байт, т.ч. на utf то же она
$input_string_length = strlen( $input_string );

// сколько байт нужно читать в буфер..
// тут задано 64 байта, ставить по вкусу (хоть экзабайт, если памяти хватит.. быстрее отработает)..
$buffer_size = 64;

$buffer = '';
$buffer_cache = '';

$file_size = filesize( 'file.txt' );

$h = fopen( 'file.txt' , 'r+' );

// чмтаем из файла в буфер строку, длинной с вставляемую
$buffer = fread( $h, $input_string_length );

// возвращаем курсор на исходную
$fseek_position = 0;
fseek( $h, $fseek_position );

// записываем новую строку
fwrite( $h, $input_string, $input_string_length );

// задаем позицию со смещением в длинну исходной строки + размер буфера (ниже вычтем)
$fseek_position += ( $input_string_length + $buffer_size );

// смещаем курсор
fseek( $h, $fseek_position );


for(; ( $fseek_position + $buffer_size ) < $file_size; $fseek_position += $buffer_size ){

    // кэшируем строку длинной заданного буфера (подиция курсора )
    $buffer_cache = fread( $h, $buffer_size );

    // смещаем на начало кэшированной строки
    fseek( $h, ( $fseek_position - $buffer_size ) );

    fwrite( $h, $buffer );

    // возвращаем курсор на проежнее место, для считывания следующего куска в новой итерации
    fseek( $h, ( $fseek_position + $buffer_size ) );

    $buffer = $buffer_cache;

}
fclose( $h );

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

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

А бо-о-ольшой файл fseek-ами туда-сюда до-о-олго переписывать будешь.. апач по таймауту отвалится - так и получится файлик недописанный с повреждёнными данными.
(до кучи - залочить забыл, а то вдруг f5 залипнет :D )
 
думаю с вторым файлом во времени заметного выигрыша во времени не будет, т.к. операции производить почти те же, а fseek, сам по себе быстр, как утренний понос.. самое обузное тут именно запись (даже не чтение)..

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

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

короче всем спасибо за идею и практику её реализации - давненько с фс дел не имел.. ))
 
Назад
Сверху