Обновление WordPress без данных FTP

👁 17 просмотров

В зависимости от настройки серверов обновление движка/тем/плагинов может требовать от пользователя адрес сервера, логин и пароль для FTP. Обычно это происходит, когда веб-сервер запущен от имени другого пользователя. Попробуйте добавить в wp-config.php строку:

define('FS_METHOD', 'direct');

…и обновление будет происходить напрямую.

Проверка файла на изображение на языке PHP

👁 39 просмотров

Это один из наилучших способов проверить, является ли файл на картинкой на языке PHP.

Функция getimagesize в php предоставляет много информации о файле изображения, включая его тип. Тип может использоваться, чтобы проверить, является ли файл допустимым файлом изображения или нет.

Чтобы проверить, является ли файл изображением или нет, используйте функцию

function is_image($path)
{
    $a = getimagesize($path);
    $image_type = $a[2];
     
    if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP)))
    {
        return true;
    }
    return false;
}

$a[0] и $a[1] — ширина и высота изображения. $a[2] содержит тип изображения. Другие форматы изображений:

[IMAGETYPE_GIF] => 1
[IMAGETYPE_JPEG] => 2
[IMAGETYPE_PNG] => 3
[IMAGETYPE_SWF] => 4
[IMAGETYPE_PSD] => 5
[IMAGETYPE_BMP] => 6
[IMAGETYPE_TIFF_II] => 7
[IMAGETYPE_TIFF_MM] => 8
[IMAGETYPE_JPC] => 9
[IMAGETYPE_JP2] => 10
[IMAGETYPE_JPX] => 11
[IMAGETYPE_JB2] => 12
[IMAGETYPE_SWC] => 13
[IMAGETYPE_IFF] => 14
[IMAGETYPE_WBMP] => 15
[IMAGETYPE_JPEG2000] => 9
[IMAGETYPE_XBM] => 16
[IMAGETYPE_ICO] => 17
[IMAGETYPE_UNKNOWN] => 0
[IMAGETYPE_COUNT] => 18

Замечание. mpeg видео обнаруживается как IMAGETYPE_ICO

Метки:

Создание и заполнение файла Excel с библиотекой ExcelPHP

👁 32 просмотров

Про установку и подключении библиотеки в статье Чтение Excel из PHP.

Простой пример создания и заполнения файла средствами PHP на основе библиотеки ExcelPHP

<?php
//Поключаем основной класс
require_once $_SERVER['DOCUMENT_ROOT'].'/vendor/PHPExcel/Classes/PHPExcel.php';

//Создаем массив и заполняем некоторыми данными
//Некоторый исходный массив с данными
$users = Array(
    Array("login"=>"login1","name"=>"Имя1","surname"=>"Фамилия1","patronymic"=>"Фамилия1"),
    Array("login"=>"login2","name"=>"Имя2","surname"=>"Фамилия2","patronymic"=>"Фамилия2"),
    Array("login"=>"login3","name"=>"Имя3","surname"=>"Фамилия3","patronymic"=>"Фамилия3"),
    Array("login"=>"login4","name"=>"Имя4","surname"=>"Фамилия4","patronymic"=>"Фамилия4")
);
//Название файла
$fileName = "Название теста: ".$quiz->getName()."";
//Массив для заполнения;
$arrResult;
//Массив с индексом 0 для заголовков колонок
$arrResult[] = Array(0=>"Пользователь", 1=>"Имя", 2=>"Фамилия", 3=>"Отчество", 4=>"Правильно ответил",5=>"Из вопросов");

foreach ($users as $user) :
    $arrResult[] = Array(0=>$user["login"], 1=>$user["name"], 2=>$user["surname"], 3=>$user["patronymic"]);
endforeach;

//Заполняем наш файл Excel
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()
->setCreator("Temporaris")
->setLastModifiedBy("Temporaris")
->setTitle("Template Relevé des heures intérimaires")
->setSubject("Template excel")
->setDescription("Template excel permettant la création d'un ou plusieurs relevés d'heures")
->setKeywords("Template excel");
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', $fileName);
for($i=0; $i<=(count($arrResult));$i++)
{
    $uLogin = $arrResult[$i][0];
    $uName = $arrResult[$i][1];
    $uSurname = $arrResult[$i][2];
    $uPatro = $arrResult[$i][3];
    //
    $ind = $i + 2;//нулевой строки в Excel нет, а первая для заголовка добавлен выше
    $objPHPExcel->getActiveSheet()->SetCellValue('A'.$ind, $uLogin);
    $objPHPExcel->getActiveSheet()->SetCellValue('B'.$ind, $uName);
    $objPHPExcel->getActiveSheet()->SetCellValue('C'.$ind, $uSurname);
    $objPHPExcel->getActiveSheet()->SetCellValue('D'.$ind, $uPatro);
}
//Сохраняем файл на сервере
$writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$writer->save($_SERVER['DOCUMENT_ROOT'] . "/files/result.xls");
//Теперь можно загрузить это через браузер
echo "<a class='btn btn-lg btn-success' href='".$_SERVER['DOCUMENT_ROOT']."/files/result.xls' download='Результаты.xls'>Загрузить в формате Excel</a>";
?>

 

Использование Composer с OpenServer на Windows

👁 93 просмотров

Composer — это инструмент управления зависимостями в PHP. Он позволяет вам декларировать библиотеки, от которых зависит ваш проект, и он будет управлять (устанавливать / обновлять) их для вас.

Composer не является менеджером пакетов в том же смысле, что и Yum или Apt. Да, он имеет дело с «пакетами» или библиотеками, но управляет ими на основе каждого проекта, устанавливая их в каталоге (например, vendor) внутри вашего проекта. По умолчанию он не устанавливает ничего глобально. Таким образом, это менеджер зависимостей. Тем не менее, он поддерживает глобальный проект для удобства с помощью глобальной команды. Эта идея не нова, и композитор сильно вдохновлен npm в Node.js и менеджером пакетов в ruby.

Предположим:

  1. У вас есть проект, который зависит от ряда библиотек.
  2. Некоторые из этих библиотек зависят от других библиотек.

Что делает Composer:

  1. Позволяет объявлять библиотеки, на которых вы зависите.
  2. Определяет, какие версии пакетов могут и должны быть установлены, и устанавливает их (что означает, что они загружаются их в ваш проект).

Для запуска Composer требуется PHP 5.3.2+. Также требуются несколько чувствительных настроек php и флагов компиляции, но при использовании установщика вы будете предупреждены о любых несовместимостях.

Для установки пакетов из источников вместо простых zip-архивов вам понадобятся git, svn, fossil или hg в зависимости от того, как пакет управляется версией.

Composer является многоплатформенным, и разработчики стремятся сделать его одинаково хорошо работающим в Windows, Linux и OSX.

Настройка OpeServer

Для начала необходимо выбрать один из версий модулей PHP 5.3.2+, с которым устанвалвиваемый Composer будет работать. Делается это в настройках

Установка при помощи инсталятора Windows

Установщик загрузит композитор для вас и настроит переменную среды PATH, чтобы вы могли просто вызвать композитор из любого каталога.

Загрузите и запустите Composer-Setup.exe — он будет устанавливать последнюю версию композитора всякий раз, когда он выполняется. В процессе установки установщик запросит место установки и путь к PHP, который нужно указать тот, который мы выбрали в настройках Open Server. Версии модулей PHP у Open Server находятся по пути Open Server\modules\php\[PHP-5.6-x64].

Далее проверяем версию, чтобы убедится на то, что Composer удачно установился командой

php composer.phar -V

Чтобы выполнять команды Composer по команде composer добавляем путь в PATH

echo @php "%~dp0composer.phar" %*>composer.bat

Она создаст .bat файл и в дальнейшем можно будет работать без указания php composer.phar, просто указывая composer Т.е. команда проверки версии (которая была выше) будет выглядеть так:

composer -V

Установка при помощи CMD Windows

Чтобы быстро установить Composer в текущем каталоге, запустите в своем терминале следующий сценарий

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Этот скрипт установщика будет просто проверять некоторые настройки php.ini, предупреждать вас, если они установлены неправильно, а затем загрузить последнюю версию composer.phar в текущем каталоге. 4 строчки выше, делают следующие действия:

  • Загружает установщик в текущий каталог
  • Проверяет установщик на SHA-384, который вы также можете перекрестно проверить здесь.
  • Запускает установщик
  • Удаляет установщик

Далее проверяем версию, чтобы убедится на то, что Composer удачно установился командой

php composer.phar -V

Чтобы выполнять команды Composer по команде composer добавляем путь в PATH

echo @php "%~dp0composer.phar" %*>composer.bat

Она создаст .bat файл и в дальнейшем можно будет работать без указания php composer.phar, просто указывая composer Т.е. команда проверки версии (которая была выше) будет выглядеть так:

composer -V

 

Чат на PHP, Ajax, HTML, CSS

👁 113 просмотров

Разделим код проекта на несколько частей: база данных, серверная и клиентская.

Клиентская часть

Клиентский интерфейс взимодействия

<!DOCTYPE HTML>
    <html>
    <head>
        <title>PhpAjaxChat</title>
        <!-- У нас всё работает в UTF-8 -->
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">

        <!-- Загружаем стили для чата -->
        <link rel="stylesheet" type="text/css" media="screen" href="style.css" />

        <!-- Подключаем jQuery -->
        <script src="jquery.js"></script>
        <!-- Подключаем скрипт чата -->
        <script src="script.js"></script>
    </head>
    <body>
        <div style="padding: 100px;">
            <h1>Php Ajax Chat</h1>
            <!-- Вот в этих 2-х div-ах будут идти наши сообщения из чата -->
            <div class="chat r4">
                <div id="chat_area"><!-- Сюда мы будем добавлять новые сообщения --></div>
            </div>
            <form id="pac_form" action=""><!-- Наша форма с именем, сообщением и кнопкой для отправки -->
                <table style="width: 100%;">
                    <tr>
                        <td>Имя:</td>
                        <td>Сообщение:</td>
                        <td></td>
                    </tr>
                    <tr>
                        <!-- Поле ввода имени -->
                        <td><input type="text" id="pac_name" class="r4" value="Гость"></td>
    
                        <!-- Поле ввода сообщения -->
                        <td style="width: 80%;"><input type="text" id="pac_text" class="r4" value=""></td>
    
                        <!-- Кнопка "Отправить" -->
                        <td><input type="submit" value="Отправить"></td>
                    </tr>
                </table>
            </form>
        </div>
    </body>
</html>

Скрипт работы на стороне клиента на JQuery/JavaScript

$(document).ready(function () {
                $("#pac_form").submit(Send); // вешаем на форму с именем и сообщением событие которое срабатывает когда нажата кнопка "Отправить" или "Enter"
                $("#pac_text").focus(); // по поле ввода сообщения ставим фокус
                setInterval("Load();", 2000); // создаём таймер который будет вызывать загрузку сообщений каждые 2 секунды (2000 миллисекунд)
            });

            // Функция для отправки сообщения
            function Send() {
                // Выполняем запрос к серверу с помощью jquery ajax: $.post(адрес, {параметры запроса}, функция которая вызывается по завершению запроса)
                $.post("ajax.php",
                        {
                            act: "send",  // указываем скрипту, что мы отправляем новое сообщение и его нужно записать
                            name: $("#pac_name").val(), // имя пользователя
                            text: $("#pac_text").val() //  сам текст сообщения
                        },
                        Load ); // по завершению отправки вызываем функцию загрузки новых сообщений Load()

                $("#pac_text").val(""); // очистим поле ввода сообщения
                $("#pac_text").focus(); // и поставим на него фокус

                return false; // очень важно из Send() вернуть false. Если этого не сделать то произойдёт отправка нашей формы, те страница перезагрузится
            }

            var last_message_id = 0; // номер последнего сообщения, что получил пользователь
            var load_in_process = false; // можем ли мы выполнять сейчас загрузку сообщений. Сначала стоит false, что значит - да, можем

            // Функция для загрузки сообщений
            function Load() {
                // Проверяем можем ли мы загружать сообщения. Это сделано для того, чтобы мы не начали загрузку заново, если старая загрузка ещё не закончилась.
                if(!load_in_process)
                {
                    load_in_process = true; // загрузка началась
                    // отсылаем запрос серверу, который вернёт нам javascript
                    $.post("ajax.php",
                            {
                                act: "load", // указываем на то что это загрузка сообщений
                                last: last_message_id, // передаём номер последнего сообщения который получил пользователь в прошлую загрузку
                                rand: (new Date()).getTime()
                            },
                            function (result) { // в эту функцию в качестве параметра передаётся javascript код, который мы должны выполнить
                                $(".chat").scrollTop($(".chat").get(0).scrollHeight); // прокручиваем сообщения вниз
                                load_in_process = false; // говорим что загрузка закончилась, можем теперь начать новую загрузку
                            });
                }
            }

Стили интерфейса

* {
    margin: 0;
    padding: 0;
    }

    body {
    font: normal normal normal 16px "Trebuchet MS", Arial, Times;
    color: #000000;
    }

    /* Важное свойство */
    .chat {
    height: 500px;
    overflow: auto; /* Это позволяет отображать полосу прокрутки */
    position: relative; /* Это позволяет съезжать тексту в слое, не растягивая страницу */
    text-align: left;
    border: solid #818181 1px;
    }

    .chat div {
    position: absolute; /* Страница остаётся того же размера */
    }

    .chat span {
    display: block;
    }

    input[type=text],textarea {
    width: 100%;
    font: normal normal normal 16px "Trebuchet MS", Arial, Times;
    border: solid #818181 1px;
    }

    /* Для CSS 3 */
    .r4 {
    -moz-border-radius: 4px;
    -khtml-border-radius: 4px;
    -webkit-border-radius: 4px;
    border-radius: 4px;
    }

База данных

В этой таблице у нас будут храниться сообщения чата:

  • id – номер сообщения, он должен быть помечен как AUTO_INCREMENT для того что бы для каждого сообщения создавался уникальный индекс
  • name – имя пользователя отправившего сообщение
  • text – само сообщение
CREATE TABLE `messages` (
    `id` int(5) NOT NULL AUTO_INCREMENT,
    `name` char(255) character SET utf8 NOT NULL,
    `text` text character SET utf8,
    PRIMARY KEY  (`id`)
    );

 

Серверная часть

<?php
// настройки для подключения к MySQl
$config = array('hostname' => 'localhost', 'username' => 'root', 'password' => '', 'dbname' => 'pacdb');

// подключаемся к MySQL, если не вышло то выходим
if (!mysql_connect($config['hostname'], $config['username'], $config['password'])) {
    exit();
}
// Выбираем базу данных, если не вышло то выходим
if (!mysql_select_db($config['dbname'])) {
    exit();
}
mysql_query("SET NAMES 'utf8'"); // говорим MySQl'у то что мы будем работать с UTF-8

Header("Cache-Control: no-cache, must-revalidate"); // говорим браузеру что-бы он не кешировал эту страницу
Header("Pragma: no-cache");

Header("Content-Type: text/javascript; charset=utf-8"); // говорим браузеру что это javascript в кодировке UTF-8

// проверяем есть ли переменная act (send или load), которая указываем нам что делать
if (isset($_POST['act'])) {
    // $_POST['act'] - существует
    switch ($_POST['act']) {
        case "send" : // если она равняется send, вызываем функцию Send()
            Send();
            break;
        case "load" : // если она равняется load, вызываем функцию Load()
            Load();
            break;
        default : // если ни тому и не другому  - выходим
            exit();
    }
}

// Функция выполняем сохранение сообщения в базе данных
function Send()
{
    // тут мы получили две переменные переданные нашим java-скриптом при помощи ajax
    // это:  $_POST['name'] - имя пользователя
    // и $_POST['text'] - сообщение

    $name = substr($_POST['name'], 0, 200); // обрезаем до 200 символов
    $name = htmlspecialchars($name); // заменяем опасные теги (<h1>,<br>, и прочие) на безопасные
    $name = mysql_real_escape_string($name); // функция экранирует все спец-символы в unescaped_string , вследствие чего, её можно безопасно использовать в mysql_query()

    $text = substr($_POST['text'], 0, 200); // обрезаем до 200 символов
    $text = htmlspecialchars($text); // заменяем опасные теги (<h1>,<br>, и прочие) на безопасные
    $text = mysql_real_escape_string($text); // функция экранирует все спец-символы в unescaped_string , вследствие чего, её можно безопасно использовать в mysql_query()

    // добавляем новую запись в таблицу messages
    mysql_query("INSERT INTO messages (name,text) VALUES ('" . $name . "', '" . $text . "')");
    }



    // функция выполняем загрузку сообщений из базы данных и отправку их пользователю через ajax виде java-скрипта
    function Load()
    {
    // тут мы получили переменную переданную нашим java-скриптом при помощи ajax
    // это:  $_POST['last'] - номер последнего сообщения которое загрузилось у пользователя

    $last_message_id = intval($_POST['last']); // возвращает целое значение переменной

    // выполняем запрос к базе данных для получения 10 сообщений последних сообщений с номером большим чем $last_message_id
    $query = mysql_query("SELECT * FROM messages WHERE ( id > $last_message_id ) ORDER BY id DESC LIMIT 10");

    // проверяем есть ли какие-нибудь новые сообщения
    if (mysql_num_rows($query) > 0) {
    // начинаем формировать javascript который мы передадим клиенту
    $js = 'var chat = $("#chat_area");'; // получаем "указатель" на div, в который мы добавим новые сообщения

    // следующий конструкцией мы получаем массив сообщений из нашего запроса
    $messages = array();
    while ($row = mysql_fetch_array($query)) {
    $messages[] = $row;
    }

    // записываем номер последнего сообщения
    // [0] - это вернёт нам первый элемент в массиве $messages, но так как мы выполнили запрос с параметром "DESC" (в обратном порядке),
    // то это получается номер последнего сообщения в базе данных
    $last_message_id = $messages[0]['id'];

    // переворачиваем массив (теперь он в правильном порядке)
    $messages = array_reverse($messages);

    // идём по всем элементам массива $messages
    foreach ($messages as $value) {
    // продолжаем формировать скрипт для отправки пользователю
    $js .= 'chat.append("<span>' . $value['name'] . '» ' . $value['text'] . '</span>");'; // добавить сообщние (<span>Имя » текст сообщения</span>) в наш div
    }

    $js .= "last_message_id = $last_message_id;"; // запишем номер последнего полученного сообщения, что бы в следующий раз начать загрузку с этого сообщения

    // отправляем полученный код пользователю, где он будет выполнен при помощи функции eval()
    echo $js;
    }
}

?>

Создание новой области для виджета в WordPress

👁 23 просмотров

Если вы знакомы с темами WordPress, то вы знаете, что у многих тем есть виджетная боковая панель. Это означает, что вы можете добавлять, удалять и переупорядочивать виджеты на своем веб-сайте WordPress, используя раздел «Виджет» на панели инструментов WordPress.

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

Наличие виджетной боковой панели очень полезно, но вы можете также виджетировать другие части своей темы WordPress. Это очень легко сделать, и как только ваша тема будет изменена, вам будет легко или администратор WordPress просто поменять виджеты на разных частях веб-сайта.

Шаг 1: Добавляем код вывода виджета в теме

Первым шагом является добавление следующей строки кода к той части вашей темы, которую вы хотите активизировать. Обязательно измените «Name of Widget Area» на имя, которое имеет смысл для вас. Вам нужно будет сделать это с помощью редактора кода, а затем загрузить файл через FTP-клиент.

<?php
 
if ( is_active_sidebar( 'slider-widget' ) ) : ?>
    <div id="slider-widget-area" class="slider-widget-area widget-area" role="complementary">
    <?php dynamic_sidebar( 'slider-widget' ); ?>
    </div>
     
<?php endif; ?>

Шаг 2: Реадактируем файл functions.php

В папке темы WordPress должен быть файл functions.php. Если этого не происходит, просто создайте новый файл и назовите его «functions.php». В файле functions.php добавьте следующий код:

function wpb_widgets_slider_init() {
 
    register_sidebar( array(
        'name'          => 'Slider Widget Area',
        'id'            => 'slider-widget',
        'before_widget' => '<div class="slider-widget">',
        'after_widget'  => '</div>',
        'before_title'  => '<h2 class="slider-title">',
        'after_title'   => '</h2>',
    ) );
 
}
add_action( 'widgets_init', 'wpb_widgets_slider_init' );

Код выше должен быть обернут в PHP открытым и закрытым тегами (<? Php и?>, Соответственно). Если у вас уже есть файл functions.php, те теги уже будут там. Если вы создали его самостоятельно, вам придется добавить их.

Обязательно измените имя функции (в данном случае это «Name of Widget Area»), чтобы оно соответствовало имени, которое вы дали ему на шаге 1.

Параметры «before_widget» и «after_widget» позволяют указать, какой код вы хотите разместить до и после каждого виджета. В этом случае я добавляю div с классом для стилизации.

Параметры «before_title» и «after_title» позволяют вам обернуть заголовки виджетов в коде. В этом случае я завернул заголовок в тегах <h3> и </ h3> соответственно.

Шаг 3. Добавление виджетов

После того, как вы успешно добавили виджетную область, вы можете начать добавлять виджеты на свой сайт WordPress. Для этого войдите в свою панель управления WordPress, затем нажмите «Виджеты» в раскрывающемся списке «Внешний вид» с левой стороны.

Теперь вы должны увидеть раздел «Name of Widget Area» в правой части экрана. Теперь просто нажмите и перетащите виджеты в окно, как ваша боковая панель!

Загрузка файла на сервер при помощи AJAX и PHP

👁 110 просмотров

 

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

Есть возможность реализации этой затеи 2-мя способами:

  1. Чтобы файл загрузился после выбора файла автоматом;
  2. Чтобы файл грузил в последствии нажатии на кнопку загрузки.

Чтобы файл загрузился после выбора файла автоматом

Для этого сначала создадим форму и поле файла:

    <form method="post" enctype="multipart/form-data">
		  <div class="form-group">
		    <label for="file">Загрузка фотографии</label>
		    <input type="file" class="form-control-file" id="file" aria-describedby="fileHelp">
		    <small id="fileHelp" class="form-text text-muted">Загрузите новый баннер или установите из существующего списка.</small>
		  </div>
		  <div class="form-group" id="photo-content">
  
		  </div>
    </form>

Кода AJAX обработки на JS/jQuery:

	$(document).on('change','#file',function(event){
		event.preventDefault();
		
        var property = document.getElementById('file').files[0];
        var image_name = property.name;
        var image_extension = image_name.split('.').pop().toLowerCase();

        if(jQuery.inArray(image_extension,['gif','jpg','jpeg','png']) == -1){
          alert("Неправильный формат");
        }

        var form_data = new FormData();
        form_data.append("file",property);
        console.log(form_data);
        $.ajax({
          url:'upload.php',
          method:'POST',
          data:form_data,
          cache:false,
          processData: false,
          contentType: false,
          beforeSend:function(){
            //$('#msg').html('Loading......');
          },
          success:function(data){
	    	  data = JSON.parse(data);
        	  var photo = `
          	  	<div class="img-item">
  			  		<img src='http://83.220.168.205/upload/upload/reklam/banners/`+data.fileName+`'/>
  		  		</div>
          	  `;
          	  $("#photo-content").append(photo);
          }
        });
      });

Серверная часть на PHP:

<?php

if($_FILES['file']['name'] != ''){
    $test = explode('.', $_FILES['file']['name']);
    $extension = end($test);    
    $name = rand(100,999).'.'.$extension;

    $location = './upload/'.$name;
    move_uploaded_file($_FILES['file']['tmp_name'], $location);

    $data = ["fileName"=>$name];
    echo json_encode($data);
}
?>

Чтобы файл загрузился после выбора и нажатия на кнопку

Клиентская часть на HTML:

    <form method="post" enctype="multipart/form-data">
		  <div class="form-group">
		    <label for="file">Загрузка фото</label>
		    <input type="file" class="form-control-file" id="file" aria-describedby="fileHelp">
		    <br/>
		    <button type="submit" class="btn btn-primary btn-start-upload">Загрузить</button>
		    <small id="fileHelp" class="form-text text-muted">Загрузите новый баннер или установите из существующего списка.</small>
		  </div>
		  <div class="form-group" id="photo-content">
		  
		  </div>
    </form>

Обработка на AJAX:

	$(".btn-start-upload").click(function(e){
		e.preventDefault();
		var formData = new FormData();
		formData.append('file', $('#file').prop("files")[0]);
        console.log(formData);
		$.ajax({
			  url: 'upload.php',
			  type: 'POST',
			  processData: false, // important
			  contentType: false, // important
			  cache:false,
			  dataType : 'text',
			  data: formData,
	          type: 'post',
		      success: function(data){
		    	  data = JSON.parse(data);
	        	  var photo = `
	          	  	<div class="photo-item">
	  			  		<div>
	  			  		<img src='http://mysitename.ru/upload/`+data.fileName+`'/>
	  			  		</div>
	  		  		</div>
	          	  `;
	          	  $("#photo-content").append(photo);
		      }
		});
	});

Серверная часть на PHP:

<?php

if($_FILES['file']['name'] != ''){
    $test = explode('.', $_FILES['file']['name']);
    $extension = end($test);    
    $name = rand(100,999).'.'.$extension;

    $location = './upload/'.$name;
    move_uploaded_file($_FILES['file']['tmp_name'], $location);

    $data = ["fileName"=>$name];
    echo json_encode($data);
}
?>

 

Отправка Email через PHP из Node.js через Ajax

👁 45 просмотров

Рассмотрим пример отправки почты через AJAX — запрос посредством PHP из сервера Node.js. Для начала нам потребуется инструмент генерации AJAX — запросов и для этого будем использовать модуль request. Установить ее очень просто:

npm install request

Отправка из Node.js:

var request = require('request');
request.
    post(
    {
        url:'http://xxx.xxx.xxx.xxx/mail/send.php', 
        form:{
            key: data.key,
            title: "Ваш пароль в сервисе",
            userEmail: data.userEmail,
            message:{
                "Логин":result[0].email,
                "Пароль":result[0].password
            }
        }
    }, 
    function(err, httpResponse, body){
        console.log(err);
        console.log(httpResponse);
        console.log(body);
    });

 

Прием в PHP — файле send.php:

<?php
$message = "";
foreach ($_REQUEST["message"] as $key => $value)
{
    $message .= "<br/><b>".htmlspecialchars($key)."</b>: ".htmlspecialchars($value)."<br/>";
}
// Для отправки HTML-письма должен быть установлен заголовок Content-type
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
// Дополнительные заголовки
$headers[] = 'To: Mary <mary@example.com>, Kelly <kelly@example.com>';
$headers[] = 'From: Birthday Reminder <birthday@example.com>';
$headers[] = 'Cc: birthdayarchive@example.com';
$headers[] = 'Bcc: birthdaycheck@example.com';

// Отправляем
mail($_REQUEST["userEmail"], $_REQUEST["title"], $message, $headers);

echo json_encode($_REQUEST);

Соединение к БД Joomla из внешнего файла

👁 23 просмотров

Есть ситуация, когда нужно прочесть из БД Joomla из таблицы какого-то модуля данные, при этом есть необходимость прочесть данные в отдельный файл из которого они загружаются в интерфейс через Ajax запрос посредством JavaScript/jQuery. Ниже приведен код серверной и клиентской части для реализации данного взимодействия.

<?php
define( '_JEXEC', 1); //  This will allow to access file outside of joomla.
//defined( '_JEXEC')  or die( 'Restricted access' );// Use this if you wanna access file only in Joomla.
define( 'DS', DIRECTORY_SEPARATOR );
define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT'] . DS . '');
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
//create application
$mainframe = &JFactory::getApplication('site');

function getField($file_alias){
    // Get a db connection.
    $db = JFactory::getDbo();
    // Create a new query object.
    $query = $db->getQuery(true);
    // Select all records from the user profile table where key begins with "custom.".
    // Order it by the ordering field.
    $query->select($db->quoteName(array('file_id', 'file_title', 'file_alias', 'url_download')));
    $query->from($db->quoteName('#__jdownloads_files'));
    $query->where($db->quoteName('file_alias') . ' LIKE '. $db->quote($file_alias));
    //$query->order('ordering ASC');
    // Reset the query using our newly populated query object.
    $db->setQuery($query);
    // Load the results as a list of stdClass objects (see later for more options on retrieving data).
    $results = $db->loadObjectList();
    return  $results[0];//Данные потом получить в виде свойств объекта ClassName::getFieldDocument($fileName, $userId)->fieldName
}

$arrData = array(
                    "file_alias"=>$_REQUEST['file_alias'], 
                    "url_download"=>getField($_REQUEST['file_alias'])->url_download,
                    "file_id"=>getField($_REQUEST['file_id'])->url_download,
                    "file_title"=>getField($_REQUEST['file_id'])->file_title
                );
echo json_encode($arrData);<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1">​</span>
    function readPrices(data){
        var jsonString = $.ajax({
            url: "server.php", 
            data:data,
            dataType:'JSON', 
            async: false,  
            success: function(data){}
         }).responseText;
        return JSON.parse(jsonString);
    };
    //
    var url = "my-url-data";
    var jsonData = readPrices({"file_alias":url});
    console.log(jsonData);

 

Чтение данных из Excel в PHP и в JavaScript

👁 123 просмотров

Допустим, есть потребность для клиента работать с часто изменяемыми данными в понятном виде на понятных носителях. Носителем информации будем считать файл Excel, из которого посредством библиотеки PHP данные подгружаются в JavaScript.

Придумываем структуру файла Excel

Сначала нам необходимо подготовить структуру файла Excel. На данном этапе нужно продумать какие значения и в каких ячейках у нас будут и эти значения в дальнейшем будут фиксированы:

Скачать файл excel.

Подгружаем данные в PHP

Для подгрузки воспользуемся любой библиотекой, которая способна читать файл Excel. В данном случае воспользуемся неплохой библиотекой PHPExcel, скачать библиотеку по ссылке.

Ниже представлен типичный код подгрузки Excel в PHP посредством PHPExcel:

<?php
require_once 'plugins/PHPExcel-1.8/Classes/PHPExcel.php';
$excel = PHPExcel_IOFactory::load('price.xlsx');

Foreach($excel ->getWorksheetIterator() as $worksheet) {
    $lists[] = $worksheet->toArray();
}

//$price = array();
foreach($lists as $list){
    //echo '<table border="1">';
    // Перебор строк
    foreach($list as $row)
    {
        //$rows = array();
        //echo '<tr>';
      // Перебор столбцов
        foreach($row as $col)
        {
            //echo '<td>'.$col.'</td>';
        }
        //echo '</tr>';
    }
    //echo '</table>';
}

echo json_encode($lists); //Выводим прочитанные данные в JSON

 

Подгружаем данные в JavaScrip/jQuery

Мы подгрузили данные из Excel в PHP, теперь осталось отправить на этот файл AJAX — запрос, чтобы вернуть строку с данными в формате JSON:

    $(document).ready(function(){
        function readPrices(){
           var jsonString = $.ajax({
               url: "read_price.php", 
               dataType:'JSON', 
               async: false,  
               success: function(data){}
           }).responseText;
           return JSON.parse(jsonString);
        };   
       
        var priceArray = readPrices()[0];
        console.log(priceArray);
   
   });