Задать вопрос
  • Index.php - как снизить нагрузку?

    @Ilya12345
    Тут проблема не в файле а в том что бот поисковика перезагрузку даёт, настрой у поискового робота время обхода страниц, и потом уже ищи проблему с индексом.
    Ответ написан
    Комментировать
  • Закрузить код в вордовский файл?

    @Ilya12345 Автор вопроса
    В общем ларчик просто открывался, я грешил на содержимое файлов и при этом забывал экранировать названия файлов, собстна из за которых и вылетал парсер ворда.
    Ответ написан
    Комментировать
  • Некорректно работает ZipArchive()?

    @Ilya12345 Автор вопроса
    Из за кривых названий файлов он не извлекал все файлы.
    Ответ написан
    4 комментария
  • Решение или как реализовать поиск по сайту из списка в файле?

    @Ilya12345
    Есть два варианта:
    • Первый через базу, например ты вытаскиваешь значения из экселя и пихаешь в базу, дальше ищешь по ней.
    • Второй вариант конвертировать экселевский файл в csv и уже через поиск на js делать поиск по нему.


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

    Второй плох тем что каждый пользователь сначала будет грузить файл, а если он весит более 50 мегабайт то будет не так быстро, так как чтобы в файле найти данные его нужно прочитать.

    Вот простейший перегон данных из csv в базу:
    например файл base.csv содержал что то вроде:
    23;vk.com
    24;https://yandex.ru

    $mysqli = new mysqli('localhost','root','','test'); //соединение с уже созданной базой
    if ($file = fopen("base.csv", "r")) { //прочтение файла .csv
        while(!feof($file)) { //построчное чтение в цикле
            $line = fgets($file);//присвоение прочитанного файла в переменную.
    		$line = explode(';',$line); //распиливаем значения по точке с запятой
    		$id = $line[0]; //первое значение до точки запятой
                    $url = $line[1]; //второе значение после точки запятой
    		$sql = "INSERT INTO `screen` (`id`, `id_site`, `url`) VALUES (NULL, '$id', '$url');"; //готовим к добавлению в базу новых значений
    		$mysqli->query($sql); //выполняем запрос в базу
        }
        fclose($file); //заканчиваем чтение файла
    }
    $mysqli->close();//закрываем соединение с базой
    Ответ написан
    Комментировать
  • Почему возникает ошибка в /etc/httpd/conf.d/php.conf?

    @Ilya12345
    Ставил по этой инструкции, сразу заработало https://www.tecmint.com/setup-free-ssl-certificate...
    Если есть возможность переустанови веб сервер.
    Какая версия апача?
    https://www.hostcms.ru/documentation/server/apache...
    Пример конфигурации для Apache 2.4
    <IfModule mpm_prefork_module>
    ServerLimit 256
    StartServers 20
    MinSpareServers 20
    MaxSpareServers 20
    MaxRequestWorkers 256
    MaxConnectionsPerChild 4000
    </IfModule>
    
    MaxRequestWorkers установите значением, равным ServerLimit.
    
    Пример конфигурации для Apache 2
    В секции <IfModule [мультипроцессорный модуль]>, например, <IfModule prefork.c> установим следующие значения:
    
    StartServers 5
    MinSpareServers 10
    MaxSpareServers 10
    MaxClients 30
    ServerLimit 30
    
    StartServers — количество запускаемых процессов, рассчитываете как (Всего памяти - Память для сервера, MySQL, Memcache и т.д.) / размер процесса. Например, 64Gb - 32Gb / 0.256Gb = максимум 125 процессов.
    
    MinSpareServers — минимальное количество простаивающих процессов.
    
    MaxSpareServers — максимальное количество простаивающих процессов.
    
    MaxClients — лимит процессов.
    
    ServerLimit — устанавливается аналогичным значению MaxClients.
    
    Обстоятельно необходимо подходить к расчету MaxClients, т.к. при установке малого значения может увеличиться количество отказов вэб-сервера в обслуживании на запрос клиента. Установка слишком большого значения может привести к свопингу и значительному увеличению времени ответа вэб-сервера.
    
    При использовании одноуровневой и двухуровневой конфигурации вtб-сервера лимиты устанавливаются по-разному. Отдавая сформированные страницы более легкому вtб-серверу (например, nginx), лимиты можно понизить. Конкретные значения рассчитываются индивидуально для каждого вэб-сервера.
    Ответ написан
    Комментировать
  • Почему не работает inline_keyboard в telegram bot'е?

    @Ilya12345
    Вот тебе кусок рабочего кода:
    Дальше думай сам, обрати внимание на порядок приема входных значений.
    <?php
    set_time_limit (0);
    define('TOKEN', '');
    class TG {
        public $token = '';
        public function __construct($token) {
            $this->token = $token; 
        }
        public function send($id, $message, $kb) {
            $data = array(
                'chat_id' => $id,
                'text'  => $message,
                'parse_mode' => 'HTML',
                'disable_web_page_preview'=>true,
                'reply_markup' => json_encode(array('inline_keyboard' => $kb))
            );
            $this->request('sendMessage', $data);
        }  
        public function editMessageText($id, $m_id, $m_text, $kb=''){
            $data=array(
                 'chat_id' => $id,
                 'message_id' => $m_id,
                 'parse_mode' => 'HTML',
                 'text' => $m_text
            );
            if($kb)
                $data['reply_markup']=json_encode(array('inline_keyboard' => $kb));
    
            $this->request('editMessageText', $data); 
        }//редактировать сообщение по id
        public function editMessageReplyMarkup($id, $m_id, $kb){
            $data=array(
                 'chat_id' => $id,
                 'message_id' => $m_id,
                'reply_markup' => json_encode(array('inline_keyboard' => $kb))
            );
            $this->request('editMessageReplyMarkup', $data); 
        }
        public function answerCallbackQuery($cb_id, $message) {
            $data = array(
                'callback_query_id'      => $cb_id,
                'text'     => $message
            );
            $this->request('answerCallbackQuery', $data);
        } 
        public function sendChatAction($id,$action='typing') {
            $data = array(
                'chat_id' => $id,
                'action'     => $action
            );
            $this->request('sendChatAction', $data);
        }
        public  function request($method, $data = array()) {
            $curl = curl_init();
              
            curl_setopt($curl, CURLOPT_URL, 'https://api.telegram.org/bot' . $this->token .  '/' . $method);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); 
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
              
            $out = json_decode(curl_exec($curl), true);
              
            curl_close($curl);
            return $out;
        }
    }
    $body = file_get_contents('php://input');
    $arr = json_decode($body, true); 
    $tg = new tg(TOKEN);
    $tg_id = $arr['message']['chat']['id'];
    $callback_query = $arr['callback_query'];
    $data = $callback_query["data"];
    $message_text = $arr['message']['text'];
    $chatId = $callback_query["message"]["chat"]["id"]; if($chatId!==''){$tg_id = $arr['message']['chat']['id'];}
    $rez_kb = array();
    switch($data){ 
        case '/downyes':
        sendTelegram('sendMessage', array('chat_id' => $chatId ,'text' => 'получить треклист текстом'));
        exit('ok');
        case '/downno':
        sendTelegram('sendMessage', array('chat_id' => $chatId ,'text' => 'получить трек из поиска'));
        exit('ok');
    }   
    $tg->sendChatAction($tg_id);
    $sms_rev='';
    $tg->send($tg_id, $sms_rev, $rez_kb);
    function sendTelegram($method, $response){
    	$ch = curl_init('https://api.telegram.org/bot' . TOKEN . '/' . $method);  
    	curl_setopt($ch, CURLOPT_POST, 1);  
    	curl_setopt($ch, CURLOPT_POSTFIELDS, $response);
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    	curl_setopt($ch, CURLOPT_HEADER, false);
    	$res = curl_exec($ch);
    	curl_close($ch);
     
    	return $res;
    }
    if (!empty($data['message']['text'])) {
    	$text = $data['message']['text'];
    
    	if (mb_stripos($text, '/download') !== false) {
        $inline = array("text"=>"\xE2\x9C\x85 ДА","callback_data"=>"/downyes");
        $inline1 = array("text"=>"\xF0\x9F\x9A\xAB НЕТ","callback_data"=>"/downno");
        $inline_keyboard = [[$inline,$inline1]];
        $keyboard=array("inline_keyboard"=>$inline_keyboard);
       $replyMarkup = json_encode($keyboard); 
    sendTelegram(
    			'sendMessage', 
    			array(
    				'chat_id' => $data['message']['chat']['id'],
    				'parse_mode' => 'html',
    	       	'reply_markup' =>$replyMarkup,
    				'text' => '&#129302; Вы уверены что хотите скачать плейлист?'
    )
    );
    }
    }
    Ответ написан
  • Как взаимодействовать с iframe google captcha?

    @Ilya12345
    Через селениум случайно получилось так одну из пикч ткнуть, пока делал другую таску, копай в этом направлении или колхозь из ProBrowser.
    $iframe = $driver->findElement(WebDriverBy::xpath('//iframe[@title=\'проверка recaptcha\']'));
    $driver->switchTo()->frame($iframe);
    $driver->findElement(WebDriverBy::xpath('//div[@class=\'rc-image-tile-wrapper\']'))->click();
    Ответ написан
    3 комментария
  • Eval php, почему не работает вторая вызываемая функция?

    @Ilya12345 Автор вопроса
    Ответ был однако простой, не нужно быть хлебушком и пихать в eval то что можно оставить в основном коде, а из eval дергать только переменную, проверять её наличие, и если она есть то действовать.
    Ответ написан
    Комментировать