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

Тема в разделе ".:: Готовые решения", создана пользователем tostrss, 5 июн 2009.

Статус темы:
Закрыта.
  1. tostrss

    tostrss

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

    Функция рекурсивно создает в папки до конечной папки.
    К примеру, мы не сможем сделать так
    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, -1PREG_SPLIT_NO_EMPTY);
        foreach (
    $array as $catalog) {
            
    $dir .= $catalog.DIRECTORY_SEPARATOR;
            if (!
    file_exists($dir)) {
                
    $create mkdir($dir);
                if (
    false === $create) {
                    return 
    false;
                }
                @
    chmod($dirintval($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('='$buffer2);
                
    $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('='$buffer2);
                
    $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('='$buffer2);
                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;
    }
     
  2. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Проверка 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;
    }
     
  3. Ragger

    Ragger

    Регистр.:
    14 июн 2008
    Сообщения:
    167
    Симпатии:
    183
    Скрипт разбивки текстового файла на равные части:
    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($source0);
    $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_dir0777);
    else
    chmod($output_dir0777);
    chdir($output_dir);
    while ( !
    feof($source) ) {
    if ( !
    $need ) {
    if ( 
    is_resource($recipient) )
    fclose($recipient);
    $recipient fopen($file_counter++ . '.txt''w');
    $need = ( $parts-- > )
    $part_size
    $last_part_size;
    }
    fputs($recipientfgets($source));
    --
    $need;
    }
    echo 
    'все файлы записаны';
    ?>
     
    sCrypt нравится это.
  4. Urch

    Urch Вебмастер

    Регистр.:
    3 янв 2008
    Сообщения:
    263
    Симпатии:
    73
    скрипт для поиска урлов по фильтру доменной зоны
    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 />";
    }
    }
    ?>
    спасибо dig555
     
    Думаю нравится это.
  5. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Индусский код. ф-я count($domens) у тебя будет вызываться с каждым прохождением цикла. И вообще для проверки доменной зоны надо использовать preg_match
     
Статус темы:
Закрыта.