«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2019/08/14 08:59:48  №1453019 1
Кто-нибудь из знатоков может своими словами кратенько разжевать новичку, что такое компосер? Я так понимаю, это какая-то линуксовская программа типа гита, которая сидит в папке с дистрибутивом твоего фреймворка, и , при установке, куда-то лезет, забирает последние версии каких-то файлов, обновляет, загружает и вообще доминирует
Ответы: >>1453059 >>1453190 >>1453551
Аноним 2019/08/14 09:31:35  №1453059 2
>>1453019
Она есть под любую ось.
Устанавливает пакеты по конфигурации composer.json
Основная идея в указании зависимостей:
Например пакет а версии 1.1 работает только с пакетом б версии 2.3 это указано в конфигурации пакетов по сему композер скачает тебе только совместимые версии.
Ответы: >>1453241
Аноним 2019/08/14 11:27:39  №1453190 3
>>1453019

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

Ты создаешь файл composer.json, описываешь в нем названия и примерные версии нужных для работы твоего проекта библиотек. Затем ты запускаешь композер.

Он подбирает совместимые версии библиотек, записывает их в файл composer.lock, скачивает, установливает в папку vendor. Также, если этим библиотекам нужны другие библиотеки (зависимости), он подбирает их версии и тоже устанавливает. Затем он настраивает автозагрузку (автоматическое подключение файлов) для этих библиотек так, что тебе достаточно в своем коде подключить единственный файл (vendor/autoload.php).

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

Все это можно делать вручную, но уйдет больше времени. Представь, если у тебя подключено 20-30 библиотек. Также, обновление потребует кучу времени, ведь тебе надо проверить их вручную для каждой библиотеки.

Композер работает в командной строке, потому, чтобы им пользоваться, надо сначала освоить её. У меня есть урок для начинающих: https://github.com/codedokode/pasta/blob/master/soft/cli.md
Ответы: >>1453241
Аноним 2019/08/14 12:56:16  №1453241 4
>>1453190
>>1453059
Как все умно сделано-то, спасибо, аноны
Ответы: >>1453267
Аноним 2019/08/14 13:34:04  №1453267 5
>>1453241
Не умно. Если в пакете A зависимость от пакета B с версией 1.0.0, тогда установив пакет A ты хуй установишь пакет B другой версии
Ответы: >>1453616
Аноним 2019/08/15 06:05:17  №1453616 6
>>1453267
В этом весь смысл дурилка
Ответы: >>1453649
Аноним 2019/08/15 07:28:40  №1453649 7
>>1453616
Например мне надо поставить пакет A и B. Оба зависят от пакета С, но разных версий. Из-за этого я не смогу одновременно поставить A и B.

Это специально сделано?
Ответы: >>1454021 >>1455475
Аноним 2019/08/15 07:50:24  №1453656 8
Скажите, а как в апаче запретить доступ ко всем каталогам, кроме public?

Ответы: >>1453745 >>1455475 >>1455476
Аноним 2019/08/15 22:26:33  №1454210 9
Объясните мне как решить проблему при выводе символа строки через квадратные скобки, если строка написана кирилицей, кодировка слетает и выводит какую-то хуйню, вот пример: https://ideone.com/wMhDPb
Ответы: >>1454243 >>1455475
Аноним 2019/08/16 08:00:41  №1454326 10
Возникла такая проблема - в админке сайта нужно сделать загрузку больших файлов (>100 мб).

Я с помощью js разбиваю файл на части по 5мб (chunks), а потом собираю их все вместе уже на сервере. У меня возникла проблема с авторизацией. Доступ к загрузчику файлов должен быть только у админа, поэтому перед загрузкой каждой части я проверяю куки пользователя и делаю запрос в бд перед отправкой файла, чтобы убедиться, что загрузку осуществляет админ.

Это нормальное решение в плане нагрузки на сервер? Меня очень смущает, что на каждую часть файла приходится sql запрос, можно как-то иначе решить этот вопрос? Как можно осуществить контроль к загрузчику без использования sql каждый раз? надеюсь понятно расписал
Ответы: >>1454365 >>1455475
Аноним 2019/08/16 16:39:25  №1454631 11
Анончики, объясните, пожалуйста, где в задаче про список абитуриентов нужно использовать класс Абитуриент?

Вот получаю я информацию из БД, мне нужно её занести в массив экземпляров класса и потом уже передавать в контроллер?
Аналогично и с внесение данных в БД?

Зачем нужен класс Абитуриент, если можно сразу использовать данные полученные в классе таблицы?
Ответы: >>1454671 >>1455475
Аноним 2019/08/18 02:10:55  №1455475 12
>>1454631

Работать с формой регистрации/обновления данных будет в разы удобнее при наличии объекта. Ты хочешь хранить данные в массиве, но давай сравним эти 2 подхода:

- структура объекта, какие у него есть поля, описаны в коде, к ним можно писать комментарии, а структура массива - нет
- в объекте могут быть методы
- в объекте можно использовать приватные поля и инкапсуляцию
- на объект можно поставить тайп-хинт с указанием класса, на массив - только хинт array без описания структуры

Таким образом, код будет удобнее читать.

>>1454326

Если запрос выбирает одну строку по ключу, то это не проблема. Сделай тест - скорее всего MySQL может делать тысячи таких запросов за секунду.

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

Не гадай насчет производительности, а делай замеры. Интуиция тут сильно подводит, часто на практике медленной оказывается та часть, которую ты считал быстрой.

>>1454210

Вот на всякий случай урок по строкам и utf-8: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

>>1453649

Да, такая проблема есть, но она не в менеджере пакетов. Например, ты можешь вручную скачать библиотеки версий 1.4 и 1.5, но ты не сможешь их подключить из-за одинаковых имен классов. В JS эта проблема решается тем, что там есть модули и нет требования к уникальности имен классов.

>>1453656

Сделать каталог public корневым (DocumentRoot). Это самый надежный способ.