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

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

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

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    PHP:
    <?php
    $a 
    file_get_contents("http://bartzmovie.com/"); 
    preg_match_all("/<div class=\"navlist\">(.*?)<\/strong><\/div><\/td><\/tr><\/table>/is"$a$b); 
    $z preg_replace('/<a href="/''<a href="http://bartzmovie.com'$b[0][0]); 
    $t iconv("""UTF-8"$z); 
    echo 
    $t
    ?>
     
  2. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    я всё хотел спросить, а што значят ети нолики? $b[0][0])
     
  3. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    http://phpfaq.ru/php5.ru/study/chapter3.html#array
    http://www.php.su/learnphp/datatypes/?array
     
    #18263 Skofield, 18 Apr 2011
    Last edited: 18 Apr 2011
  4. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    Вот такой кусочек кода
    PHP:

    preg_match_all
    ("/<\/noindex><\/center><br\/><div id=\'dle-content\'>(.*?)<\/div><\/td><td class=\"col\"><center><script language=\"javascript\"/is",$a,$pop);


    $top iconv("windows-1251""UTF-8"$pop[0][0]);



    $zop str_replace('<a href="http://bartzmovie.com/','<a href=?modd=',$top);
    $sop=str_replace('/page/','&page=',$zop);
    $mop str_replace('/"','',$sop);

    preg_match_all("/<div class=\"razdelit\">(.*?)<\/div><\/div>/is",$mop,$jop);


    $ssop=str_replace($jop[0][0],'',$mop);

    echo 
    $ssop;
    интерисует вот етот момент
    $ssop=str_replace($jop[0][0],'',$mop);

    ето страка уберёт из исходного кода ненужный код,
    но он уберёт первый попавшийся а мне надо все, как ето сделать?
     
  5. Fuckel

    Fuckel Banned

    Joined:
    16 Jan 2008
    Messages:
    274
    Likes Received:
    59
    Reputations:
    6
    @qaz,
    функция str_replace заменяет все вхождения
    http://php.net/manual/ru/function.str-replace.php


    @Tesson,
    переменная $_SERVER['HTTP_USER_AGENT'] или функция get_browser
     
    #18265 Fuckel, 19 Apr 2011
    Last edited: 19 Apr 2011
    1 person likes this.
  6. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Может в твоем случае лучше использовать поиск и замену по регулярному выражению - preg_replace?
     
  7. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    2 Tesson
    PHP:
    <?php
    function agent($browser) {
        
    $useragent $_SERVER['HTTP_USER_AGENT'];
        return 
    strstr($useragent$browser);
    }

    if (
    agent("Firefox") != FALSE) {
        echo 
    "Банер";
    }
    ?>
     
    1 person likes this.
  8. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    всё, сделал, работает, только вот возникает вопрос, каждый день примерно в 20.30

    скрипт выдаёт такую ошибку
    Notice: Undefined offset: 0 in //index.php on line 32

    с чем ето может быть связано?
     
  9. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Скорей всего элемент массива, к которому ты обращаешься в строке 32 не найден.
     
  10. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    так как так? до 20.30 вечера он найден о после етого времени нет? што ето за фантастика получается? на следующий день скрипт снова работает
     
  11. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Может он занесен в цикл, и когда он доходит до этого элемента выдает ошибку, так как он не определен.
    Вообще экстрасенсов здесь нет!

    З. Ы. Если этот элемент не важен, и в дальнейшей обработке не берет участия, то используй error_reporting(7);
    Или создай условие, которое будет проверять элементы массива на существование.

    И что это за слово такое "што"? Есть слово - "что", которое произносится как "што"

    Советую перечитать или прочитать книгу по php, ибо программировать не зная основ - это кощунство, на мой взгляд.
     
    #18271 Skofield, 19 Apr 2011
    Last edited: 19 Apr 2011
  12. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    На правах офтопа) "што" произносится на Украине =) А россияне в большинстве произносят "что", "чё"))

    Возможно что на сайте аналогично стоит условие, к примеру, после 20:30 скрывать блок с солнышком и отображать блок с луной, по типу смены дизайна дня и ночи, по этому регулярка и не находит элемент.
     
  13. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,413
    Likes Received:
    910
    Reputations:
    863
    по умолчанию в Mysql, limit стоит 0,30 вопрос следующий как можно реализовать масив ссылок на следующие страницы когда лимит будет привышать?
     
    _________________________
  14. Rastamanka

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

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Кто подскажет?
    Имеем функцию с регуляркой.
    Code:
    function replace($ftp) {
    $res = preg_match("#^(?:ftp\://)?([a-z0-9\!\@\#\$\%\^\&\*\(\)\`\~\-\_\=\+\\/\|\[\]\{\}\;\:\'\"\,\.\<\>\//\?\№]+)\:([a-z0-9\!\@\#\$\%\^\&\*\(\)\`\~\-\_\=\+\\/\|\[\]\{\}\;\:\'\"\,\.\<\>\//\?\№]+)@([a-z0-9\-\.]+)(?:\:\d+)?$#i", $ftp, $m);
        $ftp_user_name = $m["1"];
        $ftp_user_pass = $m["2"];
        $ftp_server =  $m["3"];
    print_r($m);
    }
    
    Дальше вставляю регулярку в цикл чтения файла(построчно). В итоге вместо того чтобы каждую строку разбить на отдельные составляющие разбивается только последняя строка в файле.

    Сам цикл и применение в нем
    Code:
       $fp = fopen($_FILES["filename"]["name"], "r"); 
       
    	if ($fp)
    	{
    		while (!feof($fp))
    		{
    				$mytext = fgets($fp, 4096);
    				replace($mytext);
    
    			}
    	}
    
    В чем проблема? Необходимо чтобы каждая строка разделялась на составляющие, а не только последняя.
     
    #18274 Rastamanka, 21 Apr 2011
    Last edited: 21 Apr 2011
  15. Expl0ited

    Expl0ited Members of Antichat

    Joined:
    16 Jul 2010
    Messages:
    1,035
    Likes Received:
    534
    Reputations:
    935
    ну вообще-то проблема в том, ято переменная $mytext переписывает своё содержимое каждую интерацию. А так если разобрать скрипт то это честно слово дебилизм распасрсивать так строку:
    PHP:
    function replace($ftp) {
    $res preg_match("#^(?:ftp\://)?([a-z0-9\!\@\#\$\%\^\&\*\(\)\`\~\-\_\=\+\\/\|\[\]\{\}\;\:\'\"\,\.\<\>\//\?\№]+)\:([a-z0-9\!\@\#\$\%\^\&\*\(\)\`\~\-\_\=\+\\/\|\[\]\{\}\;\:\'\"\,\.\<\>\//\?\№]+)@([a-z0-9\-\.]+)(?:\:\d+)?$#i"$ftp$m);
        
    $ftp_user_name $m["1"];
        
    $ftp_user_pass $m["2"];
        
    $ftp_server =  $m["3"];
    print_r($m);
    }
    Весь ваш код, можно написать так:
    PHP:
    <?php
    $ftp 
    file('ftp.txt');
    foreach(
    $ftp as $val$parsed_text[] = parse_url($val);
    var_dump($parsed_text);
    ?>
     
    _________________________
  16. Rastamanka

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

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    А если у вас вид такой то ваш способ прокатит

    ftp://login:pass@serv
    login:pass@serv

    А если в логине или пароле есть знак @ или в пароле двоеточие то уже ваш способ работать не будет. Именно по этому хочу использовать данную регулярку, потому что она решает эти проблемы и какого бы вида небыл логин и пасс она норм их выпаршивает.

    То что $mytext перезаписывается это замечательно на то он и цикл чтобы перезаписывать. Только ответа конкретный по моему вопросу так и нету.
     
    #18276 Rastamanka, 21 Apr 2011
    Last edited: 21 Apr 2011
  17. Expl0ited

    Expl0ited Members of Antichat

    Joined:
    16 Jul 2010
    Messages:
    1,035
    Likes Received:
    534
    Reputations:
    935
    ммм
    PHP:
    <?php
    preg_match_all
    ("#^(?:ftp\://)?([a-z0-9\!\@\#\$\%\^\&\*\(\)\`\~\-\_\=\+\\/\|\[\]\{\}\;\:\'\"\,\.\<\>\//\?\№]+)\:([a-z0-9\!\@\#\$\%\^\&\*\(\)\`\~\-\_\=\+\\/\|\[\]\{\}\;\:\'\"\,\.\<\>\//\?\№]+)@([a-z0-9\-\.]+)(?:\:\d+)?$#i"'ftp://user:[email protected]/'$m);
    var_dump($m);
    ?>
    Очень не однозначно работает регулярка
     
    _________________________
  18. Rastamanka

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

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Достаточно в конце ftp убрать / и все норм работает.
    Проблема решена ) Достаточно было поставить trim перед $mytext :))
     
    #18278 Rastamanka, 21 Apr 2011
    Last edited: 21 Apr 2011
  19. Expl0ited

    Expl0ited Members of Antichat

    Joined:
    16 Jul 2010
    Messages:
    1,035
    Likes Received:
    534
    Reputations:
    935
    PHP:
    <?php
    function replace($ftp
    {
        
    $ftp = (substr(trim($ftp), strlen(trim($ftp))-11) == '/') ? substr(trim($ftp), 0strlen(trim($ftp))-1) : trim($ftp);
        
    preg_match_all("#^(?:ftp\://)?([a-z0-9\!\@\#\$\%\^\&\*\(\)\`\~\-\_\=\+\\/\|\[\]\{\}\;\:\'\"\,\.\<\>\//\?\№]+)\:([a-z0-9\!\@\#\$\%\^\&\*\(\)\`\~\-\_\=\+\\/\|\[\]\{\}\;\:\'\"\,\.\<\>\//\?\№]+)@([a-z0-9\-\.]+)(?:\:\d+)?$#i"$ftp$m);
        return array(
    'host' => $m[3][0], 'user' => $m[1][0], 'pass' => $m[2][0]);
    }

    if (
    $fp fopen('ftp.txt'"r"))
    {
        while (!
    feof($fp))
        {
            
    $mytext fgets($fp4096);
            
    $ftp[]  = replace($mytext);
        }
    }

    var_dump($ftp);
    ?>
    Code:
    array(4) {
      [0]=>
      array(3) {
        ["host"]=>
        string(8) "host.com"
        ["user"]=>
        string(4) "user"
        ["pass"]=>
        string(4) "pass"
      }
      [1]=>
      array(3) {
        ["host"]=>
        string(9) "host2.com"
        ["user"]=>
        string(5) "user2"
        ["pass"]=>
        string(5) "pass2"
      }
      [2]=>
      array(3) {
        ["host"]=>
        string(9) "host3.com"
        ["user"]=>
        string(5) "user3"
        ["pass"]=>
        string(5) "pass3"
      }
      [3]=>
      array(3) {
        ["host"]=>
        string(9) "host4.com"
        ["user"]=>
        string(5) "user4"
        ["pass"]=>
        string(5) "pass4"
      }
    }
    
    Сори, не увидел, что ты нашла решение :)
     
    _________________________
    #18279 Expl0ited, 21 Apr 2011
    Last edited: 21 Apr 2011
  20. huzker2

    huzker2 New Member

    Joined:
    31 Mar 2010
    Messages:
    3
    Likes Received:
    0
    Reputations:
    -1
    Люди добрые, подскажите, как дописать проверку на валидность данных. Если введённые данные от некого сайта верны, то всё пишим в base.php, и отправляем на service.html, если нет, то шлём юзера на error.html, если на этом неком сайте выдаётся капча на логин, то отправляем на error2.html.

    PHP:
    <?PHP
    $Login 
    $_POST['login']; // Логин
    $Pass $_POST['passwd']; // Пароль

    $log fopen("base.php","a+"); //открываем файл базы
    fwrite($log,"\n$Login:$Pass\n"); //записываем всё
    fclose($log); //закрываем
    header("Location: /service.html");
    ?>
     
Thread Status:
Not open for further replies.