Разные полезные функции

Скрипты, которые не попадают ни в одну тему выше.
Ответить
Аватара пользователя
milukov
Сообщения: 2
Зарегистрирован: 20 авг 2017, 08:55

Разные полезные функции

Сообщение milukov » 26 сен 2017, 01:32

Предлагаю делиться тут разными полезными функциями, которые могут часто пригодиться в скриптах.

Скажем что то вроде такого. Генерация случайного пароля:

echo generate_pwd();

function generate_pwd($lng=7) {
    $keychars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_:;";
    $randkey="";
    $max=strlen($keychars)-1;
    for($i=0;$i<=$lng;$i++)
    $randkey.=$keychars{rand(0,$max)};
    return $randkey;
}

demeno
Сообщения: 1
Зарегистрирован: 12 фев 2016, 02:55

Re: Разные полезные функции

Сообщение demeno » 26 сен 2017, 13:46

Есть "разный полезный класс".
Чтение с запоминанием из папки с кучей файлов (in/datas/), сперт с одного сайта и чуть переделан:

- Берет данные из файла заданными порциями.
- Сохраняет текущую позицию, устойчив к сбросу питания.
- Когда заканчиваются данные в текущем файле данных - сам подгружает данные из заданной папки

<?php
//////////////////////////////////////////////////// РАБОТА С ТЕКСТОВЫМ ФАЙЛОМ ///////////////////////////////////////////////////////////////////////
class CInDataFile
{
	///////////////////////////////////////////////////

	// путь к файлу данных
	var $path;
	// имя элемента файла
	var $name_item;
	// сколько за раз получать данных из источника
	var $items_step;
	
	// текущая позиция в файле данных
	var $current_pos=0;
	// общее число данных
	var $total_count=null;
	// число файлов в папке
	var $num_files=null;
	// счетчик записи continue.txt
	var $num_write_continue_txt=0;

	///////////////////////////////////////////////////

	// конструктор ($path - путь к файлу данных, $name_item - название содержимого файла )
	function CInDataFile($path,$name_item,$step_pause,$items_step=1)
	{
		// счетчик записи continue.txt
		$this->num_write_continue_txt=0;

		// путь к файлу данных
		$this->path=$path;
		
		// имя элемента файла
		$this->name_item=$name_item;

		// пауза перед следующим шагом
		$this->step_pause=$step_pause;

		// сколько за раз получать данные из источника
		$this->items_step=$items_step;

		// инициализируем информацию о продолжении		
		$this->init_continue_info();

		// число файлов во входной папке данных
		global $folder;
		$this->num_files=$folder->get_items_count("in/datas/");
	}

	// получить информацию о продолжении
	private function init_continue_info()
	{
		// получим откуда продолжать
		if (!file_exists($this->path.".continue.txt"))
			$this->current_pos=0;
		else
		{
			$this->current_pos = CTextFile::get_line($this->path.".continue.txt",0);
			$this->current_pos=trim($this->current_pos);
			if ($this->current_pos=="")
			{
				$this->current_pos = CTextFile::get_line($this->path.".continue.txt.bak",0);
				$this->current_pos=trim($this->current_pos);
				if ($this->current_pos=="")
				{
					// сообщение
					global $debug,$app;
					$debug->message_box($this->path." пустой");
					$app->quit();
				}
			}
		}

		// лог
		global $log;
		$log->event("Запуск : начиная с ".$this->current_pos." ".$this->name_item."а. Всего : ".$this->get_count());
	}

	///////////////////////////////////////////////////

	// получить следующий файл
	function next_file()
	{
		global $folder,$file_os;
		$path_next=$folder->get_random_file("in/datas/");
		if ($path_next=="")
			return false;
		$file_os->delete("in/queries.txt");
		$file_os->delete($this->path.".continue.txt");
		$this->current_pos=0;
		$file_os->move($path_next,"in/queries.txt");
		return true;
	}

	// получить следующие данные
	function get_next()
	{
		if ($this->items_step==1)
			return CTextFile::get_line($this->path,$this->current_pos);
		else
			return CTextFile::get_lines($this->path,$this->current_pos,$this->items_step);
	}

	// получить сколько всего данных во входном файле
	function get_count()
	{
		// получим
		if ($this->total_count===null)
			$this->total_count=CTextFile::get_lines_count($this->path);
		// общее число
		return $this->total_count;
	}

	// получить текущую позицию
	function get_current_pos()
	{
		return $this->current_pos;
	}

	// указать что шаг завершен
	function step_complete()
	{
		// укажем что обработали
		$this->current_pos+=$this->items_step;

		// запишем обработанную позицию в файл продолжения (резерв)
		$this->num_write_continue_txt++;
		if ( ($this->num_write_continue_txt % 6)==0)
			CTextFile::write($this->path.".continue.txt.bak",$this->current_pos);

		// запишем обработанную позицию в файл продолжения
		CTextFile::write($this->path.".continue.txt",$this->current_pos);
		
		// укажем прогресс
		global $app;
		$app->set_title($this->current_pos." / ".$this->total_count);
		$app->set_tray_tooltip($this->current_pos." / ".$this->total_count);
	}

	///////////////////////////////////////////////////
};
?>

Аватара пользователя
xscripts
Сообщения: 80
Зарегистрирован: 24 янв 2012, 12:48
Контактная информация:

Re: Разные полезные функции

Сообщение xscripts » 26 сен 2017, 19:55

Универсальная функция для перехода на следующую страницу. Кликает по цифрам пока они не закончатся.

$crnt_page - текущая страница 
$cnt_pages - сколько страниц обходить. если -1 то пока не закончатся ссылки в виде цифр.

// следующая страница
function next_page(&$crnt_page)
{
      global $anchor, $browser, $app,$cnt_pages;
      // количество поисковых страниц
      $crnt_page = $crnt_page + 1;
		// если $cnt_pages == -1, значит скрипт будет искать все страницы до конца поиска
      if ($cnt_pages != -1)
      {
            // останавливаем скрипт
            if($crnt_page>$cnt_pages)
            { 
              $crnt_page=1;
              debug_mess("обработали все заданные страницы ".($crnt_page-1));
              return false;
            }
      }
      // перейдём на следующую страницу с результатами
      if(!$anchor->click_by_inner_text($crnt_page,true))
      {
           debug_mess("обработали все доступные страницы ".($crnt_page-1));
           $crnt_page=1;
           return false;
      }

      debug_mess("обработали страницу ".($crnt_page-1));
      return true;
}

В этой функции используется другая полезная функция debug_mess. Заменяет функция echo.

Выводит сообщения если $dbg =true;. Если заданна переменная $debug_file путь к файлу с отладочной информацией, то помимо вывода в панель отладки пишет все сообщения в этот файл. Функция удобна для отладки скрипта, после чего можно задав одну переменную $dbg =false; полностью отключить вывод всех сообщений, при этом в файл они всё равно будут добавляться, пока определён к нему путь.

// выдать сообщение в панель отладки и в debug file
function debug_mess($mess)
{
   global $dbg, $textfile, $debug_file;
   // отладочные сообщения
   if ($dbg)
   {
      echo date("\[ d.m.y H:i:s\] ") . $mess . "<br>";
   }
	if (isset($debug_file))
	{
		// создаем сообщение для записи в файл отладки
		$str = date("\[ d.m.y H:i:s\] ") . $mess."\r\n";
		// записываем сообщение
      $textfile->add_string_to_file($debug_file, $str);
	}
}
http://x-scripts.com/

Код: Выделить всё

<?php
$xhe_host ="127.0.0.1:7010";

require("../Templates/xweb_human_emulator.php");

$browser->navigate("http://x-scripts.com");

$app->quit();?>

Аватара пользователя
spaiker
Сообщения: 33
Зарегистрирован: 14 сен 2017, 02:01

Re: Разные полезные функции

Сообщение spaiker » 26 сен 2017, 23:12

Функция случайным образом прокручивает страницу. Зависит от сайтов. Если будет слабо прокручивать, то нужно менять цифры в сторону увелечения вот тут rand(10,25), если наоборот сильно прокручивает за раз, то уменьшаем эти цифры.

// прокрутить страницу случайным образом 
function wheel()
{
   global $mouse; 
   // прокручиваем страницу
   $k_max=mt_rand (1,15);
   for($k=0;$k<$k_max;$k++)
   {
     // крутить вверх или вниз случайным образом
     $down=rand(0,1);
     if($down==0)
        $mouse->send_wheel(-rand(10,25),0,0,0);
     else
        $mouse->send_wheel(rand(10,25),0,0,0);
		
     sleep(rand(1,2));
   }
}

Ответить