• Вышли из строя 2 HDD Seagate. Кто может помочь советом?

    В ремонте жёстких дисков есть несколько фундаментальных правил.
    1. Жёсткие диски не ремонтируют (исключение - пробой защиты по питанию, и прочие "внешние причины").
    2. Если нужна информация, считывайте её, и избавляйтесь от самих дисков (п. 1).
    Ответ написан
    2 комментария
  • Как правильно настроить индексы?

    romy4
    @romy4
    Exception handler
    Используйте не user_id=0 а user_id=null. так правильнее со всех точек зрения и не рубит индексацию
    Ответ написан
    6 комментариев
  • Можно ли именовать php-скрипты и папки с использованием кириллицы?

    sim3x
    @sim3x
    1z2Hs.jpg

    Трудноуловимые ошибки
    Принципиально, допустимо, но побьют потом точно
    Ответ написан
    1 комментарий
  • MySQL. Как правильно сделать выборку/сортировку?

    SagePtr
    @SagePtr
    Еда - это святое
    SELECT * FROM table ORDER BY upc = 'old' DESC;
    Ответ написан
    Комментировать
  • Как манипулировать датой на php?

    PavelK
    @PavelK
    У Вас изначально строка в не нормальном формате, поэтому её нужно сначала привести к формату DateTime,
    а потом уже преобразовывать дальше:
    $date = DateTime::createFromFormat('Y-m-d\TG:i:s', '2016-02-29T21:53:00');
    echo $date->format('Y,m,d,G,i,s');

    Хотя, может это и оверкилл и можно тупо заменой "-" ":" "T" на запятушки (костылём попахивает)
    всё зависит от задачи и потребностей.
    Ответ написан
    1 комментарий
  • Как остановить php цикл по времени?

    @sunrails
    Разделите задачу на простые шаги. Так, чтобы на каждом шаге можно было ловить ошибки и обработать их:
    1. Загрузка файла php.net/manual/ru/book.curl.php
    2. Разбор XML php.net/manual/ru/book.simplexml.php
    Ответ написан
    Комментировать
  • Что почитать, что бы систематизировать и дополнить знания про MySQL?

    s0ci0pat
    @s0ci0pat
    I'm Awesome
    Шварц Б., Зайцев П., Ткаченко В. и др. - MySQL. Оптимизация производительности
    Ответ написан
    3 комментария
  • Как сделать очередь задача на MySQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если по одной задаче, то
    UPDATE `tasks` 
        SET @id := `id`, `state` = 'in_work', 
            `work_start_time` = NOW(), `worker` = :pid
        WHERE `state` = 'wait'
        ORDER BY `create_time`
        LIMIT 1;
    SELECT * FROM `tasks` WHERE `id` = @id;


    По окончании обработки
    UPDATE `tasks` SET `state` = 'done' WHERE `id` = @id;

    Периодически проверять на наличие слишком долго обрабатываемых задач, прибивать процесс по pid и сбрасывать `state` задачи.

    P.S. Конечно же, @id := `id`
    Ответ написан
    Комментировать
  • Функция json_decode переформатирует числа?

    Stalker_RED
    @Stalker_RED
    Вероятно локаль учитывается.
    Можете использовать флаг JSON_BIGINT_AS_STRING и потом floatval(), при необходимости.
    Ответ написан
    2 комментария
  • PDO как сделать простейшую транзакцию?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Можно ли как-то достоверно узнать id именно этой вставленной записи
    Можно, он хранится в LAST_INSERT_ID()

    The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions.
    Гласит документация.

    Есть только несколько особенность, на которые стоит обратить внимание:
    ... LAST_INSERT_ID() returns a ... value representing the first automatically generated value successfully inserted for an AUTO_INCREMENT column as a result of the most recently executed INSERT statement. The value of LAST_INSERT_ID() remains unchanged if no rows are successfully inserted.
    Ответ написан
    7 комментариев
  • Почему нечётное количество лопастей в куллере?

    Ocelot
    @Ocelot
    Это заговор производителей. Если бы лопастей было четное число, то сломав одну, достаточно было бы отломать противоположную, и кулер снова работает. А так только выбрасывать и новый покупать.

    На самом деле нет. Это сделано для снижения шума. На вентиляторах обычно делают не просто нечетное, а простое число лопастей: 3, 5, 7, 11... На пальцах эту аэродинамику просто так не объяснить, но чем меньше возможных резонансов у системы, тем тише.
    Ответ написан
    Комментировать
  • E-mail вместо id плюсы и минусы?

    1) Так и не понял, вы хотите email вместо логина или вместо id. Начинаете вопрос одним, заканчиваете другим.
    2) Если вместо логина - то что вообще значит "вместо"? Не использовать логин вообще или использовать email для авторизации?
    3) Если вместо id - оно как бы в теории можно, но как бы не стоит. Вы же помните, что вам потом внешние ключи ставить в виде email-ов? И обновлять их при смене адреса пользоватаелем. Правильно, это жесть, поэтому не надо.
    4) А чего вы вообще переживаете про WHERE `email`='почта@домен' - ну авторизовали аутентифицировали человека один раз, в сессию положили его id, дальше выборки по id, в чем задача-то?
    Ответ написан
    1 комментарий
  • Чей код чище и удобнее расширятся битрикс или модх?

    MetaDone
    @MetaDone
    Хорошо сформулированный вопрос - 50% решения
    что угодно лучше битрикса. И да простят меня бывалые битриксойды, но лично я с таким месивом работать не намерен.
    Просто кусок кода, который битрикс малый бизнес генерирует после установки в index.php
    spoiler
    <?
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    $APPLICATION->SetTitle("Интернет-магазин \"Одежда\"");
    ?>
    <h2>Лучшие коллекции</h2>
    <?$APPLICATION->IncludeComponent("bitrix:catalog.top", "", array(
    		"IBLOCK_TYPE_ID" => "catalog",
    		"IBLOCK_ID" => "2",
    		"ELEMENT_SORT_FIELD" => "name",
    		"ELEMENT_SORT_ORDER" => "asc",
    		"ELEMENT_SORT_FIELD2" => "name",
    		"ELEMENT_SORT_ORDER2" => "asc",
    		"HIDE_NOT_AVAILABLE" => "N",
    		"ELEMENT_COUNT" => "8",
    		"LINE_ELEMENT_COUNT" => "4",
    		"PROPERTY_CODE" => array(0=>"MINIMUM_PRICE",1=>"MAXIMUM_PRICE",2=>"",),
    		"OFFERS_FIELD_CODE" => array(0=>"NAME",1=>"",),
    		"OFFERS_PROPERTY_CODE" => array(0=>"ARTNUMBER",1=>"COLOR_REF",2=>"SIZES_SHOES",3=>"SIZES_CLOTHES",4=>"MORE_PHOTO",5=>"",),
    		"OFFERS_SORT_FIELD" => "sort",
    		"OFFERS_SORT_ORDER" => "asc",
    		"OFFERS_SORT_FIELD2" => "id",
    		"OFFERS_SORT_ORDER2" => "desc",
    		"OFFERS_LIMIT" => "0",
    		"VIEW_MODE" => "SLIDER",
    		"TEMPLATE_THEME" => "site",
    		"PRODUCT_DISPLAY_MODE" => "Y",
    		"ADD_PICT_PROP" => "MORE_PHOTO",
    		"LABEL_PROP" => "NEWPRODUCT",
    		"OFFER_ADD_PICT_PROP" => "MORE_PHOTO",
    		"OFFER_TREE_PROPS" => array(0=>"COLOR_REF",1=>"SIZES_SHOES",2=>"SIZES_CLOTHES",),
    		"SHOW_DISCOUNT_PERCENT" => "Y",
    		"SHOW_OLD_PRICE" => "Y",
    		"ROTATE_TIMER" => "30",
    		"MESS_BTN_BUY" => "Купить",
    		"MESS_BTN_ADD_TO_BASKET" => "В корзину",
    		"MESS_BTN_DETAIL" => "Подробнее",
    		"MESS_NOT_AVAILABLE" => "Нет в наличии",
    		"SECTION_URL" => "",
    		"DETAIL_URL" => "",
    		"BASKET_URL" => "/personal/cart/",
    		"ACTION_VARIABLE" => "action",
    		"PRODUCT_ID_VARIABLE" => "id_slider",
    		"PRODUCT_QUANTITY_VARIABLE" => "quantity",
    		"PRODUCT_PROPS_VARIABLE" => "prop",
    		"SECTION_ID_VARIABLE" => "SECTION_ID",
    		"CACHE_TYPE" => "A",
    		"CACHE_TIME" => "180",
    		"CACHE_GROUPS" => "Y",
    		"DISPLAY_COMPARE" => "N",
    		"PRICE_CODE" => array(0=>"BASE",),
    		"USE_PRICE_COUNT" => "N",
    		"SHOW_PRICE_COUNT" => "1",
    		"PRICE_VAT_INCLUDE" => "Y",
    		"PRODUCT_PROPERTIES" => array(),
    		"USE_PRODUCT_QUANTITY" => "Y",
    		"CONVERT_CURRENCY" => "N",
    		"OFFERS_CART_PROPERTIES" => array(0=>"ARTNUMBER",1=>"COLOR_REF",2=>"SIZES_SHOES",3=>"SIZES_CLOTHES",)
    	),
    	false
    );?>
    <h2>Тренды сезона</h2>
    <?$APPLICATION->IncludeComponent(
    	"bitrix:catalog.top",
    	"",
    	Array(
    		"IBLOCK_TYPE" => "catalog",
    		"IBLOCK_ID" => "2",
    		"VIEW_MODE" => "SECTION",
    		"TEMPLATE_THEME" => "site",
    		"PRODUCT_DISPLAY_MODE" => "Y",
    		"ADD_PICT_PROP" => "MORE_PHOTO",
    		"LABEL_PROP" => "NEWPRODUCT",
    		"OFFER_ADD_PICT_PROP" => "MORE_PHOTO",
    		"OFFER_TREE_PROPS" => array("COLOR_REF", "SIZES_SHOES", "SIZES_CLOTHES"),
    		"SHOW_DISCOUNT_PERCENT" => "Y",
    		"SHOW_OLD_PRICE" => "Y",
    		"MESS_BTN_BUY" => "Купить",
    		"MESS_BTN_ADD_TO_BASKET" => "В корзину",
    		"MESS_BTN_DETAIL" => "Подробнее",
    		"MESS_NOT_AVAILABLE" => "Нет в наличии",
    		"ELEMENT_SORT_FIELD" => "sort",
    		"ELEMENT_SORT_ORDER" => "asc",
    		"ELEMENT_SORT_FIELD2" => "name",
    		"ELEMENT_SORT_ORDER2" => "asc",
    		"SECTION_URL" => "",
    		"DETAIL_URL" => "",
    		"BASKET_URL" => "/personal/cart/",
    		"ACTION_VARIABLE" => "action",
    		"PRODUCT_ID_VARIABLE" => "id_section",
    		"PRODUCT_QUANTITY_VARIABLE" => "quantity",
    		"PRODUCT_PROPS_VARIABLE" => "prop",
    		"SECTION_ID_VARIABLE" => "SECTION_ID",
    		"DISPLAY_COMPARE" => "N",
    		"ELEMENT_COUNT" => "12",
    		"LINE_ELEMENT_COUNT" => "4",
    		"PROPERTY_CODE" => array("MINIMUM_PRICE", "MAXIMUM_PRICE"),
    		"OFFERS_FIELD_CODE" => array("NAME"),
    		"OFFERS_PROPERTY_CODE" => array("ARTNUMBER", "COLOR_REF", "SIZES_SHOES", "SIZES_CLOTHES", "MORE_PHOTO"),
    		"OFFERS_SORT_FIELD" => "sort",
    		"OFFERS_SORT_ORDER" => "asc",
    		"OFFERS_SORT_FIELD2" => "id",
    		"OFFERS_SORT_ORDER2" => "desc",
    		"OFFERS_LIMIT" => "0",
    		"PRICE_CODE" => array("BASE"),
    		"USE_PRICE_COUNT" => "N",
    		"SHOW_PRICE_COUNT" => "1",
    		"PRICE_VAT_INCLUDE" => "Y",
    		"PRODUCT_PROPERTIES" => array(),
    		"USE_PRODUCT_QUANTITY" => "Y",
    		"CACHE_TYPE" => "A",
    		"CACHE_TIME" => "180",
    		"CACHE_GROUPS" => "Y",
    		"HIDE_NOT_AVAILABLE" => "N",
    		"CONVERT_CURRENCY" => "N",
    		"OFFERS_CART_PROPERTIES" => array("ARTNUMBER", "COLOR_REF", "SIZES_SHOES", "SIZES_CLOTHES")
    	)
    );?>
    <?$APPLICATION->IncludeComponent("bitrix:sale.bestsellers", ".default", array(
    		"HIDE_NOT_AVAILABLE" => "N",
    		"SHOW_DISCOUNT_PERCENT" => "Y",
    		"PRODUCT_SUBSCRIPTION" => "Y",
    		"SHOW_NAME" => "Y",
    		"SHOW_IMAGE" => "Y",
    		"MESS_BTN_BUY" => "Купить",
    		"MESS_BTN_DETAIL" => "Подробнее",
    		"MESS_NOT_AVAILABLE" => "Нет в наличии",
    		"MESS_BTN_SUBSCRIBE" => "Подписаться",
    		"PAGE_ELEMENT_COUNT" => "4",
    		"LINE_ELEMENT_COUNT" => "4",
    		"TEMPLATE_THEME" => "site",
    		"DETAIL_URL" => "",
    		"AJAX_MODE" => "N",
    		"AJAX_OPTION_JUMP" => "N",
    		"AJAX_OPTION_STYLE" => "Y",
    		"AJAX_OPTION_HISTORY" => "N",
    		"CACHE_TYPE" => "A",
    		"CACHE_TIME" => "86400",
    		"BY" => "AMOUNT",
    		"PERIOD" => "30",
    		"FILTER" => array(
    			0 => "CANCELED",
    			1 => "ALLOW_DELIVERY",
    			2 => "PAYED",
    			3 => "DEDUCTED",
    			4 => "N",
    			5 => "P",
    			6 => "F",
    		),
    		"DISPLAY_COMPARE" => "N",
    		"SHOW_OLD_PRICE" => "N",
    		"PRICE_CODE" => array(
    			0 => "BASE",
    		),
    		"SHOW_PRICE_COUNT" => "1",
    		"PRICE_VAT_INCLUDE" => "Y",
    		"CONVERT_CURRENCY" => "N",
    		"BASKET_URL" => "/personal/cart/",
    		"ACTION_VARIABLE" => "action",
    		"PRODUCT_ID_VARIABLE" => "id",
    		"PRODUCT_QUANTITY_VARIABLE" => "quantity",
    		"ADD_PROPERTIES_TO_BASKET" => "Y",
    		"PRODUCT_PROPS_VARIABLE" => "prop",
    		"PARTIAL_PRODUCT_PROPERTIES" => "N",
    		"USE_PRODUCT_QUANTITY" => "N",
    		"SHOW_PRODUCTS_2" => "Y",
    		"CART_PROPERTIES_2" => array(
    			0 => "BRAND_REF",
    			1 => "NEWPRODUCT",
    			2 => "SALELEADER",
    			3 => "",
    		),
    		"ADDITIONAL_PICT_PROP_2" => "MORE_PHOTO",
    		"LABEL_PROP_2" => "SALELEADER",
    		"CART_PROPERTIES_3" => array(
    			0 => "COLOR_REF",
    			1 => "SIZES_SHOES",
    			2 => "SIZES_CLOTHES",
    			3 => "",
    		),
    		"ADDITIONAL_PICT_PROP_3" => "MORE_PHOTO",
    		"OFFER_TREE_PROPS_3" => array(
    			0 => "COLOR_REF",
    			1 => "SIZES_SHOES",
    			2 => "SIZES_CLOTHES",
    		),
    		"AJAX_OPTION_ADDITIONAL" => ""
    	)
    );?>
    <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>


    Еще вся эта ересь безбожно терзает БД.
    А если глянуть ядро - то там несмотря на всякие придуманные штуки типа пространств имен, трейтов и т.п. до сих пор глобальные переменные и куча констант. Есть классы, методы в которых непонятно зачем оборачивают суперглобальные массивы. В общем смотрите сами, это чисто мое мнение и я не собираюсь работать с битриксом, чего и вам желаю
    Ответ написан
    4 комментария
  • Как составить таблицы БД для многоуровневой реферальной системы?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Если хотите одним простым запросом выбирать из дерева - вам нужно смотреть в сторону хранения древовидных структур: Nested Set, Materialized Path, Adjacency List, Closure Table, etc.
    У них есть свои плюсы и минусы - вам нужно подобрать под вашу задачу в зависимости от того, какие операции с деревом вы будете производить.
    Вот здесь про них уже есть ответ. А вот здесь - статья.
    Ответ написан
    Комментировать
  • Как копировать файл с диска с бэд блоками?

    Jump
    @Jump
    Системный администратор со стажем.
    Прекратите эксперименты и отнесите профессионалам.
    Читать надо посекторно на исправный диск, а уж там восстанавливать.
    Ответ написан
    Комментировать
  • Как синхронизироваться с git на на новом компьютере?

    Про выбирает тот вариант, который удобен ему и не имеет мозг окружающим.
    Ответ написан
    Комментировать
  • Сколько слотов RUST можно разместить на 4GB ОЗУ?

    DrunkMaster
    @DrunkMaster
    Тут такая аудитория которая долго будет думать над вашим вопросом:
    "А при чём тут Rust???"
    Ну я по крайней мере долго втыкал )))
    Ответ написан
    4 комментария
  • Как забэкапить линуксовый сервер?

    valerium
    @valerium
    Изобретая велосипед
    «Взрослое» решение — это система управления конфигурациями, вроде Chef, Puppet, Ansible и др. Учитывая, что кроме собственно конфигурации Вам ничего бэкапить не надо (машина не хранит данных), то это почти идеальное решение.

    Почти, потому что в некоторых случаях перекачать и записать на диск байт в байт сотню гигов может быть быстрее, чем скачать и установить сотню пакетов. Не говоря уже о нестандартном софте, который не пакетирован.
    Ответ написан
    Комментировать
  • Как передать значения поля inpute в массив?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    <input type="text" name="field[]">
    В $_POST['field'] будет уже массив заполненных значений.
    Ответ написан
    Комментировать