• Как автоматически запустить сервер?

    sanek_os9
    @sanek_os9 Автор вопроса
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Нужно включить автоматическую регистрацию в системе при её загрузке, подробнее об этом написано здесь
    guruadmin.ru/page/how-to-enable-autologon-in-windo...
    Так же не забываем прописывать автозапуск в реестре соответственно
    Ответ написан
    Комментировать
  • Junior PHP, что бы вы спросили на собеседовании?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Будут спрашивать много о ООП, концепции, магические методы, трейты, что как работает при разных ситуациях, модифкаторы доступа, что нового в PHP7, интерфейсы, типы данных, циклы...
    О каждом вышеперечисленном надо рассказывать развернуто, то есть например, сказать что бы создать абстрактный класс нужно перед class написать abstract этого не достаточно, нужно рассказать зачем он нужен, чем отличается, когда используются, нюансы всякие, и так обо всём что спрашивают.
    Так же о MySQL, а именно CRUD, связывание таблиц, индексы, внешние ключи, транзакции, сортировки, группировки...об этом всём тоже нужно рассказать развернуто.
    Так же будут спрашивать о работе интернета, там например про http протокол, https, попросят начертить схему работы клиент-сервер ну и прокомментировать соответственно, схема должна быть максимально полной (клиет, сервер, интерпретатор php (или что то другое смотря кем устраиваетесь), mysql, dns).
    По всему вышеперечисленному зададут какие то задачки, что то решить на php, написать какую-то разметку, применить к ней css ну и далее в том же духе.
    Такие же базовые вещи будут спрашивать о html, css возможно js.
    ------------------
    Разговор не должен состоять короткий вопрос - короткий ответ, он должен быть короткий - вопрос развернутый рассказ, то есть, если вас спросили о трейтах, сказать что да, такая приколюха есть в php и она создаётся ключевым словом trait и сидеть глазеть на собеседника ожидая следующего вопроса не достаточно, нужно говорить о множественном наследовании, о конфликтах которые могут возникнут, способах их решения, когда применяется и так далее, иными словами информацию с вас не должны вытягивать силой, самим нужно рассказывать, чем больше тем лучше.
    Ответ написан
    4 комментария
  • Как не терять временя при изменении формата в DateTime?

    sanek_os9
    @sanek_os9 Автор вопроса
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Решение: вместо
    $date = new \DateTime('@' . $deadlines);
    прописать
    $date = new \DateTime();
    $date->setTimestamp($deadlines);

    Оба варианта взяты с php.net/manual/ru/datetime.settimestamp.php
    Только они работают по разному, что доставило мне немало удовольствия в поисках решения проблемы.
    Ответ написан
  • Как сделать перенаправление на стили в другую папку?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Прописать в корневом .htaccess
    RewriteEngine On
    RewriteCond $1 !^(index\.php|public|robots\.txt|sitemap\.xml)
    RewriteRule ^(.*)$ /index.php/$1 [L]

    Прямой запрос к чему либо можно получить только из папки public, туда js , css и другую статику бросайте.
    sitemap.xml и robots.txt могут оставаться в корне.
    Ответ написан
  • Как сделать 301 редирект в .htaccess с несуществующих страниц?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    # переопределяем страницы ошибок
    ErrorDocument 400 /error.php?err=400
    ErrorDocument 401 /error.php?err=401
    ErrorDocument 402 /error.php?err=402
    ErrorDocument 403 /error.php?err=403
    ErrorDocument 404 /error.php?err=404
    ErrorDocument 500 /error.php?err=500
    ErrorDocument 502 /error.php?err=502

    Я скинул весь код ошибок, чтоб поставить редирект на главную вместо /error.php?err=502 поставьте только слеш, и если нужно толь с несуществующих страниц то оставьте только ошибку 404
    ErrorDocument 404 /
    Ответ написан
    Комментировать
  • В чем ошибка запроса на добавление в базу?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Уберите двойные кавычки в
    VALUES ("'2017-07-28 02:29:08', 'admin', 'короткая', 'полная', 'доп_поля', 'название', 'дискрипшин', 'ключи', '19', 'nazvanie', '0', '1', '1', '1', '0', '', '', ''")

    Должно быть так
    VALUES ('2017-07-28 02:29:08', 'admin', 'короткая', 'полная', 'доп_поля', 'название', 'дискрипшин', 'ключи', '19', 'nazvanie', '0', '1', '1', '1', '0', '', '', '')
    Ответ написан
    Комментировать
  • Как составить регулярку в которой значение может быть а может и нет?

    sanek_os9
    @sanek_os9 Автор вопроса
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    smartphone/(android|ios|psp|windows)/(new|popular)/?(page[0-9]+)?
    Ответ написан
    Комментировать
  • Как работает password_verify?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    В первый параметр ф-ции нужно вставить пароль введенный с формы, во второй параметр хэш который сохраненный в БД.
    // See the password_hash() example to see where this came from.
    $hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
    
    if (password_verify('rasmuslerdorf', $hash)) {
        echo 'Password is valid!';
    } else {
        echo 'Invalid password.';
    }
    Ответ написан
    4 комментария
  • Нотисы выводят неопределнные переменные, как исправить?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Измените эти строки
    $login2 = $_POST['login2'];
    $password2 = $_POST['password2'];

    на эти
    $login2 = $_POST['login2'] ?? '';
    $password2 = $_POST['password2'] = ?? '';

    Будет работать в PHP7.x
    И вообще эти переменные стоит определять после
    if (isset($_POST['submit-log'])) {
    Ошибка из за того что POST данных нету, их никто не отправлял что бы они там были, а вот после нажатия кнопки скорее всего они там уже будут.
    Ответ написан
    8 комментариев
  • Где можно скачать/спасить базы всех городов стран Европы?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Комментировать
  • Как вставить текст 1 раз на много сайтов Wordpress?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    На один из сайтов разместить файл в json формате, в котором будет массив вида
    $text = ['metrika' => 'код', 'policy' => 'текст', 'text' => 'какой то там текст еще'];
    Всё это положить в file.txt, в виде
    json_encode($text);
    На других сайта получить эти данные
    $file = file_gets_contents('http://domain/file.txt');
    $file = json_decode($file);

    в нужном месте использовать
    echo $file['metrika'];
    Ответ написан
  • Как взять все из $_GET и записать в строку?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Пример: mysite.ru/forum/19/128/
    echo $_SERVER['REQUEST_URI']; # вернет /forum/19/128/
    // Подойдет при использовании ЧПУ на своём сайте

    Пример: mysite.ru/forum/?razdel=19&id=128
    echo $_SERVER['QUERY_STRING']; # вернет razdel=19&id=128
    Ответ написан
    8 комментариев
  • Как вставить php переменные в SQL запрос?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Что бы работали переменные их нужно либо писать без кавычек, либо в двойных кавычках
    $a = 5;
    echo $a; # 5
    echo "$a"; # 5
    echo '$a'; # $a

    В вашем случае нужно вместо 2017-07-20 прописать ' . $nowDate . '
    $userLists = $wpdb->get_results("SELECT `user_name`, `user_bet`, `user_time` FROM `wp_konkurs` WHERE `user_time` BETWEEN '$nowDate 00:00:00' AND '$nowDate 23:59:59' ORDER BY `user_time` DESC");
    Ответ написан
  • Почему не могу заменить элемент массива php?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Потому что вы не заменяете элемент массива, вы переопределяете переменную $item
    function changeWord(string $string): string
    {
        $arr = explode(' ', $string);
        print_r($arr);
        for ($i = 0; $i < sizeof($arr); $i++) {
            if($arr[$i] == 'его'){
                $arr[$i] = '12345';
            }
        }
        print_r($arr);
        $string = implode(' ', $arr);
        return $string;
    }

    В вашем же коде нужно
    foreach ( $arr as $item ) {
    заменить на
    foreach ( $arr as $key =>$item ) {
    а это
    $item = '12345';
    заменить на
    $arr[$key] = '12345';
    Так же, для вашей задачи возможно подойдет
    $str = ' его строка';
    $str = str_replace('его', '12345', $str);
    # выведет: 12345 строка
    Ответ написан
  • Построить дерево из строки?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    $str = 'max_rsya_new_hfequncy_platya_1priority';
    $array = explode('_', $str);
    $new_str = $delimiter = '';
    for ($i = 0; $i < sizeof($array); $i++) {
        $new_str .= $delimiter . $array[$i] . '<br />';
        $delimiter .= '--';
    }
    echo $new_str;
    Ответ написан
    Комментировать
  • Как заменить один div на другой div через определённое время без редактирования записи?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    При добавлении записи сохраняем время
    time()
    Блок который нужно отобразить через три часа заносим в условие
    if ($time > time() - 3600 * 3){
    //блок который отобразится через три часа
    }
    где $time это время которое мы сохранили
    Ответ написан
  • Как построить простоую MVC структуру на php?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Вот цикл видео уроков по созданию сайта используя MVC https://www.youtube.com/watch?v=ba3M3_Myrqg&list=P...
    Ответ написан
    Комментировать
  • Есть ли обучающие материалы по ООП?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Вот вам стог сена stog.jpg
    Вот вам тюк сена 617.jpg
    Какая между ними разница? И то, и то сено.
    Но, тюк он компактный, его удобно складывать, его легко переносить, вы из него хоть домик постройте. Стог это такая...просто куча, с этой кучей не удобно работать, сыпется, раздувает ветром, переносить сложно, и домик не построишь. Кто знаком с сельской жизнью тот поймет)
    Так вот, процедурный стиль, это стог сена, ООП это тюк сена. Процедурный стиль громоздкий, имеет огромную кучу каких то функции с длинными именами, его трудно поддерживать, вообще трудно вносить какие либо изменения, и если таковы понадобится, а сайт большой, то одно и то же изменение придется одинаково менять во многих местах, если вдруг вы где то забыли внести изменение то в лучшем случае это вызовет ошибку и вы её исправите, в худшем все продолжит работать но именно в том месте не так как надо, попробуйте потом найти это место...Что дает нам ООП...много чего, краткость кода, его ясность, его легко поддерживать, там нет повторяющегося кода, если вы что то захотите изменить, это нужно будет изменить единожды и ничего у вас не сломается после этого.
    Что касается примеров, этот пример должен быть большим что бы увидеть преимущества ООП подхода, это во первых, а во вторых преимущество особенно сильно проявляется когда вы работаете над этим проектом а не когда он уже написан и работает а вы смотрите на это со стороны.
    Еще раз напомню что
    Да, кто-то скажет что это не имеет смысла, но всё же любопытно было бы сравнить.

    вы что хотите сравнить? что красивше выглядит? кстати код написанный на ООП выглядит красивее и уже именно поэтому стоит его использовать)
    Напомнить я хотел что не сравнивать его нужно, а работать с ним.
    -----------------------------
    Вот пример, который не покажет всех преимуществ, это лишь пример одного из многих преимуществ ООП. Задача такая, получить данные пользователя и вывести их на экран.
    Процедурный стиль:
    $q = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ? LIMIT 1");
    $q->execute([$id_user]);
    $user = $q->fetch();
    echo 'Имя: ' . $user['name'] . '<br />';
    echo 'Фамилия: ' . $user['surname'] . '<br />';
    echo 'Город: ' . $user['city'] . '<br />';

    ООП:
    class User{
        public $id;
        public $data;
        
        public function __construct(int $id)
        {
            $this->id = $id;
            $this->data = $this->getData();
            
        }
        private function getData(): array
        {
            $q = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ? LIMIT 1");
            $q->execute([$this->id]);
            return $q->fetch();
        }
        public function __get($name)
        {
            if (isset($this->data[$name])) {
                return $this->data[$name];
            }
            return;
        }
    }
    $user = new User(1);
    echo 'Имя: ' . $user->name . '<br />';
    echo 'Фамилия: ' . $user->surname . '<br />';
    echo 'Город: ' . $user->city . '<br />';

    Казалось бы в чем тут преимущество если в ООП из данного примера больше кода, а выше я говорил о его краткости) краткость возникнет со временем при увеличении нашего приложения, еще я говорил что на ООП не любоваться нужно а работать с ним, так давайте же выполним следующие, сделаем так что если какие то данные не заполнены то выводилось сообщение "(данные не заполнены)"
    Процедурный стиль:
    $q = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ? LIMIT 1");
    $q->execute([$id_user]);
    $user = $q->fetch();
    echo 'Имя: ' . ($user['name'] ?? '(данные не заполнены)') . '<br />';
    echo 'Фамилия: ' . ($user['surname'] ?? '(данные не заполнены)') . '<br />';
    echo 'Город: ' . ($user['city'] ?? '(данные не заполнены)') . '<br />';

    ООП:
    class User{
        public $id;
        public $data;
        
        public function __construct(int $id)
        {
            $this->id = $id;
            $this->data = $this->getData();
            
        }
        private function getData(): array
        {
            $q = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ? LIMIT 1");
            $q->execute([$this->id]);
            return $q->fetch();
        }
        public function __get($name)
        {
            if (isset($this->data[$name])) {
                return $this->data[$name];
            }
            return '(данные не заполнены)';
        }
    }
    $user = new User(1);
    echo 'Имя: ' . $user->name . '<br />';
    echo 'Фамилия: ' . $user->surname . '<br />';
    echo 'Город: ' . $user->city . '<br />';

    Вы заметили как изменился процедурный стиль? Нам пришлось изменять каждое поле, нам пришлось повторятся, и хорошо что у нас только три поля а не десятки, и хорошо что у нас то проект из одного файла а не из....многих. И еще очень хорошо что вышла PHP7, иначе пришлось городить еще кучу условий.
    Вы заметили как изменился код ООП?
    В одном месте изменился кусочек кода, было:
    return;
    Стало:
    return '(данные не заполнены)';
    Такие случаи будут появляться сплошь и рядом, поэтому выбор ООП подхода очевиден.
    Еще более наглядно покажет преимущество ООП если мы добавим редактирование анкеты, в процедурном стиле нужно будет создавать три запроса (потому что в нашем примере три поля, в настоящем проекте их может быть десятки), в ООП придется один раз немного повозится (совсем чуть-чуть) и сделать универсальное обновление данных, что в результате, именно в том месте когда где потребуется обновление получится так:
    Процедурный стиль:
    $q = $pdo->prepare("запрос");
    $q->execute([/*переменная*/])

    И так три раза (в нашем примере, а в реальном проекте больше)
    ООП:
    нужно будет всего лишь написать так (например имя изменить)
    $user->name = 'новое имя';
    Мы не просто свойство изменим, данные изменятся и в базе данных, всего лишь одной такой строкой, но как это сделать пусть будет домашним заданием, ибо уже три часа ночи и я пойду спать, всем добра)
    Ответ написан
    5 комментариев
  • Каким должен быть правильный контроллер?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Нету единого правильного способа реализации MVC, поэтому в Laravel, Yii2 и других фреймворках и проектах реализовано правильно, но по своему. Вам же стоит использовать не какой-то "правильный" подход реализации, а более удобен и понятен вам, не зацикливайтесь сильно о других людях которые придут на ваше место потому что всем не угодить, некого универсального подхода нету, достаточно тщательно комментировать свой код и писать код так что бы его легко было масштабировать и вносить любые другие правки.
    По поводу холиварах о том какой должна быть модель, выдержка из статьи:
    В описании оригинальной реализации MVC в Smalltalk упоминается о пассивной и активной модели. Пассивная модель не осведомлена о существовании представления, контроллера, и даже о своем участии в MVC-триаде. Контроллер отслеживает изменения модели и оповещает представление. При этом либо контроллер передает представлению информацию об изменениях, либо представление самостоятельно выбирает данные из модели. Более изящным решением является активная модель. Активность модели проявляется в ее праве самостоятельно оповестить представление об изменении своего состояния. Чтобы не нарушить основное требование MVC о независимости модели от представления и контроллера, механизм оповещения реализуется на основе шаблона проектирования Observer.

    А так же сама статья рекомендуемая к прочтению: rsdn.org/article/patterns/generic-mvc.xml
    Ответ написан
    Комментировать
  • Почему require_once не видит файл?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    require_once подключает файл лишь один раз, попробуйте подключить его с помощью require
    Ответ написан
    3 комментария