• В каких случая и зачем нужно использовать трейты ?

    KorsaR-ZN
    @KorsaR-ZN
    Они нужны для избавления от дублирования кода, ну или например для множественного наследования.

    Грубый пример:
    У вас есть много классов, которые что-то записывают в лог, из класса в класс, это один и тот же участок кода, к примеру Logger::write(str), вот этот участок кода можно вынести в трейт LoggerTrait c методом logWrite, и потом во всех классах использовать $this->logWrite(str).
    Потом удобно будет эту функцию переопределить в каком-то конкретном файле, если скажем там нужна какая-то специфичная запись в лог.

    При таком подходе вы всегда класс логгера можете заменить, просто отредактировав всего один файл трейта, а не 100500 классов.

    Еще пример:
    В трейт можно вынести функцию isAjaxPost, для проверки, что запрос в контроллер пришел ajax post, и подключать в нужные контроллеры.

    Да вообщем море примеров привести можно, где это удобно применять, для избавления от дублирование в коде, от однотипных операций и т.д.
    Ответ написан
    9 комментариев
  • Можно ли в mysql сортировать по количеству записей?

    KorsaR-ZN
    @KorsaR-ZN
    Сделайте дополнительную вуборку через join, которая вернет кол-во по условию, и по этому значению уже остортируете...
    Ответ написан
  • Область видимости переменных php как задать глобально, а не локально?

    KorsaR-ZN
    @KorsaR-ZN
    Причем тут глобальные область?
    Когда все верно, у вас просто переменная lnk не существует. т.к она инициализируется под условием, а если условие не выполнилось, то и переменная не создалась...,
    А вы ее пытаетесь вывести на 36 строке, отсюда и ошибка.

    Чтобы исправить это, Вам необходимо перед условием if(isset($_FILES["upfile"])), про инициализировать переменную, к примеру так $lnk = null;
    Ответ написан
  • Как оптимизировать Медленный запрос в MySQL?

    KorsaR-ZN
    @KorsaR-ZN
    Эх, пока писал, уже опередили, раз время потратил пусть уж будет :)

    SELECT 
    	wc.id, 
    	wc.caption,
    	COUNT(wb.*) AS billcount
    INNER JOIN 
    	wmail_order AS wo ON wo.company_id = wc.id
    INNER JOIN 
    	wmail_comm_bill AS wb ON wb.order_id = wo.id
    FROM
    	wmail_company AS wc
    GROUP BY 
    	wc.id 
    ORDER BY 
    	billcount DESC
    LIMIT 0, 50
    Ответ написан
    Комментировать
  • Как убрать отступы по краям элемента с position: relative, который растянут на всю ширину и высоту экрана?

    KorsaR-ZN
    @KorsaR-ZN
    Блин, вы код покажите, толку нам от картинки. Мы ж не бабки прорицательницы...
    Ответ написан
    Комментировать
  • Как вывести информацию о свободном пространстве на дисках при помощи php на win server2008?

    KorsaR-ZN
    @KorsaR-ZN
    Есть такая функция disk_free_space.

    На удаленном сервере есть PHP?, тогда вам нужная сделать скрипт, который бы по запросу на него возвращал информацию о свободном пространстве. И с вашего Веб сервера делать запроса на удаленный. Ну как-то так...
    Ответ написан
  • Поможете новичку в php?

    KorsaR-ZN
    @KorsaR-ZN
    Если нужна совсем примитивная запись в одну строчку то есть такая конструкции, работает со всеми выражениями возращающие bool,

    defined('NAME') or die(require_once "404.php"); ( or можно заменить на || )
    Ответ написан
    Комментировать
  • Как убрать transform для текста внутри input ?

    KorsaR-ZN
    @KorsaR-ZN
    По другому сделать надо, вынесите input за обертку с трансформацией, т.к трансформация наклоняет весь элемент с его содержимым.

    Рабочий пример:
    .search__input__wrap
    {
       position: relative;
    }
    .search-wrapper-skew
    {
       width: 158px;
       height: 21px;
       transform: skew(45deg);
       background: #fff;
    }
    .search__input__wrap input
    {
       border: 0;
       width: 135px;
       height: 21px;
    
       position: absolute;
       top: 0;
       left: 11px;
    }

    <div class="search__input__wrap">
       <div class="search-wrapper-skew"></div>
       <input placeholder="поиск по сайту">
    </div>


    f0f626f95cd94f8c9bbb61dca815dddc.png

    Ну пример ясен, там сделаете более красивее, как вам надо, ну чтоб текст не прилипал к скосам и т.д :)
    Ответ написан
    1 комментарий
  • Как заменить кучу урлов 301ым редиректом?

    KorsaR-ZN
    @KorsaR-ZN
    Если у Вас apache, то нужен модуль mod_rewrite.
    и через файлик (.htaccess) в корне сайта, можно сделать 301 редирект по маске URL.
    Ответ написан
    Комментировать
  • Как запретить доступ по прямой ссылке к файлам на хостинге для неавторизованых пользователей?

    KorsaR-ZN
    @KorsaR-ZN
    Сделать это можно, только пустив обработку таких ссылок на php файл, который будет проверять авторизацию и выносить решение пускать или нет.

    А вот, как потом файл отдавать клиенту, если он авторизован это отдельная история, и для ответа на нее нужна дополнительная информация.

    У Вас есть доступ к настройкам сервера?,
    Есть модуль на apache xsendfile или возможность его установить?
    Стоит ли nginx или есть возможность поставить?

    Если на все вопросы нет, значит нужно отдавать файл средствами PHP, что не очень эффективно, но тоже норм :)
    Ответ написан
    Комментировать
  • Поможете понять суть аргументов в функциях php?

    KorsaR-ZN
    @KorsaR-ZN
    Начнем с понятия области видимости функции, функция видит только переменные созданные внутри ее тела, либо переданные через ее параметры (аргументы). Других для нее просто не существует.

    Все переменные переданные в функцию через ее параметры (аргументы), могут быть переданы в функции несколькими способами, если это простой скалярный тип (число, строка, массив), то они передаются по значению, т.е значение переданной переменной копируется в аргумент этой функции и это значение становится доступно внутри функции по названию ее аргумента, и т.к была передача по значения, то внешняя и локальная переменная больше ни как не связаны с друг-другом.

    передача по ссылки (можно только переменные), перед объявлением переменной в параметры функции ставится знак &, это означает, что теперь будет передача в функцию не по значению, как выше, а по ссылки. т.е не будет ни какой копии значения, а будет реальная ссылка на внешнюю переменную, и это означает, что любые изменения локальной переменной внутри функции будут на самом деле изменять данные внешней переменной, более наглядно на примерах ниже...

    Теперь более подробнее про переменные внутри функции и ее параметры.

    Грубое говоря (прошу не пинать),
    Все параметры функции, что объявлены в (), ничем не отличаются от переменных объявленных внутри функции, за одним исключением, что в переменную объявленную, как аргумент функции, можно передать значение из вне (оно может, быть строкой, числом, объектом, другой функций и т.д), а переменную объявленную внутри тела функции, вы не как не сможете изменить из вне (ну конечно если она не является глобальной, ну это совсем другая история);

    Так что если у вас объявлена переменная $name, вне функции, а в самой функции или ее аргументе объявленная переменная с таким же именем, то они НИ как не пересекутся, т.к у внешних и внутренних переменных разная область видимости, за исключением передачи по ссылки, как описано выше.

    Пример 1 (передача по значению)
    $name = 'Вася';
    function u($name)
    {
       echo $name;
       $name = 'Коля';
    }
    
    echo u($name); // результат Вася
    echo $name; // результат Вася


    В первом примере получились такие результаты, т.к идет передача по значению и внешняя и локальная переменная ни как не связаны с друг другом.

    Пример 2 (передача по ссылке)
    $name = 'Вася';
    function u(&$name)
    {
       echo $name;
       $name = 'Коля';
    }
    
    echo u($name); // результат Вася
    echo $name; // результат Коля


    Во втором примере получились такие результаты, т.к идет передача по ссылки и локальная переменная теперь указывает на внешнюю переменную и все изменения локальной на самом деле изменять внешнюю, т.к локальная в данном случаи является лишь ссылкой.

    P.S Объекты (экземпляры класса) всегда передаются по ссылки не зависимо от значка &.
    Ответ написан
    Комментировать
  • Что нужно знать php программисту?

    KorsaR-ZN
    @KorsaR-ZN
    Это зависит от того, чем вы собираетесь заниматься...
    PHP разработчики бывают разные, и они всякие нужны :)

    Если просто клепать сайты с фриланс бирж, то это один набор знаний.
    Если что-то серьезное, то совершенно другой, вообщем нужна конкретика, чтобы точно ответить на вопроса :)
    Ответ написан
    Комментировать
  • Нагрузка на сервер (как избаивиться от index.php)?

    KorsaR-ZN
    @KorsaR-ZN
    Да, как выше было сказано возьмите родной .htaccess и в настройках включите пункт "Перенаправление URL" - /administrator/index.php?option=com_config
    Ответ написан
    Комментировать
  • Запрос с подсчетом суммы по объединяющей таблице с between?

    KorsaR-ZN
    @KorsaR-ZN Автор вопроса
    Решение нашлось, не знаю, на сколько правильно, но работает.
    Если у кого-то будет более правильный и оптимизированный вариант, пожалуйста расскажите, а мое решение выглядит так:

    SELECT SUM(am3.value) FROM 
    (
        SELECT am2.id, am2.value
        
        FROM auditors_audiences_map AS am2 
        
        LEFT JOIN audiences_range_map AS a2 ON (a2.value BETWEEN 13 AND 17) 
        
        WHERE am2.audience_id=a2.audience_id
    
        GROUP BY am2.audience_id
    ) AS am3
    Ответ написан
    Комментировать
  • Как проверить скачан ли файл?

    KorsaR-ZN
    @KorsaR-ZN
    Только если отдавать архив через php, но это не хорошо т.к нагрузка будет не нужная.

    Сделать нужно следующее, когда вы отдаёт файл пользователю, через php, то читайте его кусочками. И сохраняйте в буфер кол-во отданных байт, как кол-во отданного будет равно размеру файла, то файл можно считать скаченным и соответственно произвести удаление. Но если вы хотите ещё поддерживать докачку при обрыве соединения, то нужно ещё учитывать заголовки смещений при докачки и дополнять буфер уже оданными байтами ранее, при предыдущей сессии. Ну вот как-то так...

    Или второй вариант, по факту обращения к ссылки на скачивание, помечайте файл, как якобы скаченный, и потом скажем через 24 часа удаляете его.
    Ответ написан
    Комментировать
  • Как правильно реализовать обмен сообщениями между пользователями?

    KorsaR-ZN
    @KorsaR-ZN
    Посмотрите в сторону протокола XMPP.
    Ответ написан
    Комментировать
  • Как правильно сравнить время?

    KorsaR-ZN
    @KorsaR-ZN
    Замените $diff->format('%i%'); на (int)$diff->format('%R%i%');
    будет со знаком выводить, если < 0, значит первая дата больше второй.
    Ответ написан
  • Парсинг - Как получить подкатегории если они подгружаются при помощи js?

    KorsaR-ZN
    @KorsaR-ZN
    api.ricardo.ch вам в помощь, SystemService, а из него getCategories. Он доступен без получения ключа.

    Если не секрет, а для какой Вам у цели?
    Ответ написан
  • Почему не правильно вводит дату в базу данных mysql в PHP скрипте ?

    KorsaR-ZN
    @KorsaR-ZN
    Какого типа колонка (EndDate) в БД?

    Еще попробуйте заменить date("Y-m-d", $d1); на date("Y-m-d 00:00:00", $d1);
    Ответ написан
    6 комментариев