Задать вопрос
  • Обязательно ли объявлять тип переменной в PHP 8?

    DevMan
    @DevMan
    не обязательно, это просто рекомендация.
    и частый затык новичков, которые воспринимают все подчеркнутое как ошибку, хотя это только намек.
    Ответ написан
    Комментировать
  • Проблема с выходом из режима сна?

    Zoominger
    @Zoominger
    System Integrator
    Известная проблема, я тоже с таким сталкивался.
    Решения нет. Проблема в абсолютно убогой поддержке линуксом стандартов ACPI в целом и на десктопах с ноутбуками в частности.
    Я серьёзно. На каких-то дистрибутивах с этим лучше, на каких-то хуже, где-то с другим железом такое почти не встречается, где-то - постоянно.
    Ответ написан
    Комментировать
  • Почему на почту приходит только один файл?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что в письмо добавляется только один файл.
    Ответ написан
    Комментировать
  • Почему .env файл не пушится в гит?

    delphinpro
    @delphinpro
    frontend developer
    Это как раз не проблема.
    В гите должен присутствовать только .env.example с примерами настроек.
    Остальные .env файлы, во-первых, содержат критические данные (логины пароли от дб как минимум), во-вторых, зависят от окружения и могут отличаться на проде , деве и у каждого программиста в команде локально.
    Ответ написан
    Комментировать
  • Компьютер не загружается с флешки. Причина в чём?

    Zoominger
    @Zoominger Куратор тега Компьютеры
    System Integrator
    Выставьте приоритет загрузки.
    Ответ написан
  • Какое окружение вы используете для разработки php?

    DevMan
    @DevMan
    phpstorm для основной разработки, любой редактор под руками (vsc, atom, sublime, nano, vim...) для посмотреть/быстрых маленьких правок.

    сервер: все (за редким исключением) ставлю из пакетов, затем допиливаю ручками.

    phpmyadmin/аналоги–для–других–баз последний раз видел году в 2010. с тех пор использую либо консоль, либо гуевые тулзы (для удаленного доступа через ssh/http–тунель).

    докеры, вагранты, "идентичное проду окружение", "сборки – гавно" – это все типичный булшит и базвордс.
    иногда перечисленное реально нужно и полезно (сам пользую где надо), но далеко не всегда/везде и не всем.

    разрабатываете в одиночку – вообще пофигу на чем, лишь бы вас устраивало и было вам удобно.
    разрабатываете в команде – пока ваш код запускается у других участников (что не проблема, если понимать что делаешь/особенности языка под разные платформы/следование принятым соглашениям), всем плевать на чем вы его у себя крутите. хоть стоя в лыжах в гамаке и на утюге.
    Ответ написан
    12 комментариев
  • Как не распыляться в обучении?

    Adamos
    @Adamos
    Эффект крысы, нашедшей рычажок, включающий электроды у нее в мозгу.
    Ты хватаешься за новую технологию, играешься с ней, получаешь удовольствие, в крови плещется дофамин.
    А берешься копать глубже - там уже рутина, неинтересно, уровень дофамина падает и мозг ищет, как его поднять. Да вот же - надо бросить все, схватиться еще за одну игрушку, и получишь новую дозу.
    Пока такое поведение не будет сопровождаться выбросом кортизола, потому что тебе реально надо заниматься делом, а ты балуешься - так и будешь "жать на рычажок".
    Можно начать с проверки, чему ты научился за эти 1,5 года. На каких-нибудь тестах, которые ткнут тебя носом в грязь и покажут, что ты полный неуч, похватал по верхам, но всерьез ничего не освоил.
    Ну, банально выйти из этой самой пресловутой зоны комфорта. Испортить себе это благодушное настроение, создать стресс. Он мотивирует.
    Ответ написан
    1 комментарий
  • Как не распыляться в обучении?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Съезжай от родителей.
    Ответ написан
    1 комментарий
  • Почему не меняются записи в базе данных репозитория GitHub?

    deepblack
    @deepblack
    Справку не читай - и так сойдёт!
    Ответ написан
    Комментировать
  • Как отсортировать массив по дате?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Ниже возможное решение. Разбирайся:
    <?php
    function myDataFormat($d) {
    	$months = [
    		'январь'=>'01',
    		'июнь'=>'06',
    		'июля'=>'07'
    	];
    	
    	$splitted_data = explode(' ', $d);
    	return $splitted_data[2]
    		 	. $months[$splitted_data[1]]
    		 	. str_pad($splitted_data[0], 2, '0', STR_PAD_LEFT) ;
    }
    
    function mySort($arr) {
    	usort(
    		$arr,
    		function($a, $b) {
    			return myDataFormat($a['data']) <=> myDataFormat($b['data']);
    				
    		}
    	);
    	
    	return $arr;
    }
    
    $arr= [
        [
          "header"=>'',
          "title"=>'', 
          "data"=>'12 июнь 2021', 
        ],
        [
          "header"=>'',
          "title"=>'', 
          "data"=>'30 июнь 2021', 
        ],
        [
          "header"=>'',
          "title"=>'', 
          "data"=>'1 июля 2021', 
        ],
        [
          "header"=>'',
          "title"=>'', 
          "data"=>'1 январь 2020', 
        ]
      ];
    
    $sorted = mySort($arr);
    
    print_r($sorted);


    PHP code online
    Ответ написан
    Комментировать
  • Как отсортировать массив по дате?

    Tomio
    @Tomio
    backend developer (python, php)
    Используйте функцию usort. Для нее вам нужно будет написать callback-функци сравнения, в которую будут передаваться элементы из вашего массива.
    В этой callback-функции вам нужно будет сделать перевод даты вида "1 июля 2021" либо в timestamp, либо в объект DateTime, и уже использовать их в сравнении между собой.
    Ответ написан
    Комментировать
  • Какая конъюнктура требований к джуну?

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

    меня в джунах интересуют не столько его знания, сколько наличие живых мозгов, интереса к предмету (а не только зп) и способнось это продемонстрировать.
    отдельным (и важным) пунктом - адекватность в восприятии критики и последующие выводы.
    Ответ написан
    1 комментарий
  • Почему не запускается windows на материнской плате ASRock G41M-VS3?

    profesor08
    @profesor08
    Поздравляю, вы выиграли спер приз!

    1. Убедись что приоритет загрузки установлен как USB
    2. Убедись что винда, которая записана на флешку, нормальная, скаченная с офф сайта майкрософт и записана на флешку через их же утилиту.
    3. Последнее это прошивать биос, но раз линукс встал, то дело не в материнке.
    Ответ написан
    2 комментария
  • Зачем при чистке ПК вычищать пыль НАЧИСТО?

    hint000
    @hint000
    у админа три руки
    Я видел в некоторых видео на ютубе
    Ответ здесь.
    Ролик на ютубе должен произвести впечатление.
    Если всё не будет сверкать, то впечатление так себе.
    Если впечатление так себе, то мало лайков. :)
    В реальной жизни не так, как в ютубе.

    Хотя бывает мне приносят системник переустановить винду. Если вижу, что его лет десять не чистили от пыли, то могу и вскрыть БП для чистки, т.к. пыль, слежавшаяся большими комками, через вентиляционные решетки не всасывается. Но настолько запущенные экспонаты попадаются редко.
    Ответ написан
    5 комментариев
  • Зачем при чистке ПК вычищать пыль НАЧИСТО?

    profesor08
    @profesor08
    Зачем при чистке ПК вычищать пыль НАЧИСТО?

    Ради эстетического удовольствия.

    Мне вообще кажется, что достаточно пыль сдуть чем-то вроде компрессора / баллона с воздухом / фена с режимом холодного воздуха или хотя бы резиновой груши (клизмы)

    баллончика с сжатым воздухом вполне хватает чтоб температуры нормализовались
    Ответ написан
    Комментировать
  • Какой лучше использовать тип архива gz или bz2?

    @rPman
    В linux исторически сложилось для архивации использовать tar, это наверное самый многофункциональный инструмент, позволит сохранить все плюс даже то что не нужно.

    * для сохранения прав нужен ключ -p
    * для сохранения extended attributes нужен ключ --xattrs
    * для обнаружения и сохранения информации о дырявых файлах sparse ключ -S
    * символические ссылки будут сохранены как ссылки по умолчанию, поведение можно по разному менять опциями (например хранить как файл или к примеру при распаковке пробовать создать hardlink вместо symlink и т.п.)

    Упаковывать можно потом полученный tar архив или лучше в процессе, ключ -a автоматически определит архиватор по расширению, чем угодно. Никто не мешает тебе создать архив без его сохранения просто отправляя его в момент создания в никуда:
    tar -cjf /dev/stdout . | wc -c
    будет сжимать bzip2 (ключ j) текущий каталог с подкаталогами и отправлять его в команду wc, которая просто посчитает его размер в байтах и выведет на экран. Повтори команду поменяв ключ j на J (это xz), z (это gzip) и т.п. и сравнивай полученные размеры (советую попробовать zstd)

    p.s. как альтернатива, можно архивировать не файлы а весь раздел, с помощью набора утилит partclone (поддерживает все даже что то типа ntfs) можно создать копию раздела, в котором не будут сохранены сектора, помеченные как свободные, при этом скорость работы утилиты сравнима с dd (а это вообще просто посекторное копирование) и в большинстве случаев позволяет менять размер раздела, на который будет все это восстанавливаться (с ntfs редко но могут возникнуть проблемы при уменьшении)

    p.p.s. еще есть фичи-инструменты файловых систем, например у btrfs есть возможность получить в качестве файла разницу между указанными снапшотами, созданными в разное время, и применить его позже, хоть на другой машине... тоже можно считать инструментом для бакапа
    Ответ написан
    4 комментария
  • Как правильно писать catch в php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для того чтобы правильно писать catch, надо писать осмысленный код.

    А здесь мы наблюдаем очаровательный пример карго-культа.
    Узнав, что "толстый контроллер - это плохо, а сервисы - это хорошо", автор небрежным движением руки замел весь мусор под ковёр перенёс весь код из контроллера в "сервис". Ну а что? Контроллер худой, весь код в сервисе!
    Тот факт, что сама кривая структура проекта осталась, по сути, той же самой, нас не смущает.
    Как и то, что сервис вдруг начал выполнять функции НТТР контроллера и кидать почему-то НТТР исключения. Что с этими исключениями делать в случае, если тот же сервис будет вызван из консольной команды - загадка.

    Но самое забавное, что при всём при этом контроллер всё равно пытается выполнять работу модели. Казалось бы, какое отношение интерфейс для обслуживания НТТР запросов имеет к транзакциям в базе данных? А вот поди ж ты!

    Чтобы сделать этот код осмысленным, контроллеру всё-таки придется потрудиться, и выполнить какую-то работу самому, а не перекладывать на "сервис". А так же отдать модели то что ей принадлежит.

    В общем транзакцию перекинуть в createDefault. причём не напрямую, а ещё ниже - в слой для работы с БД. Стартовать транзакцию до валидации данных - это как бы *не совсем логично*, мягко говоря. И в итоге, как по волшебству, весь этот говнокод исчезнет как страшный сон.
    При этом в параметрах передавать не НТТР реквест чохом, а осмысленный набор параметров, вынутый предварительно из реквеста!
    В частности, если модель сама проверяет права доступа, то и передавать ид пользователя из авторизации.

    При этом модель не должна кидать НТТР исключения. Она должна кидать исключения бизнес-логики. Которые контроллер уже может ловить и транслировать в хттп. Но тут видимо уже сложнее, поскольку это ж ларавель судя по всему.

    В любом случае, уж catch (Exception $e)-у тут точно не место

    Но это если рассматривать твой конкретный случай.
    В общем же случае правильный код написал Илья.

    То есть внутри трая операции с БД и коммит.
    в кетче роллбэк и перевыброс исключения. Только ловить надо Throwable

    try {
      DB::beginTransaction();
      // запись в БД
      // запись в БД
      // запись в БД
      DB::commit();
    } catch (\Throwable $e) {
      DB::rollBack();
      throw $e;
    }
    Ответ написан
    2 комментария
  • Автоматическое переименование, на имена, которые написаны внутри формы, загруженных файлов в сами формы?

    @ukoHka
    Всего понемногу
    При загрузке файла через формы он автоматически сохраняется на сервере под сгенерированным именем, которое можно получить из $_FILES['file']['tmp_name']. После завершения обработки запроса этот файл удалится автоматически, поэтому его необходимо сохранить в отдельном месте, а для этого нужно указать имя. И тут можно указать любое имя, включая значения полей из массива $_POST.
    В частности, можно продублировать надпись в скрытое поле filename и на стороне сервера заменить $_FILES['file']['name'] на $_POST['filename'].
    Ответ написан
    1 комментарий
  • Автоматическое переименование, на имена, которые написаны внутри формы, загруженных файлов в сами формы?

    @IS-Builder
    ~ PHP-8 & REGEXP - This is a really powerful kit ~
    Чтобы сделать такое на PHP (в отличии от JS или JQuery), понадобится задавать название формы динамически в переменной, и подставлять эту переменную вместо имени файла. Если форм и их названий несколько, то вместо переменной нужно использовать массив с названиями, и циклы. Например:
    Code
    <?php
    
    $formNames = [
        'Заявление и согласие на обработку персональных данных',
        'Что-то ещё'
    ];
    
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        foreach ($_FILES['userFile']['name'] as $k => $name) {
            $filename = $formNames[$k] . '.' . pathinfo($name, PATHINFO_EXTENSION);
            $uploadFile = __DIR__ . DIRECTORY_SEPARATOR . $filename;
            move_uploaded_file($_FILES['userFile']['tmp_name'][$k], $uploadFile);
        }
    }
    
    ?>
    
    <form enctype="multipart/form-data" method="post">
        <?php foreach ($formNames as $formName) { ?>
            <p><?=$formName?><br><input type="file" name="userFile[]"></p>
        <?php } ?>
        <input type="submit" value="Отправить">
    </form>
    Ответ написан
    1 комментарий
  • Как можно ускорить код php?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Для начала данный код нужно отрефакторить и сделать его хотя бы читабельным. Почитайте про рефакторинг, про ООП...

    Так как по коду нечего сказать скажу методы для ускорения работы уже написанного кода.

    1. Первый вариант это перейти на более последнюю версию php. Например, 7.х, 8.х. Особенно почувствуете разницу при переходе с версии 5.6 на 7.х. Однако какой-то код может сломать. Подходите этому внимательнее.

    2. Использовать кэширование. Кэшировать можно как внедрением в вашем коде кэширования, так и расширениями php вроде opcache.
    Ответ написан
    4 комментария