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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Да. Зависит от необходимой поддержки браузеров. PeerJS.
    www.html5rocks.com/en/tutorials/webrtc/datachannels
    https://github.com/ShareIt-project/DataChannel-polyfill - полифил через websockets (задействует сервер).
    Ответ написан
    Комментировать
  • Как внести переменную Twig шаблона во внешний js ?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А при чем тут индексация, robots.txt и внешние js файлы?
    Ответ написан
  • Почему в PHP time() возвращает UTC, а date() без параметров учитывает пояс?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Творится то что, что нужно еще и комментарии в мануале читать. В частности:
    The documentation should have this info. The function time() returns always timestamp that is timezone independent (=UTC).


    что логично, так как time обычно применяют для каких-то внутренних механизмов (время жизни кэша и т.д.).

    Что до strtotime
    will try to parse that format into a Unix timestamp (the number of seconds since January 1 1970 00:00:00 UTC), relative to the timestamp given in now, or the current time if now is not supplied.

    Так как отнимать мы будем время в UTC, логично что и текущее время будет спашено в UTC.

    Вообще что бы небыло проблем, лучше всегда работать и хранить даты в UTC как формат времени внутри приложения.
    Ответ написан
    Комментировать
  • Как сделать, чтобы while выводил первый элемент?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    убрать лишнюю строчку
    $mysql_result = mysql_query("SELECT id,id_team,name FROM team");
    // $mysql_array = mysql_fetch_array($mysql_result); - лишняя
    
    while($row = mysql_fetch_array($mysql_result)) {
    	echo '<tr>
    		<td>'.$row["id"].'</td>
    		<td>'.$row["id_team"].'</td>
    		<td>'.$row["name"].'</td>
    		</tr>';
    }
    Ответ написан
    Комментировать
  • Как сделать редирект в шаблонезаторе Twig?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Еще один плюс Twig - если разработчик хочет сделать что-то там, где этому нету места, то у него будут с этим проблемы.

    Не следует делать этого в шаблонах. Вообще. Если очень хочется то можно так:
    <script>
    window.location = {{post.link | json_encode()}};
    </script>

    Почему именно так? Потому что иначе пришлось бы возиться с буфером вывода, а это уже явно не то место где это следует делать. Если же у вас хоть один байт лета запроса просочился в stdout, то заголовки менять уже нельзя.
    но по хорошему это следует делать в контроллере.
    Ответ написан
  • PHP или Java в backend ?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну а почему только PHP или Java? Можно взять Hack как компромисс: сочетает в себе плюсы php и привносит в него строгость java.

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

    Но вернемся к нашим баранам. Что мы имеем из задания:
    1000 пользователей, пускай и активных, выдержит нормально написанный сайт что на php что на java. Это не хай-лоад.

    безопасность - зависит от настроек сервера. в плане PHP - при использовании PDO, prepared statements и/или нормальной ORM которая в свою очередь все это внутри использует, вероятность sql инъекций равна нулю. При использовании шаблонизаторов типа Twig вероятность XSS стремится к нулю (зависит от опыта разработчика, но экранирование вывода по умолчанию снижает вероятность ошибки). Для генерирования репортов: проще будет взять node.js, phantom.js и репорты генерить в этом добре, связав с основным приложением через какой rabbitmq/zeromq/Resque. Явно будет эффективнее и круче.
    Ответ написан
    4 комментария
  • Как организовать фрейм, но не на html?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Запомните, все то что происходит в браузере делается только на HTML + Javascript. PHP - на сервере и предоставляет данные или тот же HTML.

    Что до вашей задачи - AJAX.
    Ответ написан
    Комментировать
  • Как создать нейронную сеть на php или JS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Думаю перед тем как задавать подобные вопросы вам следовало бы хотя бы ознакомиться с тем что из себя представляет нейронная сеть или хотя бы один нейрон.

    из популярных либ для JS - https://github.com/harthur/brain
    Для PHP не в курсе ибо не было необходимости, проще вооружиться биндингом FANN.

    В любом случае рекомендую вам пока не пользоваться библиотеками и попробовать с нуля реализовать пару нейронок. Может хоть поймете насколько это просто и сложно одновременно.

    Ну и да, для чего-то серьезного стоит обучение хотя бы писать на c++ или D/Go/Rust хотя бы, можно так время обучения сократить с 10 часов до 2-х или с месяца до недели... сами понимаете. А уже использовать результаты можно и в JS.
    Ответ написан
    4 комментария
  • (PHP5) Почему присваивание работает как клонирование?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Нету тут никакой магии с клонированием.

    Для начала давайте разберемся что хранит $instance. Хранит оно ССЫЛКУ на объект а не сам объект. При простом присвоении по значению происходит копирование значения переменной, а оно у нас просто ссылка на объект. В итоге у нас уже две ссылки на один объект.

    При присвоении переменной $reference значения по ссылке, у нас две переменные делят одно и тоже значение. А значение это - ссылка на объект.

    Когда мы затираем ссылку в $instance, то есть мы меняем значение оной, оно же меняется и у $reference так как они делят на двоих одно значение. $assigned же имеет свою ссылку на объект.

    $instance = new SimpleClass(); // количество ссылок на экземпляр SimpleClass - 1
    
    $assigned   =  $instance; // количество ссылок на экземпляр SimpleClass - 2
    $reference  =& $instance; // количество ссылок на экземпляр SimpleClass - 2
    
    $instance = null; // количество ссылок на экземпляр SimpleClass - 1


    Как только у нас не останется ссылок на экземпляр класса, сборщик мусора удалит объект.

    А что до клона - если бы объекты бы копировались, начался бы ад, так как объекты хранят другие объекты, которые могут делить между другими объектами... словом там слишком сложно все становится и пусть уж лучше программист это в __clone сам разруливает.
    Ответ написан
    1 комментарий
  • Как распарсить дату вида "20 августа 2014"?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    strtotime(strtr('20 августа 2014', [
        'августа' => 'august',
        ...
    ]);


    суть вы поняли.
    Ответ написан
  • Почему не работают параллельные запросы?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Да, если вы прописываете массив реквестов, Guzzle будет пытаться все это дело отправлять через curl_multi собственно как и в примере.

    Так же почитайте вот это:
    guzzle3.readthedocs.org/en/latest/batching/batchin...
    Ответ написан
    Комментировать
  • Как правильно реализовать обмен сообщениями между пользователями?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    самый оптимальный вариант с точки зрения производительности - websockets. Можно реализовать на ReactPHP (+libav например) или node.js с шиной данных на zeromq/rabbitmq с основным приложением (в любом случае нужно будет организовывать).
    Ответ написан
    Комментировать
  • Связанность модулей, как лучше всего организовать конфигурацию ?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Почему бы не воспользоваться нормальным Dependency Injection контейнером и не прописать все зависимости нормально?
    Ответ написан
  • MySql почему не находит существующее значение?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    рыть нужно в понимание того, что такое float и double и как это дело хранится в памяти компа.

    stackoverflow.com/questions/2567434/mysql-floating...
    dev.mysql.com/doc/refman/5.0/en/problems-with-floa...
    Ответ написан
    Комментировать
  • Чем отличается junior от middle? а Senior?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    это довольно субъективные штуки. Как уровень владения английским языком (beginner, intermediate, advanced, native) и все в таком духе. Разные курсы/школы и прочее разное вам будут мерять по своим методикам. Прошли собес на мидла - вы мидл. Прошли собес на синьера - вы синьер. Знаю джуниоров которые посильнее некоторых "синьеров".
    Ответ написан
    1 комментарий
  • Что стоит прочитать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Можно Канта почитать. Ницше так же неплох, но может не пойти.
    Ответ написан
    Комментировать
  • Сжатие строчных данных на PHP, чем?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    php.net//manual/ru/function.gzdeflate.php

    Либо в вашем случае делать base_convert по частям.
    Ответ написан
    Комментировать
  • Что выбрать для REST и RBAC?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для REST будет идеален фреймворк основанный на Symfony/HttpKernel (имплементящий HttpKernelInterface). Это даст вам возможность абстрагироваться от запросов, применять реверс-прокси кешеры а так же возможность модифицировать запросы/ответы по слоям, этим упростив архитектуру. В частности быстро прикрутить CORS, сделать авторизацию на уровень выше и т.д. можно будет за счет http middlewares и в частности stackphp. Есть JMSSeializer (который можно будет заменить на свой сериализатор, если будет стоять вопрос о производительности), который позволит вам декларативно описать правила сериализации/десереализации ресурсов и вынести все это дело на слой выше, абстрагируясь таким образом от всего этого в коде вашего приложения. Так же возможность быстро прикрутить версионизацию апишки.

    Если у вас кучи связей и вопрос производительности не стоит остро (только поддерживаемость кода) - Doctrine ORM. Если производительность - острый вопрос, стоит смотреть в сторону использования DBAL и оберточек. Если у вас все будет сделано по уму (код напрямую с репозиториями не работает и вообще ничего не знает о Doctrine), то заменить слой работы с базой на что-то пошустрее будет не проблема.

    По интернационализации так же проблем особо не должно возникнуть. Есть экстеншены для doctrine, есть symfony/translation и кучи других либ.

    Если вам нужна гибкая система аутентификации и авторизации, разграничение прав гибкое и все такое - symfony/security удовлетворит все юз-кейсы и позволит все это покрыть тестами.

    Так что из перечисленных вами вариантов - Silex. Но если хочется еще и меньше бойлерплейт кода писать, то Symfony. Учитывая что по времени вы сильно не ограничены, то будет время разобраться как делать все правильно. Вопросы производительности стоит решать по мере возникновения проблем, вообще у REST с этим не так много проблем. Узкие места можно переписать на чем-то другом, например на go, можно оптимизировать persistance-layer, сериализацию (при простых запросах JMSSerializer дает большой оверхэд по времени, так что можно в особых случаях написать свой оптимизированный под определенный response сериализатор) и т.д.

    Но в целом вы можете использовать отдельные компоненты в связке с тем же Silex. Вообще все упирается больше в количество бойлерплейт и сервисного кода. В целом если вы будете подходить грамотно к построению архитектуры приложения можно на чем угодно написать нормально. Вопрос только в том что какие-то вещи где-то правильно сделать сложнее.
    Ответ написан
    1 комментарий