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

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

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

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    а ппс как я об этом не думал,спасибо)
     
  2. Hixon

    Hixon Member

    Joined:
    17 Apr 2010
    Messages:
    88
    Likes Received:
    9
    Reputations:
    0

    У меня ещё 1 вопрос: вот есть у курла стандартаные константы, например, для UA, я не могу, не используя эту константу, работать напрямую с массивом заголовков? Или если есть константа, то этот заголовок нужно слать через неё? В курле в массиве заголовков, нужно их отделять \r\n? Или перевода строки с помощью ентер - достаточно?
    Как сказать курлу, что я отправляю Accept-Encoding?
    Спасибо за ответ.
     
  3. Byrger

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

    Joined:
    7 Mar 2008
    Messages:
    521
    Likes Received:
    26
    Reputations:
    -4
    Думаю глупый вопрос но не могу понять как реализовать.

    Переменная держит в себе число типа float
    Это может быть 11, 0.55 и т.д.
    Нужно сделать так чтоб целые числа были с 2мя нулями после запятой
    А если число не целое то так и оставлять
     
  4. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Byrger,
    PHP:
    <?php
    $i 
    15;
    if (
    is_int($i)){
    $i number_format($i2'.''');
    }
    echo 
    $i
    ?>
     
    #18864 Skofield, 23 Jul 2011
    Last edited: 23 Jul 2011
    1 person likes this.
  5. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Hixon
     
  6. qssD

    qssD New Member

    Joined:
    16 Dec 2010
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    Парни помогите сделать следующее, надо что бы программа брала строку из файла каждый час, как пройдет час после того как программа взяла строку надо что бы эта строка удалялась из файла, и бралась следующая строка по такому же принципу.
    Как такое реализовать? Подскажите, заранее благодарен!
     
  7. skrutcher

    skrutcher New Member

    Joined:
    17 Jul 2011
    Messages:
    17
    Likes Received:
    1
    Reputations:
    0
    взять и удалить надеюсь сможешь?
    а каждый час это делается через cron.
     
  8. Ponchik

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

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    я так понял ты капчу руками вводишь? а мне вот делать нечего, на вот тебе распознавалку сделал

    PHP:
    <?php

    function captcha_recognize($filename) {
        
    $symbols = array( //забиваем массив идентификаторами циферок
        
    '---XX---'.
        
    '-X---XX-'.
        
    '-X----X-'.
        
    'XX----XX'.
        
    'X------X'.
        
    'X------X'.
        
    'X------X'.
        
    'X------X'.
        
    'XX----XX'.
        
    '-X----X-'.
        
    '-XX--XX-'.
        
    '---XX---',
        
        
    '--------'.
        
    '---X----'.
        
    '-XXX----'.
        
    'XX-X----'.
        
    '---X----'.
        
    '---X----'.
        
    '---X----'.
        
    '---X----'.
        
    '---X----'.
        
    '---X----'.
        
    '---X----'.
        
    '---X----',
        
        
    '---XXX--'.
        
    '-XX---X-'.
        
    '-X-----X'.
        
    '-------X'.
        
    '------X-'.
        
    '------X-'.
        
    '-----X--'.
        
    '----X---'.
        
    '---X----'.
        
    '--X-----'.
        
    '-X------'.
        
    'XXXXXXXX',
        
        
    '--XX----'.
        
    'XX---X--'.
        
    'X----X--'.
        
    '-----X--'.
        
    '-----X--'.
        
    '---XX---'.
        
    '-----X--'.
        
    '------X-'.
        
    '------X-'.
        
    'X-------'.
        
    'X----X--'.
        
    '--XX----',
        
        
    '-----X--'.
        
    '-----X--'.
        
    '----XX--'.
        
    '---X-X--'.
        
    '-----X--'.
        
    '--X--X--'.
        
    '-X---X--'.
        
    '-----X--'.
        
    'XXXXXXXX'.
        
    '-----X--'.
        
    '-----X--'.
        
    '-----X--',
        
        
    '-XXXXXX-'.
        
    '-X------'.
        
    '-X------'.
        
    '-X------'.
        
    '---XX---'.
        
    'XX---X--'.
        
    '------X-'.
        
    '------X-'.
        
    '------X-'.
        
    'X-----X-'.
        
    '-X---X--'.
        
    '--XXX---',
        
        
    '---XXX--'.
        
    '--X---X-'.
        
    '-X----X-'.
        
    'XX------'.
        
    'X--XXX--'.
        
    'XX----X-'.
        
    'XX----X-'.
        
    'X------X'.
        
    'X------X'.
        
    '-X----X-'.
        
    '-X----X-'.
        
    '---XX---',
        
        
    'XXXXXXXX'.
        
    '------X-'.
        
    '-----X--'.
        
    '----XX--'.
        
    '----X---'.
        
    '---XX---'.
        
    '---X----'.
        
    '---X----'.
        
    '--X-----'.
        
    '--X-----'.
        
    '--X-----'.
        
    '--X-----',
        
        
    '---XX---'.
        
    '-X---XX-'.
        
    '-X----X-'.
        
    '-X----X-'.
        
    '-X----X-'.
        
    '--XXXX--'.
        
    '-X----X-'.
        
    'X------X'.
        
    'X------X'.
        
    'X------X'.
        
    '-X----X-'.
        
    '---XX---',
        
        
    '---XX---'.
        
    '-X----X-'.
        
    'XX------'.
        
    'X------X'.
        
    'X------X'.
        
    '-X----XX'.
        
    '--XXX--X'.
        
    '-------X'.
        
    '------XX'.
        
    '-X----X-'.
        
    '-X---X--'.
        
    '--XXX---');
         
        
    $return ''//это мы будем возвращать

        
    list($width$height) = getimagesize($filename); //определяем размер
      
        
    $source imagecreatefromgif($filename); //грузим картинку
        
        
    $im imagecreatetruecolor($width$height); //создаём новую
        
    imagecopyresized($im$source0000$width$height$width$height); //и сохраняем её
        //а всё потому, что на сервере капча гененируется через imagecreate вместо imagecreatetruecolor и нихера у нас без этого не получится
        //кому интересно - попробуйте брать оригинальюную картинку, imagecolorat будет возвращать рандомные данные
        
    imagedestroy($source); //выгружаем, он нам не нужен
        
        
    $was_new_symbol false//будем записывать какой была $new_symbol
        
        
    for($x=0;$x<$width;$x++) { //гоним по X
            
    $new_symbol false//мы ещё на нашли новый тёмный пиксель
            
    for($y=0;$y<$height;$y++) { //гоним по Y
                
    $color imagecolorat($im$x$y); //определяем цвет пикселя
                
                
    if($color <= 3353395) { //если цвет темнее, значит мы нашли часть циферки на капче
                    
    $new_symbol true//запоминаем
                
    }
            }
            if(
    $new_symbol == true && $was_new_symbol == false) { //если в предыдушем цикле мы нашли циферку, а в прошлый раз там все пиксели были светлые, значит точно нашли
                
    $id ''//создаём идентификатор
                
    $matches = array(0,0,0,0,0,0,0,0,0,0); //записываем кол-во совпадений
                
                
    for($y2=4;$y2<=15;$y2++) { //гоним по Y 4 - 15 там размещается циферка по высоте
                    
    for($x2=$x;$x2<=$x+7;$x2++) { //гоним по X - X+7 там размещается циферка по ширине
                        
    $color imagecolorat($im$x2$y2); //определяем цвет
                        
    if($color <= 3353395) { //если пиксель тёмный, пишем в индентификатор "X" иначе пишем "-"
                            
    $id .= 'X';
                        }else{
                            
    $id .= '-';
                        }
                    }
                }
                
                foreach (
    $symbols as $symbol=>$symbol_id) { //берём наш массив идентификаторов
                    
    $len strlen($symbol_id); //определяем длину идентификатора
                    
    for($i=0;$i<$len;$i++) { //гоним по длине и берём по 1му символу ("-" или "X")
                        
    if($id[$i] == 'X' && $symbol_id[$i] == $id[$i]) { //если текущий символ "X" и он совпадает с символом идентификатора
                            
    $matches[$symbol]++; //записываем это совпадание
                        
    }
                    }
                }
                
    arsort($matches); //сортируем совпадания по убыванию
                
    $return .= key($matches); //берём первый ключ - это и есть циферка, которую мы ищем
            
    }
            
    $was_new_symbol $new_symbol//запоминаем нашли мы тёмный пиксель или нет за этот прогон
        
    }
        
    imagedestroy($im); //выгружаем капчу из памяти
        
        
    return $return//возвращаем строку
    }
    ?>
    прокомментировал там тебе всё, чтоб разобрался
    никаких обработок ошибок не делал, сам давай

    сохраняешь свою http://www.wmraskrutim.ru/img.php?type=login например в C:/captcha.gif
    только куки не забудь передать
    потом $code = captcha_recognize('C:/captcha.gif');
    в $code будут твои числа с картинки
    время распознования 0.024 секунды... на моих 6 ядрах 3.2 :cool:


    ух, накодился я, можно и погамать
     
    1 person likes this.
  9. Hixon

    Hixon Member

    Joined:
    17 Apr 2010
    Messages:
    88
    Likes Received:
    9
    Reputations:
    0
    Ponchik, ты когда массив symbols заполнял, то использовал какой-то шаблон (всегда цифры так выглядят), или каким-то образом сам просчитывал расположение цифр?

    Какой проверки данных, которые пришли из форм, достаточно, чтобы обезопасить себя от самых простых xss?
    Делаю так:
    PHP:
    if(
        isset(
    $_POST['name']) && !empty($_POST['name'])  && !is_array($_POST['name'])
    ){
        
        
    $name stripslashes(trim(htmlspecialchars($_POST['name'],ENT_QUOTES)));
    }
     
  10. Ponchik

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

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    PHP:
    if($color <= 3353395) { //если пиксель тёмный, пишем в индентификатор "X" иначе пишем "-" 
       
    $id .= 'X'
    }else{ 
       
    $id .= '-'
    }
    echo $id; :rolleyes:

    stripslashes делает как mysql_real_escape_string только наоборот
    в общем если у тебя этот $name не идёт в MySQL или в инклуд то норм
    а так это сразу и SQL Inj и нуллбайт
     
    #18870 Ponchik, 24 Jul 2011
    Last edited: 24 Jul 2011
  11. Hixon

    Hixon Member

    Joined:
    17 Apr 2010
    Messages:
    88
    Likes Received:
    9
    Reputations:
    0
    Не, не, вопрос про другое. Ты в начале составил массив, в котором с помощью символа X записаны все цифры от 0 до 9. Ты чем руководствовался, когда его составлял? Или ты сначала выводил переменную $id, а потом на основание вывода этой переменной получал набор символов, которые характеризуют это число? Т.е., сначала нужно написать все кроме массива с символами, характеризующими числа, а затем составить этот пасив?



    Как будет выглядеть скрипт, который принимает из формы данные, которые идут в бд? Желательно, без использования PDO, т.к. я с ним плохо работаю. Чтобы человек, который прочитал статьи про виды уязвимостей, не смог провести атаку?


    Создал на своем хостинге простенькую страницу, в которой есть форма из двух полей: текстовое поле и сабмит. Выключил magic quote, написал вывод переменной из формы на этой же странице, хотел поглядеть, будет ли выполняться алерт в форме. К моему удивлению, алерт не выполнялся. Символы ,"\/<> выводились, а <gserge> - нет. На каком уровне происходит защита? На уровне настройки пхп? Кстати, < script > - выводилось.

    Буду рад услышать ответы на все вопросы. Спасибо.
     
  12. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Hixon
    Если вы жаждете получать неожиданные результаты, как, например, с Encoding - можете работать с заголовками через CURLOPT_HTTPHEADER. Но я сильно рекомендую писать правильный код. На второй вопрос ответил krypt3r

    Уберите stripslashes и trim - ими вы только вредите себе (точнее первым вредите, второй бесполезен). Плюс если используете одинарные кавычки у аттрибутов, устаналивайте второй параметр htmlspecialchars в ENT_QUOTES.

    https://forum.antichat.ru/thread30641.html
     
    _________________________
    #18872 Gifts, 24 Jul 2011
    Last edited: 24 Jul 2011
  13. Hixon

    Hixon Member

    Joined:
    17 Apr 2010
    Messages:
    88
    Likes Received:
    9
    Reputations:
    0
    Gifts, спасибо за ответы. Много человек мне сказали, что с курлом нужно работать, используя константы, а не на прямую с заголовками. Мол, если я хочу использовать заголовки, то нужно переходить на сокеты, которых, к сожалению, пока я не знаю. Вероятно, люди правы, буду использовать константы.

    За это - отдельное спасибо.
     
  14. pitter

    pitter New Member

    Joined:
    2 Oct 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Всем привет,подскажите пожалуста,скачал файлообменник на пхп,постаивл денвер,у мну свой сервак,в денвере изменил post и upload поставил размер 2000м где то,
    но не могу никак понять файлы загружаются и выдается ссылка на скачивание, но более 128 метров файлы не скачиваются с сервака,хотя они тама лежат в зашифрованном виде в папке,а менее 128 мегабайт спокойно можно скачать по ссылке,в чем может быть проблема,подскажите плиииз((
     
  15. Ponchik

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

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    в php.ini найди memory_limit = 128M
    но это ололо какой неправильный файлообменник ты скачал, если 10 человек будут качать файлы по 1гб, у тебя сервер будет жрать 10 гигов оперативки :rolleyes:
    найди там где он делает file_get_contents или чёто такое и перепиши на fread
    да, так и сделал
    но что значит сначала всё сделать :rolleyes: распознавание без массива не сделаешь
    методом тыка вычисляешь насколько тёмные пиксели тебе подходят
    ищешь начало циферок
    определяешь какие пиксели записывать в идентификатор, если капча большая и всегда одинаковая, то можешь по +10 пропускать
    ну и выводишь это, делаешь массив, и потом уже сравниваешь
    но эта капча она немного рандомная, пиксели не совпадают на 100% пришлось делать количество совпадений
     
    #18875 Ponchik, 25 Jul 2011
    Last edited: 25 Jul 2011
    1 person likes this.
  16. pitter

    pitter New Member

    Joined:
    2 Oct 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Менял я memory_limit и 2000м ,ставил все равно тоже самое(((, file_get_contents, не могу такого найти,смотрел download.php и upload.php,скрипт называется mini file host,скачивал и другие где есть шифрование ,примерно такая же проблема(,закачивает но не качает более 128 м
     
  17. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    отправляю сообщение через курл на форум, соощение приходит в таких символах

    Новости
    23.07.2011
    Р*абота системы была восстановлена
    Можете вернуть коды, учет трафика производится.

    как мне быть из какой кодировки в какую кодировать?
     
  18. dinar_007

    dinar_007 Мадемуазель

    Joined:
    18 Jan 2005
    Messages:
    1,019
    Likes Received:
    770
    Reputations:
    97
    Скорей всего вы передаёте на форум сообщение в кодировке win1251, а на форуме кодировка utf8, нужно перед отправкой перекодировать сообщение командой convert_cyr_string и дело в шляпе...
     
    1 person likes this.
  19. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    спасибо, попробую

    ещо вопрос, есть файл с текстом

    PHP:
    <div class="new">
                                <
    span class="date">23.07.2011</span>
                                <
    span class="title">Работа системы была восстановлена</span>
                                <
    span class="text">Можете вернуть кодыучет трафика производится.</span>
    нужно оставить только русские буквы без тегов
    делаю так

    PHP:
    $aa preg_replace('<(.*?)>','',$a[0]);
    тоесть он должен удалить всё што между < > а удаляет всё, как быть?
     
  20. #Wolf#

    #Wolf# Elder - Старейшина

    Joined:
    26 Mar 2008
    Messages:
    375
    Likes Received:
    166
    Reputations:
    16
    strip_tags('<span class="date">23.07.2011</span>');
     
    1 person likes this.
Thread Status:
Not open for further replies.