Поиск по этому блогу

Показаны сообщения с ярлыком php. Показать все сообщения
Показаны сообщения с ярлыком php. Показать все сообщения

среда, 30 сентября 2020 г.

PHP поиск данных в DOM по классу

 Здравствуйте!


К сожалению при работе с DOM в PHP нет возможности сделать выборку данных по имени класса. Благо всё уже придумано до нас и есть хорошо работающий код:

function getElementsByClassName($dom, $ClassName, $tagName=null) {

    if($tagName){

        $Elements = $dom->getElementsByTagName($tagName);

    }else {

        $Elements = $dom->getElementsByTagName("*");

    }

    $Matched = array();

    for($i=0;$i<$Elements->length;$i++) {

        if($Elements->item($i)->attributes->getNamedItem('class')){

            if($Elements->item($i)->attributes->getNamedItem('class')->nodeValue == $ClassName) {

                $Matched[]=$Elements->item($i);

            }

        }

    }

    return $Matched;

}


Пример использования:


$text = '<span class="js-item-price" itemprop="price" content="16000">16 000</span>';

$dom = new DOMDocument;

@$dom->loadHTML($text);

$finded= getElementsByClassName($dom, 'js-item-price', 'span');

$data = $finded[0]->getAttribute('content');

echo $data;


Пример выведет 16000 в качестве ответа.

вторник, 29 сентября 2020 г.

PHP проверка на наличие цифр в тексте

 Здравствуйте!

Просто полезный кусок кода для проверки есть ли в тексте цифры.

Используется функция preg_match которая возвращает true если цифры найдены и false если цифры отсутствуют.


preg_match("/[^0-9]/", "text");

Можно добавить проверку наличия дополнительных символов, например

preg_match("/[^.,0-9]/", "text");

будет так же проверять наличие запятых или точки.



вторник, 30 октября 2018 г.

сопоставление типа файла и приложения windows 10

Здравствуйте!

Столкнулся с проблемой - windows 10 не сохраняет приложение по умолчанию для типа файла .php мучения реестра ни к чему не привели и был найден такой вариант:

  1. Командная строка от имени администратора.
  2. ASSOC .php=phpfile
  3. FTYPE phpfile="C:\путь_до_программы\название_программы.exe" %1

windows, php, инструкция, проблема,

После этого php стали открываться с помощью нужного мне приложения.

Оказалось если более простой вариант.
Существует программа FileTypesMan от разработчика NirSoft.
С помощью неё можно поменять назначенное приложение и даже иконку типа файла. Достаточно найти в поиске файл - правой кнопкой мыши Edit Selected Filetype и выставить те значения которые требуются. После этого и приложение будет корректное и иконка нужная.
Скачать программу можно с официального сайта или с архива google drive.

Надеюсь пост был полезен.
Успехов и хорошего дня!

воскресенье, 16 сентября 2018 г.

php excel импорт данных формат даты

Здравствуйте!

Если вы уже читали пост об импорте данных и даже попробовали его то наверняка столкнулись с такой банальной вещью как импорт даты.

инструкция, полезное, программирование, php, php excel, дата

Дело в том что Excel по умолчанию хранит дадут в виде секунд с 1 января 1900 года. Зачем это сделано неизвестно но phpexcel в итоге выдаст нечто в духе 39982 . Для адекватного парсинга даты требуется использовать имеющуюся функцию date в языке PHP вместе с функцией получения данных из ячейки.
$val = date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($cell->getValue()));
Формат даты можно указать любой в соответствии с синтаксисом date.

Надеюсь пост был полезен.
Успехов и хорошего дня!

четверг, 13 сентября 2018 г.

php excel импорт данных

Здравствуйте!

Помимо возможностей phpexcel к экспорту данных он так же умеет эти самые данные импортировать. Зачастую для импорта данных используется формат csv который представляет некоторые неудобства ( обучение пользователей, лишние закрывающие символы итд ). PHPExcel без проблем читает самые обычные xls и xlsx.

php, php excel, программирование, полезное, инструкция,

Для импорта данных требуется проделать следующие действия:
<?php
require_once "PHPExcel.php";
$filecontent = file_get_contents("ИМЯ_ФАЙЛА.xlsx");
$tmpfname = tempnam(sys_get_temp_dir(),"tmpxls");
file_put_contents($tmpfname,$filecontent);
$excelReader = PHPExcel_IOFactory::createReaderForFile($tmpfname);
$excelObj = $excelReader->load($tmpfname);
                            //Номер листа для чтения
        $worksheet = $excelObj->getSheet(0);
$lastRow = $worksheet->getHighestRow();
for ($row = 0; $row <= $lastRow; $row++) {
                                    //Выводим содержимое строк A[$row] B[$row] etc...
echo $worksheet->getCell('A'.$row)->getValue();
echo $worksheet->getCell('B'.$row)->getValue();
echo $worksheet->getCell('C'.$row)->getValue();
echo $worksheet->getCell('D'.$row)->getValue();
echo $worksheet->getCell('E'.$row)->getValue();
}
?>

Надеюсь инструкция была полезной.
Успехов и хорошего дня!

пятница, 31 августа 2018 г.

php рекурсия пример вывода категорий меню

Здравствуйте!

Хотелось бы поделиться очень хорошим примером рекурсии для php по самой распространённой задаче - сделать меню с категориями.

php, программирование, рекурсия,

Прежде всего создадим таблицу в базе данных.
CREATE  TABLE `categories` (
`id` INT  NOT NULL AUTO_INCREMENT ,
`parent_id`  INT NOT NULL ,
`name`  VARCHAR( 50 ) NOT NULL ,
PRIMARY KEY  ( `id` )
);
Заполним её данными.
INSERT INTO `categories` (`id`, `parent_id`, `name`) VALUES
(1, 0, 'Раздел 1'),
(2, 0, 'Раздел 2'),
(3, 0, 'Раздел 3'),
(4, 1, 'Раздел 1.1'),
(5, 1, 'Раздел 1.2'),
(6, 4, 'Раздел 1.1.1'),
(7, 2, 'Раздел 2.1'),
(8, 2, 'Раздел 2.2'),
(9, 3, 'Раздел 3.1');
Создаём наш php файл для вывода и вытаскиваем данные из базы данных.
//Выбираем всё из нашей таблицы
$result=mysqli_query($connect, "SELECT * FROM  categories");
//Если в базе данных есть записи, формируем массив
if   (mysqli_num_rows($result) > 0){
    $cats = array();
//В цикле формируем массив разделов, ключом будет id родительской категории, а также массив разделов, ключом будет id категории
    while($cat =  mysqli_fetch_assoc($result)){
        $cats_ID[$cat['id']][] = $cat;
        $cats[$cat['parent_id']][$cat['id']] =  $cat;
    }
}
Рекурсивная функция для вывода.
function build_tree($cats,$parent_id,$only_parent = false){
    if(is_array($cats) and isset($cats[$parent_id])){
        $tree = '<ul>';
        if($only_parent==false){
            foreach($cats[$parent_id] as $cat){
                $tree .= '<li>'.$cat['name'].' #'.$cat['id'];
                $tree .=  build_tree($cats,$cat['id']);
                $tree .= '</li>';
            }
        }elseif(is_numeric($only_parent)){
            $cat = $cats[$parent_id][$only_parent];
            $tree .= '<li>'.$cat['name'].' #'.$cat['id'];
            $tree .=  build_tree($cats,$cat['id']);
            $tree .= '</li>';
        }
        $tree .= '</ul>';
    }
    else return null;
    return $tree;
}
Вызываем функцию и передаём в неё наш массив.
echo build_tree($cats,0);
На выходе получаем очень красивую структуру:
<ul>
    <li>Раздел 1
        <ul>
            <li>Раздел 1.1
                <ul>
                    <li>Раздел 1.1.1</li>
                </ul>
            </li>
            <li>Раздел 1.2</li>
        </ul>
    </li>
    <li>Раздел 2
        <ul>
            <li>Раздел 1.1</li>
            <li>Раздел 1.2</li>
        </ul>
    </li>
    <li>Раздел 3
        <ul>
            <li>Раздел 3.1</li>
        </ul>
    </li>
</ul>
Я считаю что это очень хороший пример рекурсии в php. Кроме того он решает столь распространённую задачу вывода меню или списка категорий.

Надеюсь код был полезен.
Успехов и хорошего дня!

среда, 29 августа 2018 г.

php multi image upload загрузка множества фото

Здравствуйте!

Встала тут задачка сделать загрузку множества фотографий с динамическими input . Да имеется возможность multiple но не всегда она удобна. Был найден и использован следующий вариант. Требует jQuery для работы.

php, js, jquery, html, программирование, инструкция, полезное,

HTML
<div class="field_wrapper">
<input type="file" name="photos[]" class="form-control">
</div>
<i class="add_button fa fa-plus">Добавить ещё</i> 
JS
<script type="text/javascript">
$(document).ready(function(){
    var maxField = 10;
    var addButton = $('.add_button');
    var wrapper = $('.field_wrapper');
    var fieldHTML = '<br><input type="file" name="photos[]" value="" class="form-control">';
    var x = 1;
   
    $(addButton).click(function(){
        if(x < maxField){
            $(wrapper).append(fieldHTML);
        }
    });
   
    $(wrapper).on('click', '.remove_button', function(e){
        e.preventDefault();
        $(this).parent('div').remove();
        x--;
    });
});
</script>
PHP
$total = count($_FILES['photos']['name']);
for( $i=0 ; $i < $total ; $i++ ) {
$tmpFilePath = $_FILES['photos']['tmp_name'][$i];
        $photo = generateFilename();
$photo.=".jpg";
move_uploaded_file($tmpFilePath, "../uploads/".$photo); 
          }

В коде так же используется самописная функция generateFilename которая возвращает созданное имя файла:

function generateFilename(){
$chars = 'abdefhiknrstyz123456789_';
$string = '';
for ($i = 0; $i < 30; $i++) {
$string .= substr($chars, rand(1, 24) - 1, 1);
}
return $string;
}


Надеюсь код был полезен.
Успехов и хорошего дня!

пятница, 3 августа 2018 г.

php excel базовый файл экспорта

Здравствуйте!

Уже очень давно занимаясь веб программированием и встречая задачу экспортировать нечто в XLSX - обращаюсь к библиотеке PHP Excel. Прожорливая на ресурсы но зато простая и эффективная. Разобраться с ней сходу порой не так просто поэтому решил выложить "базовый костяк" файла осуществляющего экспорт данных в формат XLSX. Так же в корне должны присутствовать PHPExcel.php и одноимённая директория PHPExcel содержащая все компоненты данной библиотеки.

<?php
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Europe/London');
if (PHP_SAPI == 'cli')
die('This example should only be run from a Web Browser');

require_once dirname(__FILE__) . '/PHPExcel.php';

// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// Set document properties
$objPHPExcel->getProperties()->setCreator("Автор")
->setLastModifiedBy("Автор Последних Изменений")
->setTitle("Заголовок")
->setSubject("Заголовок")
->setDescription("Заголовок")
->setKeywords("Ключевые Слова")
->setCategory("Категория Файла");

$objPHPExcel->getActiveSheet()->setCellValue("A1", "Файл экспорта сформирован автоматически");

// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);

// Redirect output to a client as web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="имя_файла.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');

// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0

//$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
?>
инструкция, полезное, программирование, php, php excel,

Заносим информацию в столбцы
$objPHPExcel->getActiveSheet()->setCellValue("A1", "Файл экспорта сформирован автоматически");

Меняем имя файла и прочее в файле - и данные уже успешно экспортированы в xlsx!

Кстати говоря если вам понадобится файл в устаревшем формате xls - достаточно раскомментировать строку
//$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
И закомментировать
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

Так же оставляю ссылочку на скачивание библиотеки PHPExcel 2015

Надеюсь информация была полезной и экспорт пройдёт без проблем.
Успехов и хорошего дня!

понедельник, 30 июля 2018 г.

как научиться компьютеру pc-part 4

Здравствуйте!

И так пришло время рассказать о последней самой важной теме в обучении компьютеру - программировании. Ранее в 3 части было рассказано что такое софт и как ему научиться. А в данной части затронем как научиться его создавать.

Основная цель программирования это автоматизация или улучшение рабочий процессов ( программирование развлечений не в счёт ). Поэтому может быть совершенно разного уровня. От маленький макросов добавленных в excel до огромных систем которые позволяют управлять целыми предприятиями.

При желании научиться программированию прежде всего требуется изучить базовые понятия такие как переменные циклы условия компилирование и т.д. Далее желательно ознакомиться с ООП т.к. на этих принципах сейчас базируется подавляющее количество программ.

Далее при разработке нужно определиться с тем что требуется разрабатывать ( платформа ). Это может быть приложение для компьютера для телефона сайт или какой то сервис. Возможностей море. И тут уже встаёт очень важный момент - выбор языка. Невозможно идеально изучить все языки. Лучше выбрать какой то один язык и развиваться вместе с ним.

Ознакомимся с самыми популярными языками:

1. php - язык для веб программирования. Очень лёгкий в освоении понимании и при этом подходящий для реализации любого веб проекта.
как научиться компьютеру, полезная информация, полезное, программирование, c sharp, c#, php,  python, java, c++
2. c# он же c sharp - язык который попытался совместить в себе c++ и java и стать универсальным. Базируется на платформе .NET от Microsoft. Подходит для разработки всего и вся. Но в вебе проигрывает php. А в высоконагруженных приложениях проигрывает c++. В плане совместимости - проигрывает java. Зато универсален, да.
как научиться компьютеру, полезная информация, полезное, программирование, c sharp, c#, php,  python, java, c++
3. java - самый крупный язык на текущий момент. Over 3 billion devices running java (c) установщик. И это правда так. Наиболее подходит для разработки кроссплатформенных приложений и приложений для устройств ( телефоны и прочее ).
как научиться компьютеру, полезная информация, полезное, программирование, c sharp, c#, php,  python, java, c++
4. C++ - высокоуровневый язык который идеально подходит для написания кроссплатформенных приложений если у вас есть достаточно времени на его изучение и поиск подходящих библиотек. Самый хардкорный и самый оптимизированный - на нём можно писать как очень хорошие так и очень плохие приложения. Сайты на нём писать тяжело но можно.
как научиться компьютеру, полезная информация, полезное, программирование, c sharp, c#, php,  python, java, c++
5. python - ещё один уникальный язык. Говорят что подходит для любых целей. На текущий момент стабильно развивается и совершенствуется. Стоит где то в нише вместе с java.
как научиться компьютеру, полезная информация, полезное, программирование, c sharp, c#, php,  python, java, c++

И так теперь вы более менее можете разобраться - в какую же степь пойти.
На этом цикл статей подходит к концу.
Спасибо за чтение, надеюсь почитать было интересно.

Часть 1
Часть 2
Часть 3

Надеюсь эта информация была вам интересна.
Успехов и хорошего дня!

четверг, 26 июля 2018 г.

новые возможности get запросов в php

Здравствуйте!

Наткнулся на дико боянистую картинку аж полтора года назад вышедшую. Но она очень повеселила. Вкратце "дополнительные возможности GET запросов".


Ну и что бы пост даром не пропадал - вкратце о том что такое get запросы.

Для передачи данных между страницами в веб php использует два возможных варианта: открытую и скрытую передачу параметров.

Открытая передача она же GET представляет из себя дополнения к адресной строке в которых указывается имя переменной и её содержание. Все передающиеся переменные это обычные строки. Очень распространённый вариант и совершенно небезопасный ведь любой может

  1. Увидеть что же там отсылается.
  2. Поменять то что отсылвается.
Примеры сплошь и рядом но в целом общая схема выглядит так: наименование_страницы.php?переменная1=значение1&переменная2=значение2&переменная3=значение3

Есть так же POST передача параметров когда они не видны обычному пользователю. Именно пост используется при передаче данных из JavaScript. И именно по данному типу регулярно во всём интернете бегают данные в json формате. При передаче данных уже нет ограничения на тип данных. Благодаря JSON формату можно передавать массивы между различными источниками. Например передать массив данных из JavaScript в PHP.


Надеюсь улыбнулись.
Успехов и хорошего дня!