Ответы пользователя по тегу PHP
  • Php заполнить массив до определенного размера?

    janson
    @janson
    PHP-разработчик
    $v = [[1,1], [1,2], [1,3]];
    $len = 10;
    
    $newArr = array_pad($v, $len, ['example']);
    print_r($newArr);


    Добавит в массив $v элементов до длины в 10 элементов. Каждый новый элемент будет массивом c единственным элементом 'example'.
    Ответ написан
    Комментировать
  • Как сделать правельно запрос в базу для выборки юникод данных?

    janson
    @janson
    PHP-разработчик
    Явным образом укажите, что у вас UTF-8 контент в БД:
    $_connect_ = new PDO('mysql:host=localhost;dbname=db;charset=utf8;','root','12345');
    $_connect->query("SET NAMES utf8");
    $query = $_connect_->query("SELECT * FROM industries");
    Ответ написан
    1 комментарий
  • Object of class PDOStatement could not be converted to string in как исправить?

    janson
    @janson
    PHP-разработчик
    Ну вам же наверняка не только текст ошибки прилетел, но и указание, где оно произошло.

    ...
    $result = $this->db->query($sql);
    return isset($result[0]) ? $result[0] : null;
    ...


    Конкретно ошибка "Object of class PDOStatement could not be converted to string" у вас возникает здесь.
    В $result у вас после выполнения query() будет лежать объект PDOStatement. Чтобы получить из него результат, вам нужно выполнить
    $result->fetchAll();

    Или так:
    ...
    $result = $this->db->query($sql)->fetchAll();
    return isset($result[0]) ? $result[0] : null;
    ...
    Ответ написан
    1 комментарий
  • Как вычесть дату из даты (php)?

    janson
    @janson
    PHP-разработчик
    $date1 = new \DateTime('2014-09-01 12:35:54');
    $date2 = new \DateTime('2014-09-03 06:14:27');
    $diff = $date2->diff($date1);
    
    // разница в секундах
    $seconds = ($diff->y * 365 * 24 * 60 * 60) +
    ($diff->m * 30 * 24 * 60 * 60) +
    ($diff->d * 24 * 60 * 60) +
    ($diff->h * 60 * 60) +
    ($diff->i * 60) +
    $diff->s;
    Ответ написан
    Комментировать
  • Codeception ошибка на старте

    janson
    @janson
    PHP-разработчик
    Похоже на ошибку в документации при переходе на новую версию.
    Если зайти на страницу codeception.com/docs/reference/Configuration то в последнем конфиг-файле видно, что используется AcceptanceTester.

    Для исправления, замените в acceptance.yml AcceptanceGuy на AcceptanceTester:
    class_name: AcceptanceTester

    и выполните:

    $ php codecept.phar build

    После этого тест должен запустится.
    Ответ написан
    Комментировать
  • Откуда берется index.php в GET данных страницы?

    janson
    @janson
    PHP-разработчик
    [телепат mode on]
    1. в .htaccess криво настроен mod_rewrite таким образом, что просто в конец строки добавляет /index.php
    2. уже в php-скрипте, когда криво делается разбор пришедших параметров, где-то добавляется строка 'index.php'.

    Ну а где именно это происходит - смотрите.
    Ответ написан
    Комментировать
  • Как создать условие в php для проверки странницы?

    janson
    @janson
    PHP-разработчик
    В общем случае это выглядит так:
    Во-первых: нужно настроить хост таким образом чтобы все запросы отправлялись на один и тот же php-скрипт (это как раз задача mod rewrite).
    Во-вторых: в этом php-скрипте ловите входящие параметры (выше уже написали как обрабатывать, например $_SERVER['REQUEST_URI']) и на их основании уже подлючаете тот или иной скрипт обработки.
    Ответ написан
    Комментировать
  • PDO PHP как убрать экранирование в запросе?

    janson
    @janson
    PHP-разработчик
    Вы сделали запрос через PDO, но не разобрали результат.
    Метод query возвращает вам обьект PDOStatement из которого нужно вытащить результаты, например следующим образом:

    $dbh = new PDO("mysql:host=$db_host;dbname=$db_name",$db_user,$db_pass);
    $statement = $dbh->query("SELECT * FROM files WHERE name = '/var/www/test/1.txt'");
    $result = $statement->fetchAll(\PDO::FETCH_ASSOC);
    Ответ написан
  • Php, слеш перед именем класса

    janson
    @janson
    PHP-разработчик
    1. Читаем мануал по namespace в PHP. Обязательно пригодится.
    2. Запись \DateTime() означает, что нужно использовать встроенный тип DateTime() который есть в PHP (он находится в корне пространств имён, т.е. начинается с '\' хотя если нет конфликтов, то слэш можно не указывать). Например у вас есть свой класс DateTime, находящийся в вашем собственном пространстве имён MySpace.

    Какой-то ваш файл app/MySpace/DateTime.php:
    <?php
    namespace MySpace;
    
    class DateTime {...}


    Где-то в своём index.php вы используете его:
    <?php
    ...
    ...
    require_once 'app/MySpace/DateTime.php';
    
    // если мы хотим создать объект СВОЕГО КЛАССА:
    $myDateTime = new \MySpace\DateTime();
    
    //Или так:
    use \MySpace\DateTime;
    $myDateTime2 = new DateTime();
    
    // а вот если хотим использовать встроенный класс DateTime в данной ситуации:
    $intDateTime = new \DateTime();


    Так что, если вы хотите использовать в определённый момент именно встроенный тип данных PHP, то безопаснее вписать слэш перед именем файла - избавляемся от неоднозначностей.
    Ответ написан
    Комментировать
  • С чего начать и как писать Unit-тесты для проектов на PHP?

    janson
    @janson
    PHP-разработчик
    1. установить PHPUnit
    2. научится запускать тесты на PHPUnit. Самые банальные по мануалу. Просто запускать и понять, как они срабатывают.
    3. опробовать подход на небольших учебных задачах (всякие code-kata подойдут, задачи типа FizzBuzz, конвертёр температур из шкалы Цельсия в шкалу Фаренгейта, любые простые, алгоритмизируемые задачи с проверяемым результатом).
    4. После понимания сути тестов, заводим tests/ в реальном проекте, и начинаем думать, как это всё завести. В первый раз достаточно сложно сообразить как всё это добро соединить. Постепенно прикручиваем тесты, осваиваем технику работы со стабами (Stub) и моками (Mock).

    В процессе освоения шага №3, опробовать TDD: до написания кода, решающего задачу, пишем тесты для будущего кода. Это потребует в процессе написания теста продумать, как будут называться классы, методы, функции, какие граничные условия для прохождения тестов и проч.

    Очень вероятно, что с первого раза не всё будет понятно и просто. Пробуйте.

    Как пища для размышлений и осваивания методологии TDD, подборка задач:
    codekata.com

    Во многих там даже условия тестов прописаны, остаётся подкорректировать под себя и принятся за реализацию.
    Ответ написан
    Комментировать
  • Чудеса с BLOWFISH внутри JSON

    janson
    @janson
    PHP-разработчик
    дубль. ПРошу прощения
    Ответ написан
    Комментировать
  • Чудеса с BLOWFISH внутри JSON

    janson
    @janson
    PHP-разработчик
    дубль. ПРошу прощения
    Ответ написан
    Комментировать
  • Чудеса с BLOWFISH внутри JSON

    janson
    @janson
    PHP-разработчик
    дубль. ПРошу прощения
    Ответ написан
    Комментировать
  • Чудеса с BLOWFISH внутри JSON

    janson
    @janson
    PHP-разработчик
    Подскажите, откуда такие чудеса? json съедает неизвестные ему символы?


    Если кириллица и PHP 5.4 и выше, добавьте JSON_UNESCAPED_UNICODE.
    Если кириллица и PHP < 5.4 — смотрите www.php.net/manual/ru/function.json-encode.php в комментах есть реализация для PHP 5.3

    Собственно сам json ничего съедать не может.
    Ответ написан
    Комментировать