[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Ситуация - запускаем на сервере PHP бот джаббера/icq/etc (ignore_user_abort=1 и time_limit=0) Можно ли реализовать, чтобы отправляя пост на этот скрипт бот отправлял сообщение.

    То есть - бот не переподключается, а забирая данные переданные из формы отправляет сообщение
     
    _________________________
  2. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Чеза тупость =)))

    PHP:
    if($_POST['message'] != ''send($_POST['message'];
    Вообще все данные авторизации записывай в файл, а потом их читай, тогда не будет повторного переподключения.



    UPD: Вообще php - язык пошаговый(Т.Е выполняется пом ере работы скрипта. Тут нельзя зациклить программу как в ассемблере, c++ и других языках).
     
    #5302 Chaak, 10 Sep 2008
    Last edited: 10 Sep 2008
    1 person likes this.
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    ChaaK, Ммм, крутой крутой. Банальный пример:

    PHP:
    @set_time_limit(0);
    @
    ini_set("max_execution_time"0);
    @
    ignore_user_abort(1);


    switch (
    $_GET['cmd'])
    {
        case 
    'start':
            
    $f=fsockopen('ya.ru',80);
            
    $status=stream_get_meta_data($f); 
            while (!
    $status['eof']) 
            {
                
    sleep(1);
            }
        break;
        case 
    'send':
            
    $out "GET / HTTP/1.1\r\n";
            
    $out .= "Host: ya.ru\r\n";
            
    $out .= "Connection: Close\r\n\r\n";
            
    fwrite($f$out);
            while (!
    feof($f)) 
            {
                echo 
    fgets($f128);
            }
        
    fclose($f);
        break;
    }
    Если запустить скрипт с параметром ?cmd=start он открывает сокетное соединение и не разорвет его. (проверить можно netstat -b) А теперь через это соединение хочется получить все таки страницу. Как реализовать?
    Зациклить-то можно, пример из этого поста - доказательство. Соединение с яндексом будет висеть достаточно долго, а если соединение между двумя своими серверами - то и практически вечно.
     
    _________________________
    #5303 Gifts, 10 Sep 2008
    Last edited: 10 Sep 2008
    1 person likes this.
  4. Zircool

    Zircool Elder - Старейшина

    Joined:
    1 Mar 2006
    Messages:
    162
    Likes Received:
    37
    Reputations:
    5
    Опять вопросик, то был по переименовке а теперь по удалению...
    Та же беда есть файл tags.php в котором нахоядтся ссылки вида

    Написал вот скрипт удаления ссылки по её имени , но использовал функцию strpos, и теперь если вводится вместо точного имени ссылки к примеру буква "н" то удаляются все ссылки имеющие букву н, какую другую функцию помжно использовать для нахождения совпадения в строке...

    PHP:

    <?php
    if (isset($_POST['butdel']))
    {
    $filename=trim($_POST['istagdel']);
    $filetags=file('tags.php');
    foreach (
    $filetags as $tag)
    {
    $pos strpos($tag$filename);
    if(
    $pos===FALSE$newfilename[]=$tag;



        }
    $nameforwr=implode("",$newfilename);
        
    $goodtag fopen("tags.php""w");
              
    fwrite($goodtag$nameforwr);
              
    fclose($goodtag);

     echo 
    "<meta http-equiv=Refresh content='0';>";


        }
    ?>
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Zircool, попробуй так
    PHP:
    if (isset($_POST['butdel']))
    {
        
    $filename=trim($_POST['istagdel']);
        
    $filetags=preg_replace('#<a href="[^"]*?'.preg_quote($filename,'#').'[^"]*">[^\n]*\n#','',file_get_contents('tags.php'));
        
    $goodtag fopen("tags.php""w");
        
    fwrite($goodtag$filetags);
        
    fclose($goodtag);

        echo 
    "<meta http-equiv=Refresh content='0';>";
     
    _________________________
  6. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Мужики, подскажите где почитать про создание С Нуля ФОрм (Логин / регистрация) их связка с БД?
     
  7. ++Norton++

    ++Norton++ Elder - Старейшина

    Joined:
    20 Nov 2006
    Messages:
    167
    Likes Received:
    39
    Reputations:
    0
    Профессиональное РНР программирование, 2-е издание.
    Ссылки на данную книгу есть в этой:
    http://forum.antichat.ru/thread8721.html
    теме в первом посте. А вообще почти в каждой книге есть что-то про данный вопрос.
     
  8. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Чо? о_О

    Открой для себя for, do while, foreach...
     
  9. Zircool

    Zircool Elder - Старейшина

    Joined:
    1 Mar 2006
    Messages:
    162
    Likes Received:
    37
    Reputations:
    5
    Gifts, нет не работает,но спасибо за идею, я сделал немножко по ругому и заработало... если кому интересно

    PHP:
    <?
    if (isset(
    $_POST['butdel']))
    {
        
    $filename=trim($_POST['istagdel']);
        
    $filetags=file('tags.php');
        
    $filetags=preg_replace('#<a href=\"(.*?)\">'$filename.'</a>,#is',null,$filetags);
        foreach(
    $filetags as $filetag )
        {
        if(
    strlen($filetag)>8$files[]=$filetag;// это что бы пустые строки не записывались 
            
    }
        
    $files=implode("",$files);
        
    $goodtag fopen("tags.php""w");
        
    fwrite($goodtag$files);
        
    fclose($goodtag);
    ?>
     
  10. Zircool

    Zircool Elder - Старейшина

    Joined:
    1 Mar 2006
    Messages:
    162
    Likes Received:
    37
    Reputations:
    5
    Не могу понять что за ошибка такая, ищу строку с помощью регулярки в массиве, но выводится ошибка

    код такой
    PHP:
    $filename=trim($_POST['istagdel']);
    $filetags=file('tags.php');
     
    preg_match('#<a href=\"(.*?)\">'.$filename.'</a>,#is'$filetags,$res);
     echo 
    $res[1];
     
  11. 159932

    159932 Elder - Старейшина

    Joined:
    28 Sep 2007
    Messages:
    587
    Likes Received:
    462
    Reputations:
    5
    $filetags должен быть стрингом, а у тебя массив ..
    там же написано ! англиским по белому !
    ==================
    если я правильно понял что тебе нужно, то вместо ф-ии file используй file_get_contents
     
    #5311 159932, 11 Sep 2008
    Last edited: 11 Sep 2008
  12. inlanger

    inlanger Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    985
    Likes Received:
    283
    Reputations:
    27
    Zircool, это значит, функция preg_match() не может понять, какого хрена переменная $filetags - не текст.
     
  13. NuR

    NuR Elder - Старейшина

    Joined:
    11 Dec 2005
    Messages:
    85
    Likes Received:
    58
    Reputations:
    -2
    у 159932 яснее написанно
     
  14. Red_Red1

    Red_Red1 Banned

    Joined:
    12 Jan 2007
    Messages:
    246
    Likes Received:
    258
    Reputations:
    83
    Можно использовать функцию preg_grep() она будет работать с массивом и вернет массив.

    Вот пример
    PHP:
    <?
    $file_array =  file ("fil.txt"); //читаю весь файл в массив
    $fl_array preg_grep("/^(\d+)\b/"$file_array);//Ищем только строки из цыфр
    print_r ($fl_array);
    ?>
    файл fil.txt
    Code:
    asdfasdf
    0000asdfasdf
    11111111
    adfasd
    2222222
    fshdfhdf
    afga3333sgdfg
    444444
    asdfasd55555
    6666
    
    Результат работы
    Array ( [2] => 11111111 [4] => 2222222 [7] => 444444 [9] => 6666 )
     
    #5314 Red_Red1, 11 Sep 2008
    Last edited: 11 Sep 2008
  15. Zircool

    Zircool Elder - Старейшина

    Joined:
    1 Mar 2006
    Messages:
    162
    Likes Received:
    37
    Reputations:
    5
    Можно использовать и preg_grep() я написал несного по другому т.к. лублю preg_match
    А как выцыпить из ссылки вида

    её url.

    PHP:

        $filename
    =trim($_POST['istagdel']);
        
    $filetags=file('tags.php');
        
    settype($filetags,'string');
        
    preg_match('/\<a href=\"(.*?)\"\>'.$filename.'\<\/a\>,/is',$filetags,$res);
        echo 
    $res[1];
    этот код не работает.. регулярка неправильная ?
     
  16. Red_Red1

    Red_Red1 Banned

    Joined:
    12 Jan 2007
    Messages:
    246
    Likes Received:
    258
    Reputations:
    83
    Как ты массив в строку переводишь О.о?
    допиши после
    settype($filetags,'string');
    строку
    echo $filetags;
    Что видишь?
     
    2 people like this.
  17. 159932

    159932 Elder - Старейшина

    Joined:
    28 Sep 2007
    Messages:
    587
    Likes Received:
    462
    Reputations:
    5
    PHP:
    preg_match('#<a href="(.+)">'.$filename.'<\/a>#',$filetags,$res);
    $result $res[0];
    и сделай вместо file , file_get_contents ..
     
    2 people like this.
  18. NuR

    NuR Elder - Старейшина

    Joined:
    11 Dec 2005
    Messages:
    85
    Likes Received:
    58
    Reputations:
    -2
    может тут уместнее foreach юзать?
     
  19. Zircool

    Zircool Elder - Старейшина

    Joined:
    1 Mar 2006
    Messages:
    162
    Likes Received:
    37
    Reputations:
    5
    Сделал используя preg_match и файл открывал file_get_contents.. Только Вот сталкнулся вот с такой проблей. Имя ссылки может быть и с симвлами (,),{,}, но в таком случае проблема с регуляркой preg_match, Т.к. определяет эти символы как спец...

    PHP:
     preg_match('#<a href="(.+)">'.$filename.'<\/a>,#'file_get_contents('tags.php'),$res);

    Как можно обойти эту ошибку?
     
  20. 159932

    159932 Elder - Старейшина

    Joined:
    28 Sep 2007
    Messages:
    587
    Likes Received:
    462
    Reputations:
    5
    Zircool я не понял, где запятая то ?
     
Thread Status:
Not open for further replies.