Collection.php 4.44 KB
<?php

namespace app\components;

use Yii;
use app\models\Filter;
use yii\base\Component;
use yii\db\Query;

class Collection extends Component
{
    //Отображение размера файла
    public static function human_filesize($bytes, $decimals = 2)
    {
        $sz = 'BKMGTP';
        $factor = floor((strlen($bytes) - 1) / 3);
        return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor];
    }

    //Фильтрация фомена
    public static function domain_filter($domain)
    {
        $out = false;
        $host = str_replace(
            '*.',
            '',
            utf8_encode($domain)
        );
        if (filter_var($host, FILTER_VALIDATE_IP)===false)
            {
                $host_parts = explode('.', $host);
                $host_parts = array_reverse($host_parts);
                $host_parts = array_slice($host_parts, 0, 2);
                $host_parts = array_reverse($host_parts);

                if (count($host_parts) === 2)
                    $out = implode('.', $host_parts);
                unset($host_parts);
            }
        unset($host);
        return $out;
    }

    //Скачиваине URL файла и передача пути к нему
    public static function get_filter($type)
    {
        $out = array();
        $filtes_bd = (new Query())
            ->select('`pattern`, `include`')
            ->from('{{%filters}}')
            ->where('type=:type AND status=:status', array(':type'=>$type, ':status'=>Filter::STATUS_ON ))
            ->all();
        if ($filtes_bd !== false)
            $out = $filtes_bd;
        unset($filtes_bd);
        return $out;
    }

    //Скачиваине URL файла и передача пути к нему
    public static function apply_filter($domain, $filters)
    {
        $out = false;
        $fiter_check = true;
        foreach($filters as $filter)
            if ($fiter_check === true)
                {
                    $find = preg_match($filter['pattern'], $domain);
                    if (
                        ($find === 1 && (int)$filter['include']===Filter::INCLUDE_OFF) ||
                        ($find === 0 && (int)$filter['include']===Filter::INCLUDE_ON)
                    )
                        {
                            $fiter_check = false;
                            break;
                        }
                    unset($find);
                }
        unset($filter);
        if ($fiter_check===true)
            $out = (string)$domain;
        unset($fiter_check);
        return $out;
    }




    //Скачиваине URL файла и передача пути к нему
    public static function download_file($csvFile)
    {
        $out = '';
        $temp_csv_name = tempnam(sys_get_temp_dir(), 'rkn_');
        if ($temp_csv_name !== false)
            {
                $file_handle = fopen((string)$csvFile, 'r');
                if ($file_handle!==false)
                    {
                        $file_write = file_put_contents($temp_csv_name, $file_handle);
                        if ($file_write!==false)
                            $out = $temp_csv_name;
                        unset($file_write);
                        fclose($file_handle);
                    }
                unset($file_handle);
            }
        unset($temp_csv_name);
        return $out;
    }


    public static function getRawData($url, $domain)
    {
        $post = [
            'doms' => implode("\r\n",$domain),
        ];
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

        $response = curl_exec($ch);
        $errorNum = curl_errno($ch);
        $errorMsg = curl_error($ch);

        curl_close($ch);

        return ['data' => $response, 'errorno' => $errorNum, 'errormessage' => $errorMsg];
    }

    public static function getTixRawData($url)
    {

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

        $response = curl_exec($ch);
        $errorNum = curl_errno($ch);
        $errorMsg = curl_error($ch);

        curl_close($ch);

        return ['data' => json_decode($response, true), 'errorno' => $errorNum, 'errormessage' => $errorMsg];
    }

}