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

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

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

    N2kroot New Member

    Joined:
    25 Oct 2009
    Messages:
    75
    Likes Received:
    3
    Reputations:
    0
    http://yandex.ru/b/
    http://yandex.ru/b/index.php?feuhfbheri
    Одно и тоже у скрипта...
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    N2kroot С учетом длины строки, для одинаковых по количеству / урлов. Для больших списков - не советую применять, так как скорость будет не ахти
    PHP:
    $str 'http://yandex.ru/a/a/a/
    http://yandex.ru/
    http://yandex.ru/b/
    http://yandex.ru/a/index.php?feuhfbheri
    http://yandex.ru/index.php?feuhfbheri'
    ;

    $arr explode("\n",$str);

    function 
    cmp($a,$b)
    {
        if (
    substr_count($a,'/') > substr_count($b,'/')) return 1;
        elseif (
    substr_count($a,'/') < substr_count($b,'/')) return -1;
        if (
    strlen($a)>strlen($b)) return 1;
        return -
    1;
    }

    usort($arr,'cmp');
    var_dump($arr);
     
    _________________________
  3. apolon47

    apolon47 Banned

    Joined:
    13 Apr 2009
    Messages:
    119
    Likes Received:
    14
    Reputations:
    4

    а еще и при том) возможно) при помощи сокетов или парсера) реализовано уже
     
  4. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    PHP:
    <?php 
    if (!$_POST['draw']):
    ?>
    <form name="draw_ub" method="post" action="index.php">
        <input type="text" name="name" />
        <input type="text" name="text" />
        <input type="submit" name="draw" value="draw" />
    </form>
    <?php
    else:
    Header("Content-type:image/png");//Какбэ намекаем браузеру,что выводить надо картинку (убери эту строку и запусти скрипт. Ну,как? Понравилось? :-D
        
    function check_len($to_check)//ф-ция,для проверки количества сиволов ( не должно превышать 58)
        
    {
            if(
    strlen($to_check)>58)
            {
                
    Header("Content-type:image/png");//Какбэ намекаем браузеру,что выводить надо картинку (убери эту строку и запусти скрипт. Ну,как? Понравилось? :-D
                
    $imag=imageCreateFromJPEG("images/fail.jpeg");
                
    ImageJpeg($imag);
                exit();
            }
        }
        
        
    $form="<input type='text' name='get_bb' value='{$_SERVER['HTTP_HOST']}.{$file_dir}' />";
        
    $username=(string)$_POST['name'];//%username
        
    $text=(string)$_POST['text']; //Что сказал чел?
        
    check_len($username); //Проверяем 1 вводимую строку
        
    check_len($text);//Проверяем 2 вводимую строк
        
    $image=imageCreateFromPng("images/sample.png"); //Создаем ящик для хранения картинки
        
    $text_color=imageColorAllocate($image,198,198,198);//Задаем цвет текста(формат RGB)
        
        
    echo $form;
        
    ImageTTFText($image605014$text_color"include/hooge.ttf""Прибежал {$username} и сказал:");//Рисуем текстик :)
        
    ImageTTFText($image605032$text_color"include/hooge.ttf"$text);//2 строка
        
    ImagePng($image);//Собственно выводим саму картинку в браузер
        
    ImagePng($image,"images/".$file_dir=rand('a','z').md5(rand(1,'z')).md5(time()+rand(1,10)).".png");
        
    ImageDestroy($image);//Освобождаем место :)    
        
    endif;
    ?>
    Как сделать так,что бы работал :confused:
    Я знаю,что трабла в хеадерах,а что делать - хз.
     
  5. KrafT

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

    Joined:
    29 Nov 2004
    Messages:
    62
    Likes Received:
    2
    Reputations:
    0
    Помогите плс

    Как зделать чтоб он сразу из всех найденых выдовал только последний ид ????
    PHP:
        preg_match_all('#/v2/video/watch/([0-9]*)/#'$ff$idzPREG_SET_ORDER);
        
    $cc count($idz[1]);
    foreach (
    $idz as $ids) {
                if (!
    in_array($ids[1], $f_ids))
                    
    $f_ids[] = $ids[1];
     
  6. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    На скорую руку, может конечно есть логичнее решение, незадумывался.
    PHP:
    <?php
    $var 
    '
    /v2/video/watch/1/
    /v2/video/watch/2/
    /v2/video/watch/3/
    /v2/video/watch/4/'
    ;

    if(
    preg_match_all('#/v2/video/watch/(.*)/#',$var,$m)) {
    $count count($m[0]);
    echo 
    $m[0][$count-1];    
    }
    ?>
     
  7. KrafT

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

    Joined:
    29 Nov 2004
    Messages:
    62
    Likes Received:
    2
    Reputations:
    0
    Непокатит =[[ Помогите народ плс =]
     
    #13407 KrafT, 6 Jan 2010
    Last edited: 6 Jan 2010
  8. Byrger

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

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    кроме return както можно вывести переменную из функции?
    Что-то типа глобальной переменной?
     
  9. KrafT

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

    Joined:
    29 Nov 2004
    Messages:
    62
    Likes Received:
    2
    Reputations:
    0
    Выручите плс

    Как зделать чтоб он сразу из всех найденых ид выдовал только последний найдэный ид ????
    PHP:
    preg_match_all('#name=(.*)></a><font class#'$wp$kolPREG_SET_ORDER);
        
    $cc count($kol[1]);
    foreach (
    $idz as $ids) {
                if (!
    in_array($ids[1], $f_ids))
                    
    $f_ids[] = $ids[1];
        echo 
    "Poslednij name $id\n";
     
  10. apolon47

    apolon47 Banned

    Joined:
    13 Apr 2009
    Messages:
    119
    Likes Received:
    14
    Reputations:
    4
    про array_reverse почитай
     
  11. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    Лишняя нагрузка, может там 1000 ссылок, имхо лучше как я предложил подсчитать count() -1
     
    1 person likes this.
  12. Tisar

    Tisar New Member

    Joined:
    12 Sep 2009
    Messages:
    18
    Likes Received:
    0
    Reputations:
    0
    Отпарсил одну страницу с помощью DOM и хочу полученные данные занести в БД MySQL.
    Моя БД:

    Code:
    CREATE TABLE `jyf` (
      `gf` varchar(5) collate cp1251_general_cs NOT NULL,
      PRIMARY KEY  (`gf`),
      FULLTEXT KEY `gf` (`gf`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COLLATE=cp1251_general_cs;
    Скрипт записи в БД:
    PHP:
    mysql_connect('127.0.0.1''root''') or die ('Не могу подключится к серверу');
    mysql_select_db('hgf');
    $lvl=iconv('utf-8''windows-1251'$lvl);
    mysql_query("INSERT INTO jyf VALUES ('$lvl')")  or die ("Запись в БД не удалась<br>");
    После парсинга текст в кодировке UTF-8, преобразую его в windows-1251 и в таком виде записываю в БД.

    Что оказывается в БД:
    Code:
    INSERT INTO `jyf` VALUES ('\r\n   ');
    Если вывести на страницу после перекодировки на страницу, то всё отображается нормально. Должна была записана цифра 6.
    Что я делаю не так?
     
    #13412 Tisar, 6 Jan 2010
    Last edited: 7 Jan 2010
  13. Dark_cracker

    Dark_cracker Member

    Joined:
    29 May 2009
    Messages:
    73
    Likes Received:
    8
    Reputations:
    1
    Интересует вопрос как через curl , пройти basic авторизацию , гугл молчит ... вот например в http есть такая фича
    Code:
    CURLOPT_POSTFIELDS
    , а вот для бейсика не могу найти :(
     
  14. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Dark_cracker CURLOPT_HTTPAUTH и CURLOPT_USERPWD

    Или "напрямую", через CURLOPT_HTTPHEADER
     
    _________________________
    1 person likes this.
  15. Markus_13

    Markus_13 Member

    Joined:
    19 Feb 2009
    Messages:
    74
    Likes Received:
    19
    Reputations:
    0
    решил сделать чтобы сайт собирался "покусочкам" - создал неск-ко файлов с теми данными которые на многих страницах совпадают, к примеру в одном файле находятся след. данные: заголовок файла до <head>, постоянные теги хеда (оформление и т.д.), последние строки файла (</html> и комент что типа сайт написан мной =))
    в страничках на пхп написан код который загружает этот файл и выводит нужные данные (они разбиты построчно)...
    ВОПРОС: не будет ли нагрузка на сервер слишком большой? возможно лучше использовать include() или что-то еще?
    Или вообще отказаться от этого? (просто так значительно быстрей и удобней редактировать сайт)
    З.Ы. сори за глупый вопрос, но гугл мне не помогает))
     
  16. Markus_13

    Markus_13 Member

    Joined:
    19 Feb 2009
    Messages:
    74
    Likes Received:
    19
    Reputations:
    0
    m0Hze, спс, оч. много ценной информации!
    если кто не понял - перефразирую:
    какой способ этой самой "шаблонизации" наиболее эффективен? и стоит ли его использовать там где можно обойтись статическим контентом?
     
  17. Maxxxtri23

    Maxxxtri23 New Member

    Joined:
    20 Dec 2008
    Messages:
    76
    Likes Received:
    1
    Reputations:
    0
    Имеется php скрипт для работы с сокетами
    PHP:
    <?php
    error_reporting
    (E_ALL);

    /* Позволить сценарию зависнуть вокруг ожидания подключений */
    set_time_limit(0);

    /* Включить неявный вывод, так что мы видим то, что мы получаем
     * когда это приходит . */
    ob_implicit_flush();

    $address '127.0.0.1';
    $port 10000;

    if ((
    $sock socket_create(AF_INETSOCK_STREAMSOL_TCP)) < 0) {
        echo 
    "socket_create() failed: reason: " socket_strerror($sock) . "\n";
    }

    if ((
    $ret socket_bind($sock$address$port)) < 0) {
        echo 
    "socket_bind() failed: reason: " socket_strerror($ret) . "\n";
    }

    if ((
    $ret socket_listen($sock2)) < 0) {
        echo 
    "socket_listen() failed: reason: " socket_strerror($ret) . "\n";
    }

    do {
        if ((
    $msgsock socket_accept($sock)) < 0) {
            echo 
    "socket_accept() failed: reason: " socket_strerror($msgsock) . "\n";
            break;
        }
        
    /* Send instructions. */
        
    $msg "\nWelcome to the PHP Test Server. \n" .
            
    "To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
        
    socket_write($msgsock$msgstrlen($msg));

        do {
            if (
    false === ($buf socket_read($msgsock2048PHP_NORMAL_READ))) {
                echo 
    "socket_read() failed: reason: " socket_strerror($ret) . "\n";
                break 
    2;
            }
            if (!
    $buf trim($buf)) {
                continue;
            }
            if (
    $buf == 'quit') {
                break;
            }
            if (
    $buf == 'shutdown') {
                
    socket_close($msgsock);
                break 
    2;
            }
            
    $talkback "PHP: You said '$buf'.\n";
            
    socket_write($msgsock$talkbackstrlen($talkback));
            echo 
    "$buf\n";
        } while (
    true);
        
    socket_close($msgsock);
    } while (
    true);

    socket_close($sock);
    ?>
    Если подключаться к нему неткатом или самописным клиентом на делфи то все сообщения через сокет нормально проходят и если отправить quit то соединение благополучно закрывается и php скрипт продолжает работать. А если не отсылать quit, а просто закрыть прогу, то скрипт выдает
    Code:
    Warning: socket_read(): unable to read from socket [0]: ╙фрыхээ√щ їюёЄ яЁшэєфшЄх
    ы№эю ЁрчюЁтры ёє∙хёЄтє■∙хх яюфъы■ўхэшх.
     in D:\xampp\htdocs\index.php on line 37
    socket_read() failed: reason: ═хтхЁэр* ЇєэъЎш*.
    И соответственно перестает работать. Что нужно исправить, чтобы при закрытии клиента без предварительной отправки quit скрипт продолжал работать?

    P.S. как исправить кодировку тоже немогу понять.
    Запускаю скрипт командой D:\xampp\php\php.exe D:\xampp\htdocs\index.php
     
    #13417 Maxxxtri23, 7 Jan 2010
    Last edited: 7 Jan 2010
  18. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    PHP:
            if (false === ($buf socket_read($msgsock2048PHP_NORMAL_READ))) {
                echo 
    "socket_read() failed: reason: " socket_strerror($ret) . "\n";
                break 
    2;
            }
    Заменить на
    PHP:
            if (false === ($buf = @socket_read($msgsock2048PHP_NORMAL_READ))) {
                echo 
    "Client diconnected";
                break;
            }
     
    _________________________
    1 person likes this.
  19. v1149906

    v1149906 New Member

    Joined:
    1 Jan 2010
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    НУЖНА ПОМОЧЬ НЕМОГУ РАЗОБРАТЬСЯ

    выполняю вход в админку захожу вот только чтоб мне куда нить зайти в этой админке мне надо повторно выполнять вход а точнее я нажимаю на любую станичку из меню и опять мне надо выпплнить вход в одминку и я поподаю на ту страничку на которую я нажал это еще терпимо но когда на своем же сайте зарегистрироваться неможешь вот это уже бесит пож помогите решить эту проблему че за хрень с сайтом :confused:
     
  20. wildshaman

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

    Joined:
    16 Apr 2008
    Messages:
    477
    Likes Received:
    483
    Reputations:
    99
    Включи cookies в браузере
     
Thread Status:
Not open for further replies.