• Памятка на рабочий стол Ubuntu?

    janson
    @janson
    PHP-разработчик
    На Ubuntu/Mint уже должен быть из коробки установлен Tomboy: сервис для заметок-стикеров. Пользуюсь им, удобно.
    Ответ написан
    Комментировать
  • 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

    После этого тест должен запустится.
    Ответ написан
    Комментировать
  • Как правильно настроить PHPStorm7 для PHPUnit?

    janson
    @janson
    PHP-разработчик
    Действительно - проще всего с .phar файлом в конкретном проекте.

    Версию PHPUnit ставьте 3.7.XX. С четвёртой версией в PHPStorm 7 пока что баг с запуском тестов (в PHPStorm 8 EAP вроде починили). Вручную из консоли всё работает, а вот из PHPStorm - ругается.

    Как запустить:
    1. Создаём структуру проекта, как по данной вами ссылке:

    |-src
    |   |-autoload.php
    |   |-Money.php
    |
    |-tests
        |-MoneyTest.php


    В файле autoload.php нужно подключить файлы, которые вы собираетесь тестировать.

    <?php
    require_once __DIR__ . '/Money.php';


    2. Настраиваем конфигурацию PHPUnit:
    Run -> Edit Configurations...
    В левой верхней части появившегося окна жмём зелёный плюс и настраиваем конфигурацию:
    - устанавливаем Test Scope на 'Directory' и указываем путь к папке tests
    88950935cf654d2d9913317a82873cc6.png
    - жмём на гаечный ключ и настраиваем путь к phpunit.phar (если у вас локально используется папка с PHPUnit - то подключаете её в File -> Settings -> ProjectSettings -> PHP ... Include Paths, и затем в настройках PHPUnit переключаем на Load From Include Path).
    73258cc7bdf54d138d5cf60708810d02.png
    - также указываем default bootstrap file на наш autoload.php, где подключаем классы, которые собственно будем тестировать (где лежат сами тесты мы указали для PHPUnit в начале).
    - Жмём Apply -> Apply -> OK

    Всё, теперь рядом с созданой конфигурации на панели PHPStorm появилась зелёная стрелка для запуска тестов. Жмём, и если всё правильно - получаем зелёную полосу.
    c3371b9827824186b099c19932bbfac7.png

    Т.е. процесс настройки - это три шага:
    1. указываем где лежит PHPUnit
    2. указываем где лежат тесты
    3. указываем где лежит загрузчик тестируемых классов.

    Вроде всё.
    Ответ написан
    1 комментарий
  • Откуда берется 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 ничего съедать не может.
    Ответ написан
    Комментировать