• Вывод taxonomy через foreach?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Думаю как-то так:
    if (count($cur_terms)) {
         foreach( $cur_terms as $cur_term )
    }


    вообще, нужно бы проверить, что в переменной $cur_terms в тот момент когда возникает ошибка, и добавить проверку.
    Ответ написан
  • Влияют ли комментарии и количество строк на скорость загрузки файла?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Но так как файл каждый раз читается интерпретатором (упустим кэширование) то должно быть он тратит какую то доли секунду на пробежку по комментариям.

    Да, но нет. Предполагается, что PHP-код работает в *nix/Linux среде. Linux, не настолько глупая ОС, что бы позволить себе такую роскошь, как дёргать с жесткого диска каждый раз, как он Вам понадобился. Часто запрашиваемые файлы хранятся в оперативной памяти либо, в буфере самого жесткого диска. Соответственно затраты на чтение самого файла - довольно минималистичны, это наносекунды на чтение мегабайтов кода и файлов.

    Далее, файл начинает "парсится", т.е. читаться интерпретатором. На этом этапе мы потеряем ещё несколько нано-секунд на чтение нескольких десятков/сотне/тысяч строк с комментариями (которые надо заметить, как таковыми комментариями не всегда являются, в PHP-фреймворке Symfony 2 и 3 - комментарии являются разновидностью управляющих конструкций, в т.ч. в них могут быть записаны роуты, связи и прочие дела. Аналогичные практики есть так же в C#/ASP.NET и в других фреймворках/технологиях).

    Далее, в PHP (как и во многих других интерпретируемых языках, включая Java, C#, Python и другие) есть такая штука, которая компилирует Ваш файл в байт-код, удаляя оттуда всё, что когда-то было комментариями и прочими штуками, нужными для "человеко-понятности" и превращает Ваш исходный код в бинарный файл. В некоторых случаях, это может быть просто высоко-оптимизированный код, в некоторых случаях это может быть сразу машинный код (для процессора).

    Например, Opcache (*по этой ссылке так же ответ на Ваш вопрос) уже поставляется "искаропки" с версии PHP 5.5, а в PHP 7.0 ещё и производительность интерпретатора возросла примерно в 2 раза (но это не мешает многим и многим проектам работать на PHP ветки 5.х).

    А ещё есть HHVM довольно специфическая штука, которая, насколько я помню, конвертирует PHP-код в C/C++ код, а потом компилирует его, за счёт этого производительность увеличивается иногда в разы. Вещь специфическая, и любимый блог "о прогулках с собакой" на WordPress'е запустить на нем так вот сходу - вряд ли получиться, но если стоит цель оптимизировать всё и всё - возможно HHVM станет отличным решением.

    Так же Вы можете посмотреть в сторону мега-популярного на просторах бывшего СССР CMS/Фреймворка по имени "1с Битрикс", если обратить внимание на скорость его работы и ряд других особенностей, в т.ч. необходимость настройки сервера таким образом, что кроме Битрикса там уже почти ничего не работает + он не поддерживает PHP версии выше 5.6 (хотя вот уже с год они пытаются перевести его на ветку 7.х) + он аццки тормозной, генерирует тонны запросов по поводу и без него и так далее... Но это не мешает ему прекрасно жить и развиваться и продаваться и ещё красоваться на сайтах некоторых ведущих в своей области компаний, в частности "Эльдорадо" и если мне не изменяет память - "М.Видео", ну и многих других, например "ТеремПро".

    Подводя итог, хочу Вам посоветовать не забивать голову всякой ерундой на тему оптимизации кода путем вычистки оттуда комментариев... при том уровне оптимизации, о котором Вы говорите - код пишут на чистом Си, а не на PHP. И, в продолжение банкета, вот Вам пример кода из документации по Symfony:
    /**
     * @Route("/blog/{date}/{slug}/comments/{comment_slug}")
     * @ParamConverter("post", options={"mapping": {"date": "date", "slug": "slug"}})
     * @ParamConverter("comment", options={"mapping": {"comment_slug": "slug"}})
     */
    public function showCommentAction(Post $post, Comment $comment)
    {
    }


    Здесь комментарий несёт не информационно-смысловую, а непосредственно логическо-кодовую нагрузку. Подумайте, что будет если его удалить?

    *подсказка - код перестанет работать должным образом! :)

    ----------

    И ещё такой момент, есть ли смысл ставить дополнительные переносы строк и обязательно ли переносить открывающуюся фигурную скобку на новую строку?

    За Вас всю эту работу сделает IDE. Возьмите PHPStorm или NetBeans, среди прочих, они так же отлично подходят для написания кода, в т.ч. PHP-кода. На счёт NetBeans не скажу, но PHPStrorm точно умеет подстраивать код под стандарты PSR (о которых Вам писали выше), рекомендую ознакомиться со всеми из них, их не так много. А потом, настроить IDE на то, что бы она автоматически форматировала код. В NetBeans (и PHPStorm при выборе раскладки NetBeans) - это клавиши Alt+Shift+F. НО! самое главное, какой бы Вы стандарт не выбрали, хоть свой собственный - придерживайтесь его в течение всего проекта и не отступайте от него, проект должен быть написан в едином стиле! Это важно.
    Ответ написан
    3 комментария
  • PHP фреймворк для начинающего разработчика?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Фреймворков в целом, которые достигли должного уровня популярности и народного признания - не так уж много (если говорить о PHP-фреймворках).

    Для начинающего, с целью понять сущность MVC, "пощупать" некоторые аспекты фреймворка, такие например, как загрузка библиотек и пр. подобности, я бы порекомендовал Вам CodeIgniter. Отличная документация, довольно много людей, кто сможет Вам ответить на возникающие вопросы, есть документация на русском. А так же, минимальное количество "лишнего" из коробки, например, шаблонизаторов (которые Вы можете самостоятельно подключить, если очень хочется).

    После этого фреймворка, промежуточным, можно было бы считать Kohana, но, он что-то то "умирает", то снова "воскресает"... С документацией на него, по моему, всё так же плохо (читай "не очень хорошо") как и всегда... но, по нему есть несколько неплохих видео-уроков.

    Суда же можно отнести Yii, на мой взгляд, он застрял где-то между "большими" и "маленькими" фреймворками. Маленьким его уже не назовёшь, по ряду признаков, а до большого и целостного - он ещё не дотягивает. Но, он довольно популярен на просторах бывшего СССР (по понятным для многих причинам), в виду чего имеет довольно большое русскоговорящее сообщество и целую толпу ярых фанатов.

    Далее, в обязательном порядке будет идти Laravel - превосходная документация, примеры и фантастическое количество видео-уроков (если хорошо понимаете английский). Отличный фреймворк собранный на базе Symfony. Относится уже к "большим".

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

    P.S. Я понимаю, что Вы спрашивали "какой фреймворк учить первым?", а не какие они бывают вообще. Но, дабы предостеречь Вам от вопросов типа "какой фреймворк учить вторым?" или "почему Symfony в роли первого фреймворка так тяжело изучать?" и массы прочих подобных - озвучил одни из самых популярных фреймворков в мире веб-разработок в ракурсе PHP.
    Ответ написан
    1 комментарий
  • Как правильно спроектировань БД?

    Wolfnsex
    @Wolfnsex Куратор тега Веб-разработка
    Если не хочешь быть первым - не вставай в очередь!
    Есть две таблицы. Таблица с этими товарами и таблица с брендами. Эти две таблицы связаны друг с другом через третью таблицу.

    У вас один товар может иметь сразу несколько брендов?

    Я так понимаю надо сделать таблицу соотношений, где два поля - id_товара и id_его аналога
    Допустим у товара с ID 1 есть три аналога - получается на один товар три записи. А у этого аналога в аналогах - товар с ID 1 и оставшиеся два товара. Уже 6 записей. В общем что то мне такое решение не нравится.

    В целом, это вполне нормальная практика, по крайней мере, с точки зрения логики. Например, "лампочка А", логически может быть заменена на "лампочка Б", но обратная замена может быть не целесообразной, по каким-то признакам. Так же, при таком раскладе Вы сможете сортировать вывод аналогов по степени "рекомендуемости" их применения, на каждый товар и так далее. Но, у этого подхода безусловно есть и недостатки, в частности, это избыточность данных, дополнительные телодвижения по добавлению аналогов в каждый товар, лишнее место на диске, раздувание БД и так далее.

    Если же все товары между собой являются абсолютными аналогами друг-друга, есть альтернативный подход. Он заключается в том, что вы создаёте какую-то группу аналогов, например, в таблице analog_groups, каждая запись в которой = 1 группа аналогов. Далее, Вы указываете в товаре, к какой группе аналогов он принадлежит, это можно делать как по ID группы, так и по её заголовку (или любому другому параметру, который Вы к ней добавите) или по параметру id_группы_аналогов у любого другого товара, который в эту группу уже входит.

    Особенности такого подхода:
    а) Отсутствие избыточности данных
    б) Все товары в одной группе аналогов всегда будут аналогами для всех остальных товаров в этой же группе
    в) Нам не нужно будет делать множество одинаковых телодвижений, постоянно перелинковыая аналоги товаров друг у друга
    г) Экономиться место на диске и не раздувается БД
    д) Мы не можем выставить сортировку или приоритеты вывода аналогов для каждого отдельно товара без жестких костылей
    Ответ написан
    5 комментариев
  • Как исправить глюки с SELECT MAX(`id`)?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Не уверен, что это 100% поможет, не проверял логику работы этой функции, но попробовать стоит:
    SELECT * FROM you_table WHERE id = LAST_INSERT_ID();


    Иначе говоря:
    SELECT LAST_INSERT_ID();

    *Сразу не заметил... Но после с автоинкрементом лишним не будет.
    Ответ написан
    2 комментария
  • С чего начинать проектирования базы данных?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    собрался делать "Система управления школьниками"
    - всегда о такой мечтал!

    Простите, не сдержался, далее по делу:
    Я не могу знать Ваши личные предпочтения и манеры преподавания к которой Вы привыкли или считаете наиболее верными или предпочтительными, но в своей преподавательской практике, я не редко использовал метод "визуализации" происходящего. Довольно сложно объяснить человеку, который не работал с сетями, что такое IP4-пакет... но, когда рисуешь это визуально, качество восприятия значительно улучшается.

    Собственно, к чему я это... Возьмите лист бумаги, или холст (paint, photoshop, etc.), или программу для рисования блок-схем, или программу для создания скетчей или что-то подобное и попробуйте отрисовать все таблицы/объекты БД и связи между ними. Так же, аналогичный функционал есть во многих программа для работы с БД (визуализация таблиц и их связей). Когда Вы будете визуально видеть и представлять объекты - гораздо проще воспринимать происходящее.

    Пример из жизни - попробуйте объяснить человеку, что такое таблица реляционной БД... а если провести аналогию с листом из Excel - в 95% случаев, понимание приходит практически моментально.

    Так же могу сказать, что выбор на начальном этапе PostgreSQL - не лучшая идея. PostgreSQL - очень классная БД, если Вы действительно понимаете зачем она Вам нужна и почему именно она. То есть, в тех случаях, когда Вам уже жмут "MySQL-штаны" и не хватает простора для действий и нескольких сотен лишних параметров, которые нужно подкрутить и поднастроить, а так же феерического количества параметров и возможностей самой БД - PostgreSQL будет оптимальным выбором, в ином же случае, Вы будете проклинать мир, разработчиков и всё сущее, постоянно сталкиваясь с некоторыми трудностями, которые иногда могут даже показаться глупостями (хотя, в 99% случаев это не так). Например, чего только стоит момент, что в PostgreSQL нет "табличных движков", или нельзя поменять местами ранее созданные колонки в таблице без полной перезаписи всей таблицы, или дюжина индексов (и какой выбрать?!), против куда более скудного количества в MySQL...

    Мои студенты довольно часто сталкивались с подобными проблемами, по этому, мы пришли к такой практике - база проектируется и прототипируется на MySQL, меняется там до посинения, пока не будет выверен действительно нужный вектор развития БД, код обкатывается... а потом, проект легко и непринуждённо переезжает на PG, где впоследствии снабжается некоторыми плюшками и полезностями уровня PG (теми, который в MySQL-е нет).

    Я рекомендую Вам, так же как и моим студентам - сначала спроектировать базу в MySQL, мы обычно делаем это в программе HeidiSQL (бесплатная), всё очень наглядно и разноцветно. Обкатать Ваш код и логику работы БД, а потом уже, если сильно не терпится - переносить на Postgres.

    Из личного опыта, могу сказать, что многие выбирают PostgreSQL, т.к. он(а) "круче". Это не совсем так, или, совсем не так... Из множества проектов, на PG мы поставили только один, там база данных исчислялась многими десятками и сотнями гигабайт, количество таблиц приближалось к тысяче, а кол-во записей в отдельно взятых таблицах - десятками миллионов. Но, даже сейчас я работаю в поддержке проекта, объёмы данных которого переваливают за 1Тб, и всё прекрасно живёт на MySQL. По этому, если Вы выбрали PG исключительно по каким-то идеологическим, а не техническим соображениям - подумайте ещё раз.
    Ответ написан
    Комментировать
  • Как и чем переносить/синхронизировать файлы между серверами?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    А чем Вас rsync не устроил? Этой штукой пользуются многие довольно серьёзные проекты. Трафик при этом минимизируется, то есть, если Вы в одном файле объёмом 1Гб измените одну букву, то не нужно будет снова отправлять целый гигабайт, будут отправлены только изменения.

    Выдержка из Вики (ссылка выше):
    С планировщиком задач, таким как cron, возможно организовать автоматизированное основанное на rsync зеркалирование по защищенному криптографически каналу между многими компьютерами и центральным сервером.
    Ответ написан
    Комментировать
  • Как сделать abort для PHP страницы по отношению к AJAX-запросу?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    На самом деле, скрипт будет работать до тех пор, пока не выполнится целиком или пока не достигнет max_execution_time (параметр в php.ini), обычно он равен 30 секундам, но при возможности доступа к php.ini вы можете выставить это время вплоть до бесконечности. Если PHP запущен из консоли - этот параметр не действует, но это не Ваш случай. А то, что вы подразумеваете под "концом страницы" - не более чем сброс буфера, но не стоит забывать, что на веб-сервере может быть свой буфер, который возможно тоже придётся настроить, что бы сервер не "висел" в ожидании.

    То есть алгоритм такой, вы запускаете скрипт, как следствие AJAX-запроса, отправляете в вывод данные, которые Вам нужны (через print/echo), когда последняя порция данных отправлена - делаете flush(), и... скрипт продолжает работать дальше.

    Так же, буфер автоматически сбрасывается (отправляется в браузер и/или промежуточный сервер) при завершении работы скрипта, именно по этому "конец работы скрипта" у Вас ассоциируется с "концом страницы".
    Ответ написан
    6 комментариев
  • Какой принцып работы сервера на virtualbox?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Всё зависит от того, какой именно Вы ставите сервер. Если это dev-сервер (т.е. сервер для разработки), вполне логично весь мусор складывать туда. Особенно часто бывают ситуации, когда рабочая (основная ОС) - это Windows, а разработка должна идти под Linix/*nix (если Вы не пишете на C#/ASP.NET, разумеется), т.к. это крайне полезно по многим показателям, от "родной" файловой системы со всеми вытекающими, до... особенностей работы конечной ОС. Так вот, если у Вас сервер именно такого плана, то есть, сервер на котором Вы пишите и тестируете код, что бы потом выложить его на продакшен (боевой) сервер - то ставьте всю эту беду туда, включая Gulp, Node.JS, всякие JPEG trim и PNG optim, сборщики проектов и всё прочее, что Вам может понадобиться. Отладчики, (в частности для PHP) обычно прекрасно работают в таких связках. В конце концов зачем оно Вам, на хост-машине?

    Ещё одним фактором, в пользу того, что бы поставить Node.JS и его плюшки на Linux-машину (в частности работающую на VirtualBox'e) будет то, что Windows/NTFS довольно хреново дружит с длиннющими именами в путях модулей, которые любит создавать Node.JS, оно конечно работает, но иногда из-за этого возникают проблемы, который в *nix/Linux не наблюдается.

    Одним из вариантов, как Вам уже советовали выше, является Vagrant. Он представляет собой обёртку поверх VirtualBox'а или VMWare, с набором готовых операционных систем ("боксов"), для самых разных задач, от вёрстки и разработки на PHP или Node.JS до всего и сразу. Ставится и настраивается всё в несколько кликов (команд). Среди прочего - он автоматически настроит сеть и все прочие параметры гостевой операционки.
    Ответ написан
    Комментировать
  • Почему не известна переменная?

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

    Думаю, ситуацию исправило бы примерно следующее:
    Mail::send('email_verify', $data, function($message) use ($user) { ...


    Тут немного подробностей.
    Ответ написан
    Комментировать
  • PHP 7: не удаётся подключиться к FTP-серверу извне. В чём неправ?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Неплохо бы увидеть лог с ошибками сервера или непосредственно скрипта...

    Если же указываю в качестве адреса 192.168.0.1 или 127.0.0.1, то прекрасно заходит. В PHP5-FPM подключалось. В чём может быть дело?

    Скорее всего, дело в том, что либо "адрес вроде myftpsite.com" не указывается на IP: 192.168.0.1 или 127.0.0.1, либо, скрипт не может сопоставить адрес с IP'шником. Проверить это Вы можете открыв командную строку и написав туда следующую команду:
    ping myftpsite.com

    Если увидите, что пинг пытается обратится на IP 192.168.01 или 127.0.0.1 - значит, скрипт не может сопоставить домен с адресом. Если же там будет какой-то другой IP - то, Вы пытаетесь подключиться не к тому ФТП-серверу, который расположен по адресу 192.168.0.1. Что бы локально прописать сопоставление адреса (домена) IP'шнику - можно отредактировать файл C:\Windows\System32\drivers\etc\hosts
    Ответ написан
    Комментировать
  • Как найти в базе данных сайта WordPress страницу, потенциально зная лишь её заголовок?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    На счёт phpMyAdmin'а не скажу, но Вы легко можете это сделать следующим образом:
    1. Экспортируем базу в SQL-файл
    2. Открываем полученный файл в любом редакторе
    3. Нажимаем Ctrl+F или F3
    4. Вводим искомую строку
    5. Ищем... И если находим - видим ID'шник или какую-то другую информацию, идентицирующую искомую страницу.

    Скорее всего, база довольно небольшая и это легко реализуется.

    Так же, подобный функционал (для реализации поиска по всей БД) есть в множестве программ для работы с БД, например, в HeidiSQL, но, так как Вы пользуетесь phpMyAdmin'ом, могу предположить, что возможности подключить к БД из программы "напрямую" у Вас нет, по этому, предложил выше описанный вариант.
    Ответ написан
    Комментировать
  • Как эффективно построить инфраструктуру для веб сервиса с периодическим "хайлодом"?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Вариант 1. Использовать Varnish, для ресурсов формата "новостник", по моему идеальное решение (в версии 5.0 в зачаточном состоянии появилась поддержка HTTPv2/SSL, судя по ChangeLog).

    Вариант 2. Использовать Nginx + балансировку нагрузки.

    Вариант 3. По быстрому склепать или арендовать облако, где бы ресурсы выделялись динамически, по наиболее оптимальным для Вас алгоритмам.
    Ответ написан
    Комментировать
  • Как сделать проверку ячейки массива на соответствие условиям?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    foreach($Array as $v) {
        if ($v->model == 'iphone 4 4s') {
            // Код выполняется
        } else {
            //Ничего не происходит
        }
    }
    Ответ написан
  • Какой запрос выгодней по производительности?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Всё на самом деле зависит от того, что лично Вы подразумеваете под определением "сильно нагруженный портал" и от многих других факторов, в том числе, от используемого железа, версии MySQL (и/или его форка) и конечных параметров и настроек, и так далее. А так же, от "качества" администратора, которому вверят эту БД.

    Субъективно, оценивая Ваш вопрос, я бы порекомендовал примерно следующее:
    В "интернете", активно практикуется подход кэширования данных, не зависимо от того, какие это данные именно. Кэшируют всё, от отдельных блоков на сайте, до целых страниц вместе с cookie's, картинками и скриптами.

    В пользу кэша говорят многие факторы. Против же кэширования обычно приводятся два основных аргумента:
    а) Лишний расход оперативной памяти и/или жесткого диска
    б) Кэш не стоит применять в тех случаях, когда ресурсозатраты (машинные) на кэширование выше, чем полученный эффект экономии от получения данных из кэша (обычно это те случаи, когда количество циклов записи меньше, или незачительно больше чем количество циклов чтения данных)

    В вашем же случае, кэширование возможно в двух вариантах:
    1. MySQL (в отличии от некоторых других БД) сам кэширует результаты запросов, причем делает он это по умолчанию, но параметры кэширования можно (и чаще всего нужно) настраивать дополнительно
    2. Использование кэша с помощью специально разработанных для этих целей программ, например Redis или Memcached. PHP (и Laravel в т.ч., если мне не изменяет память) отлично дружат с ними.

    Продолжая мысль, в Вашем случае, можно использовать один двух вариантов: либо ограничиться тем, что MySQL сам закэширует результаты многих запросов и сам будет брать их из кэша (причем это касается не только запросов относительно координат, но и почти всех остальных запросов),

    либо, Вы можете использовать для хранения подобных данных (например, соотношения координат с результатами поиска) либо в таблицы в памяти (в MySQL есть тип таблиц "MEMORY"), либо хранить эти данные в Redis/Memcached/etc, глобально суть не изменится, скорость работы обоих вариантов (Таблицы в памяти vs Redis/Memcached) будет примерно сопоставимой.

    Обновлять данные в хранилище можно на основе событий, реализация которых в достаточной мере присутствуют в Laravel. То есть, вкратце выглядит это так:
    1. Обновляется (добавляется, изменяется) какой-то блок данных, связанный с фирмой, это в свою очередь порождает какое-то событие (одно из событий)
    2. Слушатель событий получает данные и делает соответствующие изменения в кэше данных, таким образом, данные в кэше всегда актуальны (либо рассинхронизация данных довольно мизерная, в пределах примерно секунды) и никакие CRON'ы, которые бестолку будут мучить базу или кэш-хранилище - не нужны.
    Ответ написан
    1 комментарий
  • Какие есть системы учета данных (клиентов, заказов, выполненных работ)?

    Wolfnsex
    @Wolfnsex Куратор тега Веб-разработка
    Если не хочешь быть первым - не вставай в очередь!
    CRM'ок написанных специально для веб-студии, я думаю, либо не существует, либо довольно незначительное количество, так как бизнес-процессы веб-студии, на уровне CRM - мало чем отличаются от подобных процессов других компаний. Вы можете выбрать наиболее удобную систему по своему усмотрению, из десятков представленных и/или ознакомиться с уже готовыми обзорами.

    От себя могу добавить, что в данный момент обороты набирает система "Битрикс24", и вроде бы как, по отзывам коллег, жить с ней можно + есть бесплатная версия на ограниченное кол-во пользователей.

    P.S. В своё время, столкнувшись с аналогичной проблемой и спецификой нашей работы (основная часть наших заказчиков - довольно не плохо разбирается в исходном коде и отлично знают, что хотят получить на выходе), после многочисленных попыток скрестить весь зоопарк в единую систему (RedMine'ы, CRM'ы, GitLab'ы, BugZilla'ы и Mantis'ы и прочие продукты) - мы написали свою систему, потратив на это около двух лет работы.
    Ответ написан
    Комментировать
  • Синтаксис php. Как объединить 2 строчки выражения в одну?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Подозреваю, что вот так:
    echo myFunc()->var()->var;
    Ответ написан
  • Как вывести запись из БД?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    В целом Вам уже предложили верное (по крайней мере, логически верное) решение. Но лично я вижу у Вас два ключевых момента:

    1. Зачем Вам получать данные из базы, которые только что, туда же и записали? Тем более, таким, относительно извращенным образом, и тем более в 2 запроса (запрос + вложенный запрос). Если нужно получить последнюю запись из базы, достаточно сделать запрос типа:
    SELECT * FROM table ORDER BY id DESC LIMIT 1;
    Так мы получим последнюю запись, причем не ту, которую мы туда вставили, а ту, которая физически будет последней на момент выполнения запроса, что полностью аналогично Вашему варианту, но в 1 запрос (без подзапросов).

    Есть ещё вариант запроса, в один запрос:
    SELECT * FROM table WHERE id = LAST_INSERT_ID();
    По этому варианту, не могу точно сказать что мы получим, последнюю существующая запись в БД на момент выполнения запроса, или конкретно последнюю вставленную нами запись в БД... но работает он точно не хуже Вашего примера :)

    1.1. Почему бы нам сразу не выводить те данные, которые мы только что записали в БД? Ведь это как раз те же самые данные, которые нам и нужны, но они уже получены.

    2. Обычно, в такой ситуации, приводят вывод var_dump() (или аналогичной функции), что бы понять, почему именно данные не выводятся. А что бы это понять, нужно сначала выяснить, что у нас в переменной вообще... по крайней мере, это может помочь другим разработчикам, а Вы сможете более точно сформулировать вопрос, например, "ожидалось, что в результате будет скалярный тип - а там почему-то курсор результата запроса из БД". То есть,
    <?php
    var_dump($result);
    //вместо
    echo $result;

    - сильно облегчит решение подобных задач в будущем.
    Ответ написан
    1 комментарий
  • Загрузка кода страницы и исполнение JS с изменением HTML-кода на php. Есть готовые решения?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Вы же понимаете, что для того, что бы выполнить JS-код в PHP, нужно JS-движок либо написанный на самом PHP, либо в него встраиваемый. Вариант движка JS написанного целиком на PHP - я не рассматриваю вообще, так как это был бы полный маразм и с точки зрения трудозатрат и с точки зрения производительности и конечного результата. Соответственно, остаётся вариант - использовать решение которые бы в PHP встраивалось... но, такое решение с вероятностью 99% не будет доступно на виртуальном хостинге, но его можно установить на локальный VPS или выделенный сервер.

    Одним из наиболее популярных JS-движков является V8, вырезанный из Google Chrome, в частности, есть его реализация для PHP, наверняка кто-нибудь уже попытался написать что-то подобное (скрестить PHP и JavaScript, что бы получить некое подобие браузера)...

    Но я бы пожалуй, попробовал начать с каких-то более простых (в реализации) вариантов, в частности, поискал бы команды и/или плагины для браузера, которые бы позволяли сохранить код страницы целиком в HTML-файл, управляясь при этом из командной строки, или попробовал бы написать скрипт для браузера (на JS), который бы вставлялся в конец страницы (например, с помощью простейшего прокси, который можно написать на том же PHP или поковыряться с Nginx/Apache), забирал бы текущий HTML-код прямо из браузера, после его изменений и отправлял бы его в готовом виде на PHP-скрипт, который бы после парсинга выдавал адрес следующей страницы в тот же скрипт, и так до бесконечности (или пока нужные страницы не кончатся).
    Ответ написан
    Комментировать
  • Как сделать редирект на русскую и английскую версию сайта?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Среди прочего, браузер обычно сам выдаёт набор предпочитаемых пользователем языков, практически готовое решение + список "русскоговорящих" языков есть тут. Но если очень хочется именно по IP и/или браузер не прислал набор предпочитаемых языков (*я бы в этом случае просто перекинул на EN), то можно воспользоваться готовым решением для PHP.
    Ответ написан
    Комментировать