Полезные скрипты

Статус
В этой теме нельзя размещать новые ответы.

tostrss

Мой дом здесь!
Регистрация
16 Окт 2007
Сообщения
768
Реакции
219
Предлагаю в этой теме собирать полезные скрипты/функции/алгоритмы, которые могут понадобится всем.
Просьба выкладывать только свои скрипты, с подробным описанием и по возможности с примерами.

Функция рекурсивно создает в папки до конечной папки.
К примеру, мы не сможем сделать так
PHP:
mkdir('test/1/2/3/');
и нам бы пришлось создавать каждую папку отдельно.
Эта функция решает эту проблему.
На вход подаем путь и нужные права.
PHP:
function Rmkdir($path, $chmod) {
    $dir = DIRECTORY_SEPARATOR;
    if (empty($path) || false === $path) {
        return false;
    }
    $array = preg_split('%/|\\\%i', $path, -1, PREG_SPLIT_NO_EMPTY);
    foreach ($array as $catalog) {
        $dir .= $catalog.DIRECTORY_SEPARATOR;
        if (!file_exists($dir)) {
            $create = mkdir($dir);
            if (false === $create) {
                return false;
            }
            @chmod($dir, intval($chmod,8));
        }
    }
    return true;
}

Добавлено через 5 минут
Бывает что нужно пропарсить какой-нить html тэг, обычно все используют регулярки, но бывает иногда такие случаи когда тэг не поддается регулярке и поэтому приходится регулярку править и т.д.
Я предлагаю свое решение по парсингу тэга.

[+] Я не использую регулярки
[+] Парсинг и выравнивание идет вместе и всё одним циклом.
[+] Парсит даже кривые тэги

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

PHP:
print_r(explode_tag('<input type="text" name="space" value="para rara pam-pam" />'));

а также, как я и обещал, пропарсит кривые тэги такие как:

PHP:
print_r(explode_tag('<input type="text"NAME=space value=\'para rara pam-pam\' />'));


PHP:
print_r(explode_tag('<input type="text"NAME=space value=\'para rara pam-pam\'OnCliCk=\'this.value="f"\' />'));
А
PHP:
function explode_tag($tag) {

	$tag = trim($tag);

	if ($tag[0] != '<') {
		return false;
	}


	$symbol     = '';
	$i          = 1;
	$arrayTag   = array();
	$length     = strlen($tag);
	$buffer     = '';
	$eqwait     = false;
	$spacefound = false;

	while ($i < $length) {
		if (($tag[$i] == '"' || $tag[$i] == '\'') && (!isset($tag[$i - 1]) || $tag[$i - 1] != '\\')) {
			if (!empty($symbol) && $symbol != $tag[$i]) {
				$buffer .= $tag[$i];
			}
			$char = $tag[$i];
			if (!empty($symbol) && isset($tag[$i + 1]) && !ctype_space($tag[$i + 1])) {
				$tag[$i] = ' ';
				--$i;
			}
			if (empty($symbol)) {
				$symbol = $char;
			} elseif ($symbol == $char) {
				$symbol = '';
			}
			if (!isset($tag[$i + 1])) {
				if (empty($buffer)) {
					++$i;
					continue;
				}
			$temp           = explode('=', $buffer, 2);
			$key            = strtolower($temp[0]);
			$arrayTag[$key] = (isset($temp[1])) ? $temp[1] : $temp[0];
			}
		} elseif (!empty($symbol)) {
			$buffer .= $tag[$i];
		} else if (empty($symbol) && ($tag[$i] == '/' || $tag[$i] == '>' || !isset($tag[$i + 1]))) {
			if (empty($buffer)) {
				++$i;
				continue;
			}
			$temp           = explode('=', $buffer, 2);
			$key            = strtolower($temp[0]);
			$arrayTag[$key] = (isset($temp[1])) ? $temp[1] : $temp[0];

			break;
		} else if (empty($symbol) && (ctype_alnum($tag[$i]) || $tag[$i] == '-') && true === $eqwait && true === $spacefound) {
			if (empty($buffer)) {
				++$i;
				continue;
			}
			$temp = explode('=', $buffer, 2);
			if (!isset($arrayTag['tag'])) {
				$arrayTag['tag']    = strtolower($temp[0]);
			} else {
				$key                = strtolower($temp[0]);
				$arrayTag[$key] = (isset($temp[1])) ? $temp[1] : $temp[0];
			}

			$buffer     = '';
			$eqwait     = false;
			$spacefound = false;
			--$i;
		} else if (empty($symbol) && !ctype_space($tag[$i]) && $tag[$i] != '=') {
			$buffer .= $tag[$i];
			$eqwait  = true;
		} else if (empty($symbol) && $tag[$i] == '=') {
			$buffer .= $tag[$i];
		} else if (empty($symbol) && ctype_space($tag[$i])) {
			$spacefound = true;
		}
		$i++;
	}
	if (empty($arrayTag)) {
		$arrayTag = false;
	}
	return $arrayTag;
}
 
Проверка IP адреса

Функция для проверки IP адреса, внешний ип задается вручную.

пример:

PHP:
$config['allowip']  = array(
                            '127.0.0.1',    // localhost
                            '77.45.*.*',    // domolink
                            '216.38.4.5'
                            );

if (false === checkIp($_SERVER['REMOTE_ADDR'], $config['allowip'])) {
	exit('Access Denied');
}
PHP:
function checkIp($ip, $array) {
	//$ip = preg_replace('%([^0-9.*]+)%i', '', $ip);
	if (!preg_match('%^([0-9.*]{9,15})$%iD', $ip)) {
		return false;
	}
	$bit1 = explode('.', $ip);            // Массив октет из проверяемого ип адресса
	foreach ($array as $checkedIp) {
		if (false === strpos($checkedIp, '*') && $ip == $checkedIp) {
			return true;
		}
		$bit2 = explode('.', $checkedIp); // Массив октет из ип адресса для сверки
		for ($i = 0; $i < 4; ++$i) {
			if ($bit2[$i] == '*' || $bit2[$i] == $bit1[$i]) {
				if ($i == 3) {
					return true;
				}
				continue;
			} else {
				break;
			}
		}
	}
	return false;
}
 
Скрипт разбивки текстового файла на равные части:
PHP:
<?php
$file = 'test.txt';
$parts = 5;
$output_dir = 'output';

$lines = 0;
$source = fopen($file, 'r');
while ( !feof($source) ) {
fgets($source);
++$lines;
}
echo 'источник содержит ', $lines, ' строк<br /><br />';
fseek($source, 0);
$part_size = ($lines – ($lines % $parts)) / $parts;
$last_part_size = $part_size + ($lines % $parts);
$file_counter = 1;
$need = null;
if ( !is_dir($output_dir) )
mkdir($output_dir, 0777);
else
chmod($output_dir, 0777);
chdir($output_dir);
while ( !feof($source) ) {
if ( !$need ) {
if ( is_resource($recipient) )
fclose($recipient);
$recipient = fopen($file_counter++ . '.txt', 'w');
$need = ( $parts-- > 1 )
? $part_size
: $last_part_size;
}
fputs($recipient, fgets($source));
--$need;
}
echo 'все файлы записаны';
?>
 
скрипт для поиска урлов по фильтру доменной зоны
PHP:
 <?
$file = "sites.txt";
$domens=file($file);
for($i=0; $i<count($domens); $i++){
$domen=trim($domens[$i]);
if(substr_count($domen,".ru")!=0){
echo "Домен ".$domen." в зоне ru<br />";
}
}
?>
спасибо Для просмотра ссылки Войди или Зарегистрируйся
 
скрипт для поиска урлов по фильтру доменной зоны
PHP:
 <?
$file = "sites.txt";
$domens=file($file);
for($i=0; $i<count($domens); $i++){
$domen=trim($domens[$i]);
if(substr_count($domen,".ru")!=0){
echo "Домен ".$domen." в зоне ru<br />";
}
}
?>
спасибо Для просмотра ссылки Войди или Зарегистрируйся

Индусский код. ф-я count($domens) у тебя будет вызываться с каждым прохождением цикла. И вообще для проверки доменной зоны надо использовать preg_match
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху