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

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

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

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Учтите, что для предложенных вами методов должен быть allow_url_fopen = On. Как альтернатива - выше по обсуждению тыщу раз обсуждался вопрос получения содержимого файла через сокеты.
     
  2. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    Ах да!
    PHP:
    <?php 
    $fp 
    fsockopen("ultracomp.ru"80$errno$errstr30); 
    if (!
    $fp) { 
        echo 
    "$errstr ($errno)<br />\n"
    } else { 
        
    $out "GET /prices/ULTRA_Msk_All_Txt.txt HTTP/1.1\r\n"
        
    $out .= "Host: www.ultracomp.ru\r\n"
        
    $out .= "Connection: Close\r\n\r\n"

        
    fwrite($fp$out); 
        while (!
    feof($fp)) { 
            
    $f .= fgets($fp128); 
        } 
        
    fclose($fp); 

    $f explode("\r\n\r\n",$f);
    $f[0] = null;
    $f implode($f);
    echo 
    "File:<br>$f"
    ?>
    ;)
     
    #482 Ponchik, 14 Sep 2007
    Last edited: 14 Sep 2007
  3. skivig

    skivig New Member

    Joined:
    31 Jul 2007
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Как сделать перекодировку к аплоудеру, что бы русские файлы транслитом перестраховывались в английские?
     
  4. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    skivig, http://use-google.narod.ru/


    Скрипт переводит русский текст в транслит (предоставлен Дрыгой Андреем ([email protected])).
    /*Дрыга - это фамилия аффтара, а не моя :D */
    PHP:
    <?php

      
    // функция превода текста с кириллицы в траскрипт

      
    function encodestring($st)

      {

        
    // Сначала заменяем "односимвольные" фонемы.

        
    $st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_",

        
    "abvgdeeziyklmnoprstufh'iei");

        
    $st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_",

        
    "ABVGDEEZIYKLMNOPRSTUFH'IEI");

        
    // Затем - "многосимвольные".

        
    $st=strtr($st

                        array(

                            
    "ж"=>"zh""ц"=>"ts""ч"=>"ch""ш"=>"sh"

                            
    "щ"=>"shch","ь"=>"""ю"=>"yu""я"=>"ya",

                            
    "Ж"=>"ZH""Ц"=>"TS""Ч"=>"CH""Ш"=>"SH"

                            
    "Щ"=>"SHCH","Ь"=>"""Ю"=>"YU""Я"=>"YA",

                            
    "ї"=>"i""Ї"=>"Yi""є"=>"ie""Є"=>"Ye"

                            
    )

                 );

        
    // Возвращаем результат.

        
    return $st;

      }
    echo 
    encodestring('Превед медвед');

    ?>
     
    #484 Ponchik, 14 Sep 2007
    Last edited: 15 Sep 2007
    2 people like this.
  5. Meanor

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

    Joined:
    9 Sep 2007
    Messages:
    66
    Likes Received:
    9
    Reputations:
    0
    Задача:
    Юзер авторизируется на сайте, в бд, в его записи online = 1. А вот если юзер закрывает окно с сайтом или нажимает на ссылку Exit , то online = 0. Если со ссылкой все более менее понятно, то как реализовать выход по закрытию браузера используя пхп ?
     
  6. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Meanor, online должна быть сессионной переменной, она сама уничтожится по истичении времени сессии (читай - после x минут отсутствия какой-либо активности юзера на сайте)
     
  7. Meanor

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

    Joined:
    9 Sep 2007
    Messages:
    66
    Likes Received:
    9
    Reputations:
    0
    Да, это все решает, но... Мне, например, надо вывести список юзеров онлайн. Это можно сделать лишь через бд, выводя имена тех, у кого online = 1. Но как сделать этот параметр зависимым от соответствующего параметра сессии?



    PS. Еще один вопрос по поводу бана по ип. Чаще всего у юзера динамический айпи, а значит, что при каждом заходе в сеть, он меняется... Следовательно просто сравнивать прошлый айпи юзера с теперяшним ничего не даст... Как делается бан в таком случае?
     
  8. Ch3ck

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

    Joined:
    9 Jun 2006
    Messages:
    1,363
    Likes Received:
    1,192
    Reputations:
    430
    На счёт onLine:
    http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=196
     
    1 person likes this.
  9. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    По поводу первого - тема много раз обсуждалась на различных форумах о веб-программировании, поищи примеры либо используй готовую реализацию. По поводу второго - бань по IP+Cookies, либо всю подсеть :)
     
  10. Meanor

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

    Joined:
    9 Sep 2007
    Messages:
    66
    Likes Received:
    9
    Reputations:
    0
    Спасиб, вся соль была в функции session_id(), которая мне была неизвестна =(...

    Мне когда-то говорили, что если запрос к бд стоит в цикле (например в for ), то эт не правильно и скрипт нужно переделывать...
    Настолько ли это критично?
     
  11. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Meanor, по моим меркам - это весьма критично...
     
  12. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    ИМХО писать time() вместо 0,1 потом SELECT COUNT(*) FROM `users` WHERE `online` < time()+60*5
    Так ты выведеш всех юзверей которые открывали сайт в течении 5 минут
     
  13. n1†R0x

    n1†R0x Elder - Старейшина

    Joined:
    20 Jan 2007
    Messages:
    728
    Likes Received:
    376
    Reputations:
    235
    По поводу юзеров онлайн - мой вариант.

    Писал по памяти, мб немного криво или где-то ошибся, нет возможности потестить. Писал на сессиях.

    Mod:
    PHP:
    <?php
    session_start
    ();
    $id_sess session_id();
    $interv "5";

    include 
    "config.php"//db conf

    $res mysql_query("SELECT * FROM `sessions` WHERE `id_sess` = '$id_sess'");
    if (!
    $res) exit ("Bad MySQL Struct!");
    if (
    mysql_num_rows($res) > 0)
    {
        
    $result mysql_query("UPDATE `sessions` SET `up_date` = NOW(), user = '".$_SESSION['user']."' WHERE `id_sess` = '$id_sess'");
    }
    else
    {
        
    $result mysql_query("INSERT INTO `sessions` VALUES ('$id_sess', NOW(), '".$_SESSION['user']."'");
        if (!
    $result)
        exit (
    "Error! Cannot add user!");
    }
    $result mysql_query("DELETE FROM `sessions` WHERE `up_date` < NOW() - INTERVAL '$interv' MINUTE");
    ?>
    SQL:
    PHP:
    CREATE TABLE `sessions` (
        `
    id_sess`     tinytext NOT NULL,
        `
    up_date`    datetime NOT NULL default '0000-00-00 00:00:00',
        `
    user`         tinytext NOT NULL
        
    ); 
     
  14. Meanor

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

    Joined:
    9 Sep 2007
    Messages:
    66
    Likes Received:
    9
    Reputations:
    0
    Да, именно так я и сделал... Но потом увидел, что можно сэкономить кучу байтов, просто используя функцию time в бд в столбце online.
    Потом запрашивать:
    PHP:
     $timep $time 60 10;
     
    db_query("SELECT * FROM `users` WHERE `online` > $timep;")
    Спасибо Пончику =)
     
    #494 Meanor, 17 Sep 2007
    Last edited: 17 Sep 2007
  15. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    Meanor, не забывай на каждой странице писать в online новый time() потомучто как я понял, он у тебя пишется только при входе, поэтому будет показывать только число юзверей залогинившехся в течении 10 минут, а не обновивших сайт в течении 10 минут. Ну ты мну я думаю понял
     
  16. Darkweider

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

    Joined:
    8 Feb 2007
    Messages:
    142
    Likes Received:
    13
    Reputations:
    0
    PHP:
    $co file_get_contents($url); //получаем содержимое
    $res1 strpos($co,"не найдено");
    Вопрос: функция strpos() будет искать до первого вхождения или пробежит весь файл? Можно ли организовать более быстрый поиск?
     
    1 person likes this.
  17. n1†R0x

    n1†R0x Elder - Старейшина

    Joined:
    20 Jan 2007
    Messages:
    728
    Likes Received:
    376
    Reputations:
    235
    куда уж быстрее
    php.net не рулит нынче?

    http://ru.php.net/manual/ru/function.strpos.php
     
    1 person likes this.
  18. genom--

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

    Joined:
    9 Jul 2006
    Messages:
    668
    Likes Received:
    416
    Reputations:
    288
    челы в общем надо чтобы скрипт пахал постоянно пока не закончт так сказать начатое
    я ставлю ему
    ignore_user_abort(1);
    @set_time_limit(0);

    но серавно на некоторых серваках он работает но потом вылетает с эрором о конфигурации сервера

    как заставить работать его постоянно чтобы не случилось -- или это из-за конфига php??
     
  19. Y.Dmitriy

    Y.Dmitriy Banned

    Joined:
    14 Mar 2007
    Messages:
    208
    Likes Received:
    85
    Reputations:
    16
    @set_time_limit(0); просто укажи большое время... у мну работало...
     
  20. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    там же @ стоит. значит ошибка из-за ignore_user_abort(1); или нет?
     
Thread Status:
Not open for further replies.