За последние 24 часа нас посетил 222921 программист и 2215 роботов. Сейчас ищет 1471 программист ...

Превозмогания тред

Тема в разделе "PHP для новичков", создана пользователем ubunta2, 27 июн 2017.

  1. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @ubunta2 на английском есть два сайта
    https://regexper.com/
    и http://regexr.com/ вкладка explain,
    они более менее объясняют как сработало твоё регулярное выражение.

    Но ты так не ответил что конкретно не понятно, может строка 2 кода или 3
     
    ubunta2 нравится это.
  2. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    не понял как preg_match взял 15
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    напиши сюда что делает эта регулярка. слева-направо читается легко.
     
    ubunta2 нравится это.
  4. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    $str = "2015-12-15";
    $re = '|^(?:\d{4})-(?:\d{2})-(\d{2})$|';
    '|^(?:\d{4})= карману 2015
    (?:\d{2}) карману 12
    (\d{2})$| карману 15
    ? квантификатор
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Код (Text):
    1. $re = '|^(?:\d{4})-(?:\d{2})-(\d{2})$|';
    анатомия данного регулярного выражения:
    1. Разделитель - пайп "|", выражений - одно (между пайпами).
    2. Выражение содержит каретку "^" и бакс "$" - указывает на то, что поиск будет производиться по целой строке от первого символа в строке, до последнего символа - перевода строки или нулевого байта.
    3. Выражение захватывает три группы цифр - четыре цифры, две цифры и еще две цифры. Между группами обязательно должны быть символы минуса "-".
    4. Выражение пропускает первую и вторую группу захвата. Об этом нам сообщает последовательность "?:". Третья группа становится логически первой.
    5. Следовательно, результат разбора, помещенный в переменную, будет содержать в себе два индекса - 0 - строку совпадения и 1 - первую группу захвата, ту самую третью группу с учетом пропуска первых двух.

    Применение к "2015-12-15":
    1. строка начинается с четырех цифр? Да. Далее минус? Да. Далее две цифры? Да. Далее минус? Да. Далее две цифры? Да. Достигли конца строки? Да. Совпадение успешное, matches[0] = "2015-12-15".
    2. Первая группа - 2015. Пропускается. matches[1] - неопределён.
    3. Вторая группа - 12. Пропускается. matches[1] - неопределён.
    4. Третья группа - 15. Не пропускается. matches[1] = '15'.
    == конец применения регулярного выражения к строке ==
     
    ubunta2 нравится это.
  6. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    а где об этом можно нормально почитать, чтоб понять хорошо?
    --- Добавлено ---
    где об этом нормально описано, чтоб понять?
    --- Добавлено ---
    по твоему описанию я понял, но где об этом можно так почитать?
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @ubunta2 вообще обо всём пхп понятно написано в мануале. Проблема в прокладке между монитором и стулом. Если человек не склонен к алгоритмам, то ему любой текст будет непонятным.
     
    ubunta2 нравится это.
  8. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Да, но нет. Про пропуски, вперёд-назад, именованные группы - ни слова. Тебе весь раздел читать надо.
     
    ubunta2 нравится это.
  10. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
  11. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    Код (Text):
    1. <?php
    2. if ($_POST["upload"]){
    3.     print_r($_FILES);
    4. }
    5.  
    6. ?>
    7. <html>
    8. <head>
    9.     <title>Загрузка файлов</title>
    10. </head>
    11. <body>
    12.     <h1>Загрузка файлов</h1>
    13.     <form name="myform" action="index.php" method="post" enctype="multipart/form-date">
    14.         <table>
    15.         <tr>
    16.         <td>Изображение</td>
    17.         <td>
    18.         <input type="file" name="image"/>
    19.         </td>
    20.         </tr>
    21.         <tr>
    22.         <td>Текст</td>
    23.         <td>
    24.         <input type="file" name="text"/>
    25.         </td>
    26.         </tr>
    27.         <tr>
    28.         <td colspan="2">
    29.             <input type="submit" name="upload" value="Загрузить файл" />
    30.        
    31.         </tr>
    32.         </table>
    33.     </form>
    34.     </body>
    index.php
    PHP:
    1. <?php
    2.  
    3.         abstract class Upload{
    4.    
    5.         protected $dir;
    6.         protected $mime_types;
    7.        
    8.         public function uploadFile($file){
    9.             if(!$this->isSecurity($file)) return false;
    10.             $uploadFile = $this->dir."/".$file["name"];
    11.             return move_uploaded_file($file["tmp_name"], $uploadFile);
    12.         }
    13.     public function isSecurity($file){
    14.         $blacklist = array (".php", ".phtml", ".php3", ".php4", ".html", ".htm");
    15.         foreach ($blacklist as $item){
    16.             if (preg_match("/$item\S/i", $file["name"])) return false;
    17.         }
    18.         $type = $file["type"];
    19.         for ($i = 0; $i< count($this->mime_type); $i++){
    20.             if ($type == $this->mime_type($i)) break;
    21.             if ($i + 1 == count($this->mime_type($i)) return false;
    22.  
    23.         }
    24.         $size = $file["size"];
    25.         if ($size > 2048000) return false;
    26.         return true;
    27.     }
    28.         }
    29. ?>
    upload_clas.php
    <?php
    require_once "upload_class.php";

    class UploadText extends UYpload {

    protected $dir = "text";
    protected $mime_types = array("text/png", "text/jpeg", "text/gif"):
    }

    ?>
    uploadimage_clas.php

    PHP:
    1. <?php
    2.     require_once "upload_class.php";
    3.    
    4.     class UploadText extends UYpload {
    5.        
    6.         protected $dir = "text";
    7.         protected $mime_types = array("text/plain"):
    8.     }
    9.    
    10. ?>
    uploadtext_clas .php
     
  12. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
  13. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    а где посмотреть логи
     
  14. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @ubunta2 это к отладке относится, логи может писать веб сервер и PHP, бывают логи ошибок и просто запросов
    У PHP можно в php.ini задать название лога ошибок и он при ошибки появится в той же папки что и скрипт который был запущен
     
  15. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    ошибок нет
    пустой массив
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    тогда перепроверь весь скрипт, через отладку
     
  17. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    это как?
     
  18. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    var_dump();

    Или можно свой debuger сделать (из интернета):
    PHP:
    1. function console_log( $data ){
    2.   echo '<script>';
    3.   echo 'console.log('. json_encode( $data ) .')';
    4.   echo '</script>';
    5. }
    6.  
    7. Usage:
    8. $myvar = array(1,2,3);
    9. console_log( $myvar ); // [1,2,3]
     
  19. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    PHP:
    1. <?php
    2.     require_once "upload_class.php";
    3.    
    4.     class UploadText extends Upload {
    5.        
    6.         protected $dir = "text";
    7.         protected $mime_types = array("text/plain"):
    8.     }
    9.    
    10. ?>
    PHP:
    1. <?php
    2.     require_once "upload_class.php";
    3.    
    4.     class UploadImage extends Upload {
    5.        
    6.         protected $dir = "images";
    7.         protected $mime_types = array("image/png", "image/jpeg", "image/gif"):
    8.     }
    9.    
    10. ?>
    исправил пока не исправилось ничего
    --- Добавлено ---
    PHP:
    1. <?php
    2.     require_once "upload_class.php";
    3.    
    4.     class UploadText extends Upload {
    5.        
    6.         protected $dir = "text";
    7.         protected $mime_types = array("text/plain");
    8.     }
    9.    
    10. ?>
    PHP:
    1. <?php
    2.    require_once "upload_class.php";
    3.    
    4.    class UploadImage extends Upload {
    5.      
    6.      protected $dir = "images";
    7.      protected $mime_types = array("image/png", "image/jpeg", "image/gif");
    8.    }
    9.    
    10. ?>
     
  20. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    PHP:
    1. <?php ## Генерация квази-анонимных функций.
    2.  $squarers = [];
    3.   for ($i = 0; $i <= 1000; $i++) {
    4.     // Создаем строку, содержимое которой каждый раз будет разным.
    5.     $id = uniqid("F");
    6.     // Создаем функцию.
    7.     eval("function $id() { echo $i * $i; }");
    8.     $squarers[] = $id;
    9.   }
    10.   // Так можно вызвать функцию, чье имя берется из массива.
    11.   $squarers[303]();
    12. ?>
    Fatal error: Cannot redeclare F597f0937001e7() (previously declared in E:\OpenServer\domains\test\mkfuncs.php(7) : eval()'d code:1) in E:\OpenServer\domains\test\mkfuncs.php(7) : eval()'d code on line 1
     
  21. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.824
    Симпатии:
    1.333
    Адрес:
    Лень
    повторное создание функции с одним и тем же именем.
    Книгу сожги вместе с корзиной
     
  22. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Мда, что-то Костеров дал маху. Хотя обычно считают книгу эту неплохой. Проблема в том, что uniqid возвращает текущее время, и вызовы eval происходят слишком быстро, чтоб имя могло поменяться. Но вообще, ни разу не использовал eval за все 4 года профессиональной работы
     
  23. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    PHP:
    1. <?php
    2. var_dump($_POST);
    3. var_dump($_FILES);
    4. ?>
    5. <html>
    6. <head>
    7.     <title>Загрузка файлов</title>
    8. </head>
    9. <body>
    10.     <h1>Загрузка файлов</h1>
    11.     <form name="myform" action="index.php" method="post" enctype="multipart/form-data">
    12.         <table>
    13.         <tr>
    14.         <td>Изображение</td>
    15.         <td>
    16.         <input type="file" name="image"/>
    17.         </td>
    18.         </tr>
    19.         <tr>
    20.         <td>Текст</td>
    21.         <td>
    22.         <input type="file" name="text"/>
    23.         </td>
    24.         </tr>
    25.         <tr>
    26.         <td colspan="2">
    27.             <input type="submit" name="upload" value="Загрузить файл" />
    28.      
    29.         </tr>
    30.         </table>
    31.     </form>
    32.     </body>

    array(3) { ["image"]=> string(9) "image.jpg" ["text"]=> string(8) "text.txt" ["upload"]=> string(27) "Загрузить файл" } array(0) { }
     
  24. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    uniqid
    upload_2017-7-31_17-51-57.png

    --- Добавлено ---
    Чоб там просто F.'$i' не использовать-то? О_о
    Зуб даю - в цикле с n итераций будет n уникальных имен создано!
    --- Добавлено ---
    Хотя...чот там сам код выглядит так, как будто это отрывок из "Вредных советов" Г. Остера. Какой-то нереальный трэшак.
     
  25. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28