• Как разрешить ошибку mail(): Multiple or malformed newlines found in additional_header?

    Jakim
    @Jakim
    Laravel - developer
    <?php
    /**
     * Created by PhpStorm.
     * User: Jakim
     * Date: 08.11.2017
     * Time: 3:37
     */
    $EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём
    $boundary     = "--".md5(uniqid(time()));  // любая строка, которой не будет ниже в потоке данных.
    $subject_text = 'Тест от меня';
    $subject= '=?utf-8?B?' . base64_encode($subject_text) . '?=';
    $message = 'текст сообщения';
    $headers    = "MIME-Version: 1.0;" . $EOL . "";
    $headers   .= "Content-Type: multipart/mixed; boundary=\"" . $boundary . "\"" . $EOL . "";
    $headers   .= "From: jakimoff1990@gmail.com\nReply-To: jakimoff1990@gmail.com\n";
    
    $multipart  = "--" . $boundary . $EOL;
    $multipart .= "Content-Type: text/html; charset=utf-8" . $EOL . "";
    $multipart .= "Content-Transfer-Encoding: base64" . $EOL . "";
    $multipart .= $EOL; // раздел между заголовками и телом html-части
    $multipart .= chunk_split(base64_encode($message));
    
    #начало вставки файлов
    
    foreach($_FILES["file"]["name"] as $key => $value){
        $filename = $_FILES["file"]["tmp_name"][$key];
        $file = fopen($filename, "rb");
        $data = fread($file,  filesize( $filename ) );
        fclose($file);
        $NameFile = $_FILES["file"]["name"][$key]; // в этой переменной надо сформировать имя файла (без всякого пути);
        $File = $data;
        $multipart .=  "" . $EOL . "--" . $boundary . $EOL . "";
        $multipart .= "Content-Type: application/octet-stream; name=\"" . $NameFile . "\"" . $EOL . "";
        $multipart .= "Content-Transfer-Encoding: base64" . $EOL . "";
        $multipart .= "Content-Disposition: attachment; filename=\"" . $NameFile . "\"" . $EOL . "";
        $multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла
        $multipart .= chunk_split(base64_encode($File));
    
    }
    
    #>>конец вставки файлов
    
    $multipart .= "" . $EOL . "--" . $boundary . "--" . $EOL . "";
    
    if(!mail('jakimoff1990@gmail.com', $subject, $multipart, $headers)){
        echo 'Письмо не отправлено';
    } //Отправляем письмо
    else{
        echo 'Письмо отправлено';
    }

    Там немного поменялись у людей заголовки, сам заморочился пока собрал все в кучу.
    Ответ написан
    1 комментарий
  • Каков план личностного развития PHP программиста с нуля?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Буду исходить из "дано" задачи "PHP программист" и из того что автор вопроса стремится заниматься сугубо back-end программированием. Заранее прошу прощения, я несколько увлекся
    Итак:
    1. Установка сервера (Open Server, Xampp, Denver), на начальном уровне. (просто из exe)
    2. Общие принципы.
    2.1. Типы данных.
    2.2. Переменные.
    2.2.1. Работа с переменными по ссылке.
    2.2.2. Методы объявления и уничтожения переменных.
    2.3. Управляющие конструкции (если знаком, то особенности синтаксиса в рамках языка).
    2.3.1. Условия.
    2.3.2. Циклы.
    2.4. Конструкции вывода(print, print_r, echo).
    2.5. Конструкции отладки и управления выполнением(var_dump,die,exit,break в циклах, пустой return;).
    2.6. Пред определенные глобальные переменные($_GET,$_POST,$_REQUEST,$_SERVER), константы зарезервированные под модификаторы (static, function, const, $this)
    2.7. Особенности версий 5.3, 5.4.
    2.7.1. Анонимные функции.
    2.7.2. Замыкания.
    2.7.3. Особенности объявления массивов.
    2.7.4. Пространства имен.
    3. HTTP протокол.
    3.1. Заголовки входящие.
    3.2. Заголовки исходящие.
    3.3. Процесс общения.
    3.4. Метод php “header(…)” в контексте темы.
    3.5. Глобальная переменная $_SERVER[] в контексте темы.
    4. Установка сервера на среднем уровне (основы файла .htaccess и RewriteRule)
    5. Процедурное программирование.
    5.1. Математические методы.
    5.2. Оперирование типами.
    5.2.1. Методы оперирования массивами (array_values,array_keys,array_map и т.д.)
    5.2.2. Методы оперирования строками (strlen,substr и т.д.).
    6. ООП.
    6.1. Классы.
    6.1.1. Инкапсуляция(public,protected,private). Понимать разницу.
    6.1.2. Наследование.
    6.2. Интерфейсы.
    6.2.1. Имплементация интерфейсов.
    6.3. Абстрактные классы.
    6.4. Полиморфизм.
    6.5. Магические методы.
    6.5.1. Базовые (__construct,__get,__set,__destruct)
    6.5.2. Расширенные (__invoke,__serialize,__isset)
    6.5.3. Разобраться когда стоит применять магические методы а когда это плохая практика.
    7. Библиотека SPL, и расширение поведенческих возможностей классов за ее счет.
    8. Базы данных.
    8.1. SQL
    8.2. Примитивный уровень общения с БД. (mysql_connect,mysql_close,mysql_query).
    8.3. Средний уровень общения с БД(PDO и другие кастомные библиотеки).
    8.4. Высокий уровень (ActiveRecord,DataAccessObject,ObjectRelationMapping).
    8.5. NoSql БД на примере MongoBD (настоятельно рекомендуется, но не обязательно).
    9. Фреймворки. На мой вигляд можно начать с Kohana. Сужу по уровню вхождения стажеров которых видел и отсутствию пространств имен с которыми по первах могут возникать проблемы.

    И главное, Внимание! Личностные качества.
    - Усидчивость.
    - Владение Google при оттачивании темы или сложной задаче на уровне, когда поисковик видит в пользователе не то что DDOS а полноценный физический краш. тест.
    - Не брезгливость. Умение заставить себя разбираться в гов… хм. Нелицеприятных дебрях.
    - Збагойствие. Отсутствие паники при различных ошибках и не состыковках. Всегда остыть и попробовать снова, но по другому.
    Ответ написан
    5 комментариев
  • Uncaught SyntaxError: Unexpected end of JSON input?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Согласно коду, если пользователь существует - будет ошибка, и будет JSON с этой ошибкой.
    А если такой пользователь НЕ существует - будет пустой вывод, вообще без какого-либо JSON, как у вас на втором скриншоте, так? Ну так сделайте какой-нибудь
    else:
    $errors['success']="Пользователь радостно создан. Аллилуя!";
    Ответ написан
    1 комментарий
  • Как организовать проект для сборки?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    b7559f6e7d784cdf82263cde495dbfe3.png"button__primary--hover.html" лол, мэн, никто так файлы не называет. Это БЭМ-классификация разметки, во-первых.
    Во-вторых, на html уже никто нормальные проекты не пишет.
    Вот тебе хорошие ссылки.
    бац https://habrahabr.ru/post/246349/
    бац yeoman.io
    бац https://github.com/larsonjj/generator-yeogurt (ну или просто npm i generator-yeogurt -g)
    Ответ написан
  • Как организовать свой проект для фронтенд?

    ShadowOfCasper
    @ShadowOfCasper
    Middle User Interface Web Developer
    всё очень просто. Есть такая фишка - называется ксаффолдер. Я пользуюсь yeoman.io
    В нём есть официальный генератор веб-приложения webapp . В пакете генератора gulp в который завёрнуто sass + bootstrap sass + bower в котором ещё куча всего завёрнуто + chai и mocha (тестировщики кода) + browsersync который заводится на 3001 порту. прочитай на сайте что я скинул. Способ для самых ленивых лентяев. Как с нуля:
    Ставишь nodeJS, gulp bower глобально.
    Ставишь yo глобально (npm i yo -g)
    Ставишь генератор глобально (npm i generator-webapp -g)
    Создаёшь ручками папку проекта и пишешь одну команду (yo webapp)
    Тебе инициализируется проект с полной архитектурой. Я ещё её по смакссу докручиваю допиливаю.
    Заводишь сервак (команда gulp serve) и начинаешь неистово кодить
    Ответ написан
  • Если у html шрифт задан в процентах, процент от чего он высчитывает?

    sevirinov
    @sevirinov
    Web Developer
    По умолчанию в браузере следующие размеры:
    100% = 1em = 1rem = 16px = 12pt
    Следовательно если Вы задаете размер в css элементу html равным 200%, то общий размер шрифта на всей странице будет 32px

    Не рекомендую пользоваться процентами. Для относительных размеров лучше использовать rem и em
    rem задает размер шрифта элементу независимо от размера шрифта родительского элемента
    em задает размер шрифта элементу относительно размеру шрифта родительского элемента
    Ответ написан
    1 комментарий
  • Как убрать вендорные префиксы Emmet (ST3)?

    qork
    @qork
    { background: #F00B42 }
    В настройках emmet
    {
        "preferences": {
            "css.autoInsertVendorPrefixes": false
        }
    }
    Ответ написан
    2 комментария
  • Как научиться учить программирование?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    А просто со временем, до всех доходит, что программирование это не интересные исследования, познания неведомого как в фантастике, прикручивание двумя кликами новых движков.
    А на деле - это еще и множество рутинной и кропотливой работы, которая по сути - скучная, однообразная, И ее процентов 80.

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