Ответы пользователя по тегу PHP
  • Что можно учить дополнительно к PHP из бека?

    @newpy
    web-dev
    1. Во-первых бросьте фреймворк. Это болезнь всех начинающих. Толком ООП и MVC не понимать, зато уже во фреймворки залезть или "учить на основе фреймворков". Как итог: нет понимания ни как работает, ни зачем это надо, ООП и MVC.
    Попробуйте написать примитивный свой. Вот прям чтоб работала автозагрузка, хотя бы с помощью того же композера, написать свои M, V и С.
    В начале пути это не только не зазорно, но и полезно. К вам раз и навсегда придет понимание как это устроено. Выложите этот код на гитхаб. Потом скидывайте уже ссылку проекта сюда, и просите оценить ваш код. Сделать ревью. И не ждите снисхождения. Зато это будет лучший опыт. И максимально близкий к реальному (как на работе). А потом смело запишите себе это в резюме.
    Во-вторых, бросьте yii2. Вот серьезно. В 2018 году это худший выбор который можно сделать. Ничто вас так не приучит к дисциплине как Symfony и не заставит понять как работают вообще все фреймворки. Но и не ждите легкости.
    2. Не берите вы ничего дополнительно. Это вторая самая распространенная ошибка всех начинающих. Распыляться по сторонам. Браться за все сразу, за фреймворки в том числе.
    Дополнительно - это может быть протокол HTTP и как он работает, MySQL, на уровне простых JOIN запросов. И все. хватит этого.
    3. Не хотите лезть во фронтенд, не лезьте. Там даже фронтендеры опытные сейчас ноги-руки ломают и шишки набивают.
    Ответ написан
  • Извлечение фото из MySQL?

    @newpy
    web-dev
    Не пробовал "кастить" VARBINARY -> CHAR на уровне базы?

    SELECT CAST(binaryColumn as CHAR) from table_name
    Ответ написан
    Комментировать
  • Почему при отправке формы на почту приходят неформатируемые данные?

    @newpy
    web-dev
    Ну так отформатируйте в виде HTML, и еще мой вам совет, отучитесь раз и навсегда в двойных кавычках писать переменные
    "Данные отправителя\r\nИмя: $name \r\n"
    Не ленитесь строки конкатенировать
    "Данные отправителя \r\n Имя: " . $name . "\r\n"

    $email_body = '<h4>Заполнена форма</h4>
    <div>Задать вопрос</div>
    <p>Данные отправителя</p>
    <p>Имя: ' . $name . '</p>
    <p>Email: ' . $email . '</p>
    <p>Вопрос: ' . $message . '</p>';


    Если лень так HTML составлять, воспользуйтесь str_replace например. Получитеся что-то вроде своего шаблонизатора.
    Ответ написан
    Комментировать
  • Почему не подключается класс?

    @newpy
    web-dev
    Сделайте красиво сразу, напишите|познайте автозагрузку нормальную, или сгенерируйте с помощью composer:
    https://habrahabr.ru/post/149678/
    Ответ написан
    Комментировать
  • Как PHP скрипт может расходовать 20Гб памяти?

    @newpy
    web-dev
    Смотря как вы файлы считываете, тем более во вложенном цикле. Построчно ли, целиком, если целиком то с помощью какого метода, посмотрите ob_get_level.
    В зависимости от вашего решения, попробуйте использовать генераторы (yield) если это возможно. На мой взгляд у вас проблема кроется либо в способах чтения файлов.
    Второе узкое место это запись в БД. Операции вставки всегда не дешевые, плюс если их много, попробуйте делать это транзакционно.
    Ответ написан
    Комментировать
  • Можете пояснить принципы ООП?

    @newpy
    web-dev
    Какие то принципы в вашей статье странные, и больше запутывают. Пробуйте проще.

    Фигуры. Эллипс, Круг, Квадрат, Ромб, Треугольник, Прямоугольник. Что их объединяет? Что отличает? У всех есть площадь, но у всех она разная, у Круга нет Сторон, но она есть у остальных. У Треугольника их три, у остальных четыре. У некоторых есть Периметр, у Круга длина окружности. Вычисляются периметры, площади, длина окружности по-разному. При этом все они относятся к фигурам. Какие из них мы можем расширить? Да все практически. Добавить им какие-то методы, например Треугольнику метод для вычисления биссектрисы, или угла. Но мы не можем сделать тоже самое для круга например. Более того мы не можем позволить экземпляру класса Прямоугольник менять или задавать стороны Треугольника. Т.к. у них разное количество сторон, и не можем по формуле вычисления площади ромба, вычислить площадь Круга. Зато мы можем еще расширить немного класс Треугольников. Например создать класс Равнобедренных треугольников и Равносторонних треугольников. И те и другие будут треугольниками, и те и другие еще и Фигурами. Но свойства Равнобедренного и Равностороннего будут несколько отличаться. Например тем, что Стороны равны, а еще Углы могут быть равны. А еще мы можем вообще создать Классы Угол и Сторона, наделить их свойствами, действиями и передавать их в наши Фигуры! Или например из двух Равнобедренных треугольников создать Ромб! Для этого мы можем расширить Ромб методом, который умеет создавать из двух только Равнобедренных треугольников Ромб. Тому же самому мы можем научить Квадрат! Можем создать еще Прямоугольный треугольник, и из двух прямоугольных составлять Прямоугольник! Мы можем "прятать" свойства наших фигур от посторонних глаз, и чтобы никто не смог изнутри взглянуть как вычисляется площадь, зато мы можем предоставить метод, чтобы сразу узнать площадь, мы можем попросить что-то взамен. Например передать нам для вычисления площади стороны, или угол и стороны. Мы можем запретить менять площадь нашей фигуры. Или запретить менять стороны. Чтобы мы всегда знали наши стороны, ведь если каждый будет их менять, то это будет хаос, кто-то неграмотный попадется, и Квадрату сделает разные стороны! Что тогда будет? Площадь и периметр тоже сломаются, сломается сам Квадрат. Вот и попробуйте объяснить себе ответы на ваши вопросы.

    Краткий геометрический экскурс закончил. Пытайтесь представить себе все на примерах из жизни. Вокруг вас столько объектов. Автомобили, Люди, Животные и жЫвотные, сложно себе представить более простое понимание объектов.

    Вы не понимаете, что значит открыты к расширению, но закрыты к изменению? Представьте младенца. Вы не можете изменить ему гены родителей...он их унаследовал. Природный цвет глаз, цвет волос, то что он человек. Зато вы можете его научить говорить, ходить, программировать. А главное думать. На этой позитивной ноте пожалуй закончу.

    (Предполагаю желающих сказать что можно и из человека сделать животное, и изменить цвет глаз и волос, но мы все таки о программировании и условно :) )
    Ответ написан
  • На чем сфокусироваться в изучении WEB?

    @newpy
    web-dev
    Сейчас я хорошо знаю HTML, CSS. Довольно неплохо Bootstrap. Учу JavaScript. Но учить еще PHP, AngularJS и тому подобное - слишком мало времени.

    скажу прямо, рано вам быть web-программистом...В сухом остатке вы знаете только HTML, CSS, Bootstrap.
    JS вы только учите. Когда выучите, сможете претендовать на front-end разработчика.
    "тому-подобное", стоит разделить на PHP как серверный (backend) язык сценариев, и на JS frontend фреймворк Angular. И это очень разные вещи.
    Если вслед за JavaScript выучите Angular, то по прежнему сможете претендовать на frontend разработчика. Поэтому определите свой путь, кем вы хотите быть. Frontend, Backend или full-stack разработчиком, и действуйте и учите исходя из плана. А не кидайтесь на все подряд. Если будете учить все сразу, то вряд ли будете знать что-то из этого хорошо.
    Сфокусируйтесь на полноте знаний одного языка программирования. На данный момент это JavaScript у вас. Когда твердо сможете сказать что знаете язык хорошо, тогда думайте о трудоустройстве и что учить дальше. Отложите мысли о трудоустройстве, они вам мешают. И рано с тем "набором знаний" который вы озвучили. Еще раз простите за прямоту, пока "HTML/CSS/Bootstrap" значит что вы не знаете ничего практически...
    Если хотите форсировать, то не жалуйтесь что мало времени. Учите усерднее, занимайтесь больше.
    Ответ написан
    Комментировать
  • Как вывести элементы массива?

    @newpy
    web-dev
    Python
    arr = list([x for x in range(2,10) if x % 2 != 0] + [1])
    print(arr)
    Ответ написан
    Комментировать
  • Что быстрее операторы или условия?

    @newpy
    web-dev
    Ставьте правильно вопрос, т.к. в вашем примере вопрос скорости не уместен вообще. Вопрос читаемости (читаемость выше с if) и отсутствия понимания того, что происходит. В вашем примере два разных случая. В первом вы проверяете условие, и если оно выполняется, то происходит инкремент. Во втором же, вы проверяете двойное условие, первое - if a < 1, второе - результат выполнения операции инкремента. И если оба они выполнятся, то ничего не произойдет, потому что нет блока, отвечающего за выполнение кода, если двойное условие выполнится.

    А про скорость забудьте, если у вас там не миллионы инкрементов и смотря что происходит с $a (поскольку ваш пример, как вы говорите, упрощен). Тогда вообще лучше использовать генераторы и yield. Вы не там пытаетесь скорость выжать. Узкие места программ это не if и &&. Или приводите полный пример, а не абстрактный, да еще неправильный.
    Ответ написан
    1 комментарий
  • Как сделать автоматический деплой PHP приложения?

    @newpy
    web-dev
    TeamCity от JetBrains
    https://www.jetbrains.com/teamcity/
    Ответ написан
    Комментировать
  • Почему не передаются данные из формы методом POST?

    @newpy
    web-dev
    А вы уверены в том, что первый файл index.php и правильно ли он написан? В form.php вы указываете открывающий тег <?php и закрывающий, а в index.php у вас тегов нет. В таком случае это должен быть файл index.html. Или вы приводите не полный текст первого файла index.php. Или если вы хотите чтобы он был php и правильно интерпретировался, то должен быть
    index.php
    <?php
    echo '<form method="post" action="form.php">
     <input type="text" name="username" />
     <input type="submit" id="send" name="submit" value="Отправить" />
    </form>';

    Или без тегов <?php ?> и переименовывайте в index.html
    И лежат ли у вас файлы index.php и form.php на одном уровне (в одной папке рядом)
    Если и это не помогает, убедитесь что у вас вообще интерпретатор правильно работает.
    Ответ написан
    1 комментарий
  • Как правильно работать с xml?

    @newpy
    web-dev
    Ответ написан
    Комментировать
  • Можно ли послать массив через serialize()?

    @newpy
    web-dev
    Приведу пример, форма отправляется по нажатию на кнопку Submit
    Форма:
    <form id="form">
            <label>Name</label>
            <input type="text" name="name"/>
            <label>Age</label>
            <input type="text" name="age"/>
            <label>City</label>
            <input type="text" name="city"/>
            <button id="submit">Submit</button>
    </form>
    <pre id="debug">
          "This is test content. Learning AJAX."
    </pre>

    JavaScript
    $('#submit').on('click', function(e) {
                    e.preventDefault();
                    $.ajax({
                        url: 'search.php',
                        type: 'POST',
                        dataType: 'json',
                        data: $('#form').serialize(),
                    }).done(function (data) {
                        $('<h1>Ajax loaded</h1><div>' + data + '</div>').appendTo($('#debug'));
                    });
                });


    PHP:
    $name = $_POST['name'];
    $age = $_POST['age'];
    $city = $_POST['city'];
    
    $data = array('name' => $name, 'age' => $age, 'city' => $city);
    echo json_encode($data);
    Ответ написан
    Комментировать
  • Как сделать вывод более правильный на php?

    @newpy
    web-dev
    В том контексте в котором используете в примере вы, т.е. description или "описание", константой задавать может и не совсем уместно.

    Простой пример:
    уместно:
    define ("PI", "3.14");
    тут вы задаете константу числа Пи, например с точностью до нужного вам знака. Это неизменяемые данные. Хороший повод для константы.
    уместно:
    define ("BMW_M52B20_ENGINE", 2.0);  // Двигатель БМВ модификации М52B20 имеет объем 2.0 литра

    в данном случае тоже уместно, т.к. двигатели М52B20 от БМВ, имеют объем 2 литра, они сходили с конвейера именно с таким кодом и таким объемом. И уже ничто это не изменит. Удобно использовать как константу для быстрого доступа.

    Продолжая тему автомобилей теперь пример с массивом:
    $bmwE36 = array (
    'year' => '1996',
    'color' => 'deepblue',
    'engine' => BMW_M52B20_ENGINE,
    'type' => 'sedan',
    );

    В данном случае описываем машину и задаем с помощью массива, машина имеет набор свойств, причем машины выпускались разные, могли иметь разный цвет, год выпуска, тип (универсал, седан, хэтбэк), двигатель.
    В данном случае как раз двигатель я задал константой из примера выше. Логично было бы например типы автомобиля (универсал, седан, хэтчбэк и купе), например тоже задать константами. Т.к. это постоянные данные, и их немного. Предположим я привел три - соответственно, можно было бы задать три константы и и задать им количество дверей. У седана их как правило 4 двери, у купе - 2(или 3), у универсала как правило - 5.
    define ("SEDAN", 4);
    define ("CUPE", 3);
    define ("UNIVERSAL", 5);

    тогда наш массив можем задать еще и так:
    $bmwE36 = array (
    'year' => '1996',
    'color' => 'deepblue',
    'engine' => BMW_M52B20_ENGINE,
    'type' => SEDAN,
    );

    При желании вы можете изменить свойства автомобиля, просто получив доступ к элементам массива. Можете отсортировать свойства, можете выделить только нужные и потом их использовать как-то.
    Ответ написан
  • Sublime text 3 на Windows 10?

    @newpy
    web-dev
    1. Попробуй посмотри в Default settings и в User settings параметр ignored packages.
    2. View > Show Console или Ctrl + ` И попробуй запустить или что-то сделать, в консоли увидишь "лог", и где именно заваливается package или plugin. В общем ошибку.
    3. Посмотри вот здесь: https://packagecontrol.io/docs/troubleshooting#Win...
    если по-русски, то там говорится о том, что ST3 package control использует WinNet C++ API для веб-запросов, и поэтому конфигурация зависит от Internet Explorer которого больше нет, что сделать написано в описании ошибки Errno 12029
    Ответ написан
    Комментировать
  • PHP + MySQL, лучшая книга/лучший ресурс для изучения?

    @newpy
    web-dev
    могу посоветовать еще Люк Веллинг и Лора Томпсон "Разработка веб-приложений с помощью PHP и MySQL". Единственное надо найти последнее издание (скорее всего на текущий момент это 4-е издание). И в книге ввиду года издания 2010, рассматриваются примеры и объясняются на примерах с использованием старых версий PHP и MySQL. Но концептуально это ни на что не влияет. Основополагающие принципы там изложены исключительно понятно, подробно и хорошо. Мне в свое время очень помогла.
    Ответ написан
    Комментировать