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

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

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

    vssh New Member

    Joined:
    14 Apr 2009
    Messages:
    22
    Likes Received:
    3
    Reputations:
    0
    нужна помощь...
    есть код вида:
    PHP:
        if(trim($_POST['email']) == '')  {
            
    $hasError true;
        } else if (!
    eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$"trim($_POST['email']))) {
            
    $hasError true;
        } else {
            
    $email trim($_POST['email']);
        }
    нужно сделать так, чтобы проверка позволяла вводить ещё и номера телефонов, т.е. любые числовые значения с "плюсом", например +79992223333
     
  2. Adio

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

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    Люди, спасайте.

    Есть файл, в нем 8000 строк.

    Как его разбить, по 1000 ? и записать в файлы ?

    Т.е 1000-1.txt 1000-2.txt и т д.

    Помогите реализовать, с меня плюсы, если это так важно.
    Спасибо.
     
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Adio http://php.net/fopen, http://php.net/fgets, http://ru2.php.net/manual/en/control-structures.if.php
     
    _________________________
  4. Adio

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

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    Спасибо, я записить и чтение знаю, я не знаю и как посчитать строки тоже знаю.

    Единсвенное где не могу додуматься, к пример

    К примеру делаю условие, если строка

    $str1 == "200"

    то прекращаем работу и записываем в файл

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

    Не знаю вообщем, думаю для знающего хорошо пхп не составит труда это сделать.. я просто в ЛОГИКЕ запутался не много того и не могу сделать..
     
  5. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    Adio, может и нубско но по другому на пока не придумал

    PHP:
    <?


    $file file_get_contents("твой файл")

    preg_match_all("/(.*?)\n/",$file $pars)
    \\ 
    незнаю что в нём там записано сделаю пока так

    $i 
    ="0";
    foreach(
    $pars[0] as $text)
    {

    if(
    $i  <= 1000)
    {
    $file_two "1000.txt";
    $s fopen($file_two"a+");
    fwrite($s$text."\n\r");
    fclose($s);
    }
    elseif(
    $i  <= 2000)
    {
    $file_two "2000.txt";
    $s fopen($file_two"a+");
    fwrite($s$text."\n\r");
    fclose($s);
    }
    elseif(
    $i  <= 3000)
    {
    $file_two "3000.txt";
    $s fopen($file_two"a+");
    fwrite($s$text."\n\r");
    fclose($s);
    }
    elseif(
    $i  <= 4000)
    {
    $file_two "4000.txt";
    $s fopen($file_two"a+");
    fwrite($s$text."\n\r");
    fclose($s);
    }
    elseif(
    $i  <= 5000)
    {
    $file_two "5000.txt";
    $s fopen($file_two"a+");
    fwrite($s$text."\n\r");
    fclose($s);
    }
    elseif(
    $i  <= 6000)
    {
    $file_two "6000.txt";
    $s fopen($file_two"a+");
    fwrite($s$text."\n\r");
    fclose($s);
    }
    elseif(
    $i  <= 7000)
    {
    $file_two "7000.txt";
    $s fopen($file_two"a+");
    fwrite($s$text."\n\r");
    fclose($s);
    }
    elseif(
    $i  <= 8000)
    {
    $file_two "8000.txt";
    $s fopen($file_two"a+");
    fwrite($s$text."\n\r");
    fclose($s);
    }
    $i++;
    }

    ?>
     
    #19805 qaz, 9 Jan 2012
    Last edited: 9 Jan 2012
  6. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Adio
    PHP:
    <?php
    $fp 
    fopen('in.txt'"rb");
    for (
    $j 1$j <= 8$j++)
    {
        
    $f fopen("1000-$j.txt""wb");
        for (
    $i 1$i <= 1000$i++)
        {
            
    fwrite($ftrim(fgets($fp))."\r\n");
        }
        
    fclose($f);
    }
    fclose($fp);
    ?>
    vssh
    PHP:
    <?php
    if (!preg_match("#^\+\d{11}$#"$str))
    echo 
    "false";
    else
    echo 
    "true";
    ?>
    И функция eregi устарела используйте preg_match.

    Compton, очевидно, что вы парсите выдачу поисковой системы bing.com, но не ясно, каким образом вы это делаете, что получаются массивы такого вида!? Может данную проблему можно решить на самом этапе парсинга, не создавая лишние костыли?
     
    #19806 Skofield, 9 Jan 2012
    Last edited: 9 Jan 2012
    1 person likes this.
  7. Demon__666

    Demon__666 New Member

    Joined:
    26 Sep 2011
    Messages:
    16
    Likes Received:
    1
    Reputations:
    0
    Подскажите хорошие книги для новичка по PHP.
     
  8. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    Не создавать такой массив не получается,т.к. до этого приходится некоторые его части пропускать через array_walk и циклы. Но я уже решил проблему.
     
  9. vssh

    vssh New Member

    Joined:
    14 Apr 2009
    Messages:
    22
    Likes Received:
    3
    Reputations:
    0
    не работает, или я неправильно использую
    как изменить код?

    PHP:
        if(trim($_POST['email']) == '')  {
            
    $hasError true;
        } else if (!
    eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$"trim($_POST['email']))) {
            
    $hasError true;
        } else {
            
    $email trim($_POST['email']);
        }
     
  10. Чакэ

    Чакэ Elder - Старейшина

    Joined:
    15 Aug 2010
    Messages:
    260
    Likes Received:
    66
    Reputations:
    62
    сказали же, юзай preg_match а не eregi
     
  11. Ifrit

    Ifrit New Member

    Joined:
    10 Feb 2011
    Messages:
    33
    Likes Received:
    3
    Reputations:
    5
    доброго времени суток
    есть проблема, которая заключается в том, что есть 21 сервер с базами данных, на которые требуется отправлять однотипные запросы MSSQL (ну или любая база данных не важно)
    проблема заключается в использовании цикла + функции mssql_query, которая подразумевает как отправку запроса, так и получение результата
    дело в том что запросы бывают достаточно тяжелыми, и проходить по одной базе могут минут 5, и получается что весь процесс занимает при использовании цикла минут 30
    прошу подсказать, возможно ли как то сделать так, чтобы PHP отправлял запрос, не ждал ответ, переключался к другому серверу, а после прогона всех возвращался для сбора результатов?
    может быть с помощью PDO или PEAR?
    заранее спасибо большое
    з.ы. добавление или редактирование stored процедур запрещено разработчиками базы данных
     
  12. Brooklyn111

    Brooklyn111 New Member

    Joined:
    13 Feb 2011
    Messages:
    51
    Likes Received:
    0
    Reputations:
    0
    подскажите где найти мануал, кроме гугла, по написанию инжектов от а до я, обращаюсь к знающим людям, сильно не пинайте
     
  13. SaintDemon

    SaintDemon New Member

    Joined:
    9 Jan 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Уважаемые пользователи форума античат.
    Помогите пожалуйста по следующему вопросу:
    Есть чат, написанный на php, нужно добавить защиту от флуда - в виде задержки между отправкой сообщения в пару секунд, а также в случае быстрой отправки сообщений в чат, нужно добавить надпись, что "Флуд запрещён".
    Пожалуйста подскажите, как это реализовать или может ткните носом туда, где такое уже реализовано, т.к. моих знаний пока не хватает для решения данной задачи.
    Заранее спс.
     
  14. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Ifrit http://php.net/mssql_query http://php.net/mssql_fetch_batch Параметр batch_size вроде как позволяет получать N записей за раз, что в общем то позволит отправлять запросы асинхронно. Какого рода задержки то возникают?
     
    _________________________
  15. SaintDemon

    SaintDemon New Member

    Joined:
    9 Jan 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Да нет, задержки то как раз и надо сделать. Что то типа:
    Сообщение №1
    задерка 2-3 секунды
    Сообщение №2
    Имеется ввиду от одного пользователя.
     
  16. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    SaintDemon я отвечал не вам. А теперь вам - храните время последней отправки в сессии и если текущее время минус сохраненное меньше желаемого - никуда ничего не посылать
     
    _________________________
  17. SaintDemon

    SaintDemon New Member

    Joined:
    9 Jan 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    А проще никак не сделать?
     
  18. FindeR

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

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Если это сложно - тогда раздел "О работе" ждёт.
     
  19. Ifrit

    Ifrit New Member

    Joined:
    10 Feb 2011
    Messages:
    33
    Likes Received:
    3
    Reputations:
    5
    ну проблемы такого рода что сервера с базами данных находятся достаточно далеко от моего сервера PHP и запросы идут долго по времени
    и получается что идет цикл с перебором серверов и тратится время
    7 мин+
    5 мин+
    2 мин+
    .....
    итого 30 минут
    в идеале очень бы хотелось чтобы время всего прогона не превышала времени самого долгого ответа т.е. 7 минут

    насколько я понял mssql_fetch_batch позволяет работать уже с результатом, т.е. к примеру нарезать ответ на части или я что то не так понял?
    мне очень нужно как бы разбить функцию mssql_query на две части
    query
    и get result
    кажется это невозможно...
     
    #19819 Ifrit, 10 Jan 2012
    Last edited: 10 Jan 2012
  20. lightangel

    lightangel New Member

    Joined:
    7 Nov 2011
    Messages:
    91
    Likes Received:
    3
    Reputations:
    -6
    Code:
    <? 
    class pop3_class 
    { 
    var $hostname=""; 
    var $port=110; 
    
    var $connection=0; 
    var $state="DISCONNECTED"; 
    var $greeting=""; 
    var $must_update=0; 
    
    Function GetLine() 
    { 
    for($line=""; 
    { 
    if(feof($this->connection)) 
    return(0); 
    $line.=fgets($this->connection,100); 
    $length=strlen($line); 
    if($length>=2 
    && substr($line,$length-2,2)=="\r\n") 
    return(substr($line,0,$length-2)); 
    } 
    } 
    
    Function PutLine($line) 
    { 
    return(fputs($this->connection,"$line\r\n")); 
    } 
    
    Function OpenConnection() 
    { 
    if($this->hostname=="") 
    return("2 it was not specified a valid hostname"); 
    switch(($this->connection=fsockopen($this->hostname,$this->port))) 
    { 
    case -3: 
    return("-3 socket could not be created"); 
    case -4: 
    return("-4 dns lookup on hostname \"$hostname\" failed"); 
    
    case -5: 
    return("-5 connection refused or timed out"); 
    case -6: 
    return("-6 fdopen() call failed"); 
    case -7: 
    return("-7 setvbuf() call failed"); 
    default: 
    return(""); 
    } 
    } 
    
    Function CloseConnection() 
    { 
    if($this->connection!=0) 
    { 
    fclose($this->connection); 
    $this->connection=0; 
    } 
    } 
    
    Function Open() 
    { 
    if($this->state!="DISCONNECTED") 
    return("1 a connection is already opened"); 
    if(($error=$this->OpenConnection())!="") 
    return($error); 
    $this->greeting=$this->GetLine(); 
    if(GetType($this->greeting)!="string" 
    || strtok($this->greeting," ")!="+OK") 
    { 
    $this->CloseConnection(); 
    return("3 POP3 server greeting was not found"); 
    } 
    $this->greeting=strtok("\r\n"); 
    $this->must_update=0; 
    $this->state="AUTHORIZATION"; 
    return(""); 
    } 
    Function Close() 
    { 
    if($this->state=="DISCONNECTED") 
    return("no connection was opened"); 
    if($this->must_update) 
    { 
    if($this->PutLine("QUIT")==0) 
    return("Could not send the QUIT command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get quit command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not quit the connection: ".strtok("\r\n")); 
    } 
    $this->CloseConnection(); 
    $this->state="DISCONNECTED"; 
    return(""); 
    } 
    
    Function Login($user,$password,$apop) 
    { 
    if($this->state!="AUTHORIZATION") 
    return("connection is not in AUTHORIZATION state"); 
    if($apop) 
    { 
    if($this->PutLine("APOP $user ".md5($this->greeting.$password))==0) 
    return("Could not send the APOP command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get APOP login command response"); 
    if(strtok($response," ")!="+OK") 
    return("APOP login failed: ".strtok("\r\n")); 
    } 
    else 
    { 
    if($this->PutLine("USER $user")==0) 
    return("Could not send the USER command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get user login entry response"); 
    if(strtok($response," ")!="+OK") 
    return("User error: ".strtok("\r\n")); 
    if($this->PutLine("PASS $password")==0) 
    return("Could not send the PASS command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get login password entry response"); 
    if(strtok($response," ")!="+OK") 
    return("Password error: ".strtok("\r\n")); 
    } 
    $this->state="TRANSACTION"; 
    return(""); 
    } 
    Function Statistics($messages,$size) 
    { 
    if($this->state!="TRANSACTION") 
    return("connection is not in TRANSACTION state"); 
    if($this->PutLine("STAT")==0) 
    return("Could not send the STAT command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get the statistics command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not get the statistics: ".strtok("\r\n")); 
    $messages=strtok(" "); 
    $size=strtok(" "); 
    return(""); 
    } 
    Function ListMessages($message,$unique_id) 
    { 
    if($this->state!="TRANSACTION") 
    return("connection is not in TRANSACTION state"); 
    if($unique_id) 
    $list_command="UIDL"; 
    else 
    $list_command="LIST"; 
    if($this->PutLine("$list_command $message")==0) 
    return("Could not send the $list_command command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get message list command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not get the message listing: ".strtok("\r\n")); 
    if($message=="") 
    { 
    for($messages=array(); 
    { 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get message list response"); 
    if($response==".") 
    break; 
    $message=intval(strtok($response," ")); 
    if($unique_id) 
    $messages[$message]=strtok(" "); 
    else 
    $messages[$message]=intval(strtok(" ")); 
    } 
    return($messages); 
    } 
    else 
    { 
    $message=intval(strtok(" ")); 
    return(intval(strtok(" "))); 
    } 
    } 
    
    Function RetrieveMessage($message,$headers,$body,$lines) 
    { 
    if($this->state!="TRANSACTION") 
    return("connection is not in TRANSACTION state"); 
    if($lines<0) 
    { 
    $command="RETR"; 
    $arguments="$message"; 
    } 
    else 
    { 
    $command="TOP"; 
    $arguments="$message $lines"; 
    } 
    if($this->PutLine("$command $arguments")==0) 
    return("Could not send the $command command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get message retrieval command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not retrieve the message: ".strtok("\r\n")); 
    for($headers=$body=array(),$line=0;;$line++) 
    { 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not retrieve the message"); 
    switch($response) 
    { 
    case ".": 
    return(""); 
    case "": 
    break 2; 
    default: 
    if(substr($response,0,1)==".") 
    $response=substr($response,1,strlen($response)-1); 
    break; 
    } 
    $headers[$line]=$response; 
    } 
    for($line=0;;$line++) 
    { 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not retrieve the message"); 
    switch($response) 
    { 
    case ".": 
    return(""); 
    default: 
    if(substr($response,0,1)==".") 
    $response=substr($response,1,strlen($response)-1); 
    break; 
    } 
    $body[$line]=$response; 
    } 
    return(""); 
    } 
    
    Function DeleteMessage($message) 
    { 
    if($this->state!="TRANSACTION") 
    return("connection is not in TRANSACTION state"); 
    if($this->PutLine("DELE $message")==0) 
    return("Could not send the DELE command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get message delete command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not delete the message: ".strtok("\r\n")); 
    $this->must_update=1; 
    return(""); 
    } 
    
    Function ResetDeletedMessages() 
    { 
    if($this->state!="TRANSACTION") 
    return("connection is not in TRANSACTION state"); 
    if($this->PutLine("RSET")==0) 
    return("Could not send the RSET command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not get reset deleted messages command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not reset deleted messages: ".strtok("\r\n")); 
    $this->must_update=0; 
    return(""); 
    } 
    Function IssueNOOP() 
    { 
    if($this->state!="TRANSACTION") 
    return("connection is not in TRANSACTION state"); 
    if($this->PutLine("NOOP")==0) 
    return("Could not send the NOOP command"); 
    $response=$this->GetLine(); 
    if(GetType($response)!="string") 
    return("Could not NOOP command response"); 
    if(strtok($response," ")!="+OK") 
    return("Could not issue the NOOP command: ".strtok("\r\n")); 
    return(""); 
    } 
    };
    I'm having this problem.

    Code:
    Parse error: syntax error, unexpected '{', expecting ';' in /home/dark01/public_html/POP.php on line 15
     
Thread Status:
Not open for further replies.