tostrss
Мой дом здесь!
- Регистрация
- 16 Окт 2007
- Сообщения
- 768
- Реакции
- 219
- Автор темы
- #1
Предлагаю в этой теме собирать полезные скрипты/функции/алгоритмы, которые могут понадобится всем.
Просьба выкладывать только свои скрипты, с подробным описанием и по возможности с примерами.
Функция рекурсивно создает в папки до конечной папки.
К примеру, мы не сможем сделать так
и нам бы пришлось создавать каждую папку отдельно.
Эта функция решает эту проблему.
На вход подаем путь и нужные права.
Добавлено через 5 минут
Бывает что нужно пропарсить какой-нить html тэг, обычно все используют регулярки, но бывает иногда такие случаи когда тэг не поддается регулярке и поэтому приходится регулярку править и т.д.
Я предлагаю свое решение по парсингу тэга.
[+] Я не использую регулярки
[+] Парсинг и выравнивание идет вместе и всё одним циклом.
[+] Парсит даже кривые тэги
Пример использования:
а также, как я и обещал, пропарсит кривые тэги такие как:
А
Просьба выкладывать только свои скрипты, с подробным описанием и по возможности с примерами.
Функция рекурсивно создает в папки до конечной папки.
К примеру, мы не сможем сделать так
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;
}