@ubunta2 на английском есть два сайта https://regexper.com/ и http://regexr.com/ вкладка explain, они более менее объясняют как сработало твоё регулярное выражение. Но ты так не ответил что конкретно не понятно, может строка 2 кода или 3
$str = "2015-12-15"; $re = '|^(?:\d{4})-(?:\d{2})-(\d{2})$|'; '|^(?:\d{4})= карману 2015 (?:\d{2}) карману 12 (\d{2})$| карману 15 ? квантификатор
Код (Text): $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 вообще обо всём пхп понятно написано в мануале. Проблема в прокладке между монитором и стулом. Если человек не склонен к алгоритмам, то ему любой текст будет непонятным.
Код (Text): <?php if ($_POST["upload"]){ print_r($_FILES); } ?> <html> <head> <title>Загрузка файлов</title> </head> <body> <h1>Загрузка файлов</h1> <form name="myform" action="index.php" method="post" enctype="multipart/form-date"> <table> <tr> <td>Изображение</td> <td> <input type="file" name="image"/> </td> </tr> <tr> <td>Текст</td> <td> <input type="file" name="text"/> </td> </tr> <tr> <td colspan="2"> <input type="submit" name="upload" value="Загрузить файл" /> </tr> </table> </form> </body> index.php PHP: <?php abstract class Upload{ protected $dir; protected $mime_types; public function uploadFile($file){ if(!$this->isSecurity($file)) return false; $uploadFile = $this->dir."/".$file["name"]; return move_uploaded_file($file["tmp_name"], $uploadFile); } public function isSecurity($file){ $blacklist = array (".php", ".phtml", ".php3", ".php4", ".html", ".htm"); foreach ($blacklist as $item){ if (preg_match("/$item\S/i", $file["name"])) return false; } $type = $file["type"]; for ($i = 0; $i< count($this->mime_type); $i++){ if ($type == $this->mime_type($i)) break; if ($i + 1 == count($this->mime_type($i)) return false; } $size = $file["size"]; if ($size > 2048000) return false; return true; } } ?> 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: <?php require_once "upload_class.php"; class UploadText extends UYpload { protected $dir = "text"; protected $mime_types = array("text/plain"): } ?> uploadtext_clas .php
Логи смотрел? Хз но что бросается в глаза так то что абстрактный класс без абстрактных методов Смысл? https://php.ru/manual/language.oop5.abstract.html
@ubunta2 это к отладке относится, логи может писать веб сервер и PHP, бывают логи ошибок и просто запросов У PHP можно в php.ini задать название лога ошибок и он при ошибки появится в той же папки что и скрипт который был запущен
var_dump(); Или можно свой debuger сделать (из интернета): PHP: function console_log( $data ){ echo '<script>'; echo 'console.log('. json_encode( $data ) .')'; echo '</script>'; } Usage: $myvar = array(1,2,3); console_log( $myvar ); // [1,2,3]
PHP: <?php require_once "upload_class.php"; class UploadText extends Upload { protected $dir = "text"; protected $mime_types = array("text/plain"): } ?> PHP: <?php require_once "upload_class.php"; class UploadImage extends Upload { protected $dir = "images"; protected $mime_types = array("image/png", "image/jpeg", "image/gif"): } ?> исправил пока не исправилось ничего --- Добавлено --- PHP: <?php require_once "upload_class.php"; class UploadText extends Upload { protected $dir = "text"; protected $mime_types = array("text/plain"); } ?> PHP: <?php require_once "upload_class.php"; class UploadImage extends Upload { protected $dir = "images"; protected $mime_types = array("image/png", "image/jpeg", "image/gif"); } ?>
PHP: <?php ## Генерация квази-анонимных функций. $squarers = []; for ($i = 0; $i <= 1000; $i++) { // Создаем строку, содержимое которой каждый раз будет разным. $id = uniqid("F"); // Создаем функцию. eval("function $id() { echo $i * $i; }"); $squarers[] = $id; } // Так можно вызвать функцию, чье имя берется из массива. $squarers[303](); ?> 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
Мда, что-то Костеров дал маху. Хотя обычно считают книгу эту неплохой. Проблема в том, что uniqid возвращает текущее время, и вызовы eval происходят слишком быстро, чтоб имя могло поменяться. Но вообще, ни разу не использовал eval за все 4 года профессиональной работы
PHP: <?php var_dump($_POST); var_dump($_FILES); ?> <html> <head> <title>Загрузка файлов</title> </head> <body> <h1>Загрузка файлов</h1> <form name="myform" action="index.php" method="post" enctype="multipart/form-data"> <table> <tr> <td>Изображение</td> <td> <input type="file" name="image"/> </td> </tr> <tr> <td>Текст</td> <td> <input type="file" name="text"/> </td> </tr> <tr> <td colspan="2"> <input type="submit" name="upload" value="Загрузить файл" /> </tr> </table> </form> </body> array(3) { ["image"]=> string(9) "image.jpg" ["text"]=> string(8) "text.txt" ["upload"]=> string(27) "Загрузить файл" } array(0) { }
uniqid --- Добавлено --- Чоб там просто F.'$i' не использовать-то? О_о Зуб даю - в цикле с n итераций будет n уникальных имен создано! --- Добавлено --- Хотя...чот там сам код выглядит так, как будто это отрывок из "Вредных советов" Г. Остера. Какой-то нереальный трэшак.