[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Ro Man

    Ro Man Elder - Старейшина

    Joined:
    4 Jun 2007
    Messages:
    30
    Likes Received:
    16
    Reputations:
    0
    да, не пойму в чем загвоздка
     
  2. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    499
    Likes Received:
    60
    Reputations:
    53
    PHP:
    делит
     
    #19882 justonline, 20 Jan 2012
    Last edited: 20 Jan 2012
    1 person likes this.
  3. mff

    mff Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    justonline так я и хотел сделать, но получается куча гавнокода. Есть примерчик?
     
  4. Fepsis

    Fepsis Elder - Старейшина

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    mff

    PHP:
    <?php 

    $dir 
    '/home/www/site/multimedia/video/';

    $result getfiles($dir);
    print_r($result);


    // функция сканирования диры

    function getfiles ($dir)
       {

        
    $separator '/';
        
    $namearr = array();
        
    $dirarr scandir($dir);

        foreach (
    $dirarr as $file)
           {
            if (
    $file != "." && $file != "..")
               {
                if(
    is_dir($dir.$file))
                   {
                    
    // не допёр как слить два массива без замены элементов, сделал через темп массив =(
                    
    $temparr getfiles ($dir.$file.$separator);
                    foreach (
    $temparr as $temp)
                    
    $namearr[] = $temp;
                   }

                elseif (
    is_file($dir.$file))
                   {
                    
    $namearr[] = $dir.$file
                   }
               }
           }

        return 
    $namearr
       }



    ?>
     
    #19884 Fepsis, 20 Jan 2012
    Last edited: 20 Jan 2012
    3 people like this.
  5. [none]

    [none] Banned

    Joined:
    22 Nov 2009
    Messages:
    83
    Likes Received:
    26
    Reputations:
    -6
    я вижу тебя фепс!! опять запалился тут !! ааа пхпшник !!

    внесу сюда тру кода хакерского дабы очистить вас всех


    PHP:
    #!/usr/bin/perl    
    use File::Find;    
    find(\&name_files"/home/www/site/multimedia/video/");  
    sub name_files { print "$File::Find::name\n"; }
     
    1 person likes this.
  6. spiderbuber

    spiderbuber New Member

    Joined:
    20 Oct 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Как видите у меня используются одни и те же выражения для двух файлов.. а если их будет 10 и более?...
    Может можно как-то массивом сделать?..
    Например, открыть сразу 2 файла, вписать в каждый свой текст, тачнуть оба одним махом и вывести общий результат на экран.
     
  7. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    499
    Likes Received:
    60
    Reputations:
    53
    PHP:
    <?php 
    function fcreate($name$text$date) {
        
    $h fopen("$name","w"); 
            if (
    fwrite($h,$text))  
            echo 
    "$name - ok <br>"
            else 
            echo 
    "$name - error <br>"
        
    fclose($h); 
        
    touch ("$name"strtotime("$date")); 
    }
    fcreate('file1.php''text1''2012-12-12 12:12:12');
    fcreate('file2.php''text2''2012-12-12 12:12:12');
    ?>
    не?
     
  8. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    499
    Likes Received:
    60
    Reputations:
    53
    Пожалуйста. я там нагнал с двойными ковычками чего-то.
    PHP:
    <?php 
    function fcreate($name$text$date) {
        
    $h fopen($name,"w"); 
            if (
    fwrite($h,$text))  
            echo 
    "$name - ok <br>"
            else 
            echo 
    "$name - error <br>"
        
    fclose($h); 
        
    touch ($namestrtotime($date)); 
    }
    fcreate('file1.php''text1''2012-12-12 12:12:12');
    fcreate('file2.php''text2''2012-12-12 12:12:12');
    ?>
     
  9. spiderbuber

    spiderbuber New Member

    Joined:
    20 Oct 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Это то я поправил сразу :)
     
  10. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    в ПХП5 есть удобная штука:
    PHP:
    <?php
    $it 
    = new RecursiveDirectoryIterator(".");

    foreach(new 
    RecursiveIteratorIterator($it) as $file) {
        echo 
    $file."<br />";
    }
    ?>
    Fepsis ваш код тоже будет работать не ниже чем в 5й ветке из-за scandir, для совместимости с ПХП4 http://php.net/manual/ru/function.readdir.php там же есть и примерчики рекурсии.

    ЗЫ $separator = '/'; не тру) есть константа DIRECTORY_SEPARATOR;
     
    2 people like this.
  11. mff

    mff Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    Fepsis, спасибо! Всё работает отлично, чуть переделал под себя, всё просто чудесно. +
     
  12. spiderbuber

    spiderbuber New Member

    Joined:
    20 Oct 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Вопрос аналогичен: как сделать проще и красивее?

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

    Сейчас делаю через Ж таким образом.
    Проверяем первый файл.
    PHP:
    $filename "./papka/podpapka/file1.php"
    if (
    file_exists($filename)) { 
    echo 
    $filename." - "; print substr(sprintf('%o'fileperms($filename)), -4);

    else { print 
    "Файл $filename не существует"; }
    Смотрим глазками (а хотелось бы автоматом), если запись разрешена, выполняем замену и тачим..
    PHP:
    $filename "./papka/podpapka/file1.php"
    $time_create filemtime($filename);
    $text=file_get_contents($filename);
    $file fopen($filename'w');  
    $text str_replace('?>''1
    ?>'
    $text);
    fwrite($file$text);
    fclose($file);
    $res=touch $filename $time_create );
    echo 
    "Замена в файле $filename - ok";
    Затем смотрю следующий файл и всё по кругу..
    PHP:
    $filename_N "./index.php"
    и т.д.

    Обработать нужно около 10 файлов, по одному очень геморно.
    Как сделать проще и красивее, чтобы обработать все файлы разом? Может функцией или массивом?..
     
    #19892 spiderbuber, 22 Jan 2012
    Last edited: 22 Jan 2012
  13. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    499
    Likes Received:
    60
    Reputations:
    53
    Передай в массив список файлов в директории. и потом пройдись циклом.
    зачем смотреть разрешена ли запись? просто пусть выводит, если случился фейл при таче.
    или через is_writeable($filename)
     
    #19893 justonline, 22 Jan 2012
    Last edited: 22 Jan 2012
  14. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Подскажите передаю запрос через сокеты кодом
    PHP:
        fputs($socket"POST http://$url[host]$url[path]?mode=xml HTTP/1.1\r\n");
        
    fputs($socket"Content-Type: application/x-www-form-urlencoded \r\n");
        
    fputs($socket"Host: $url[host]\r\n");
        
    fputs($socket"Content-length: ".strlen($query)."\r\n");
        
    fputs($socket"Connection: close\r\n");
        
    fputs($socket"\r\n");
        
    fputs($socket"$query");
    Необходимо полученные этим запросом куки записать в переменную и потом использовать их в следующем подключении.
    Как это сделать?
     
  15. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    499
    Likes Received:
    60
    Reputations:
    53
    а чем курл не нравится?
     
  16. Skofield

    Skofield Elder - Старейшина

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    Rastamanka
    PHP:
    preg_match_all("#(Set-Cookie: )(.*?;)#"$page$cookie);
    $cookie implode(""$cookie['2']);
     
  17. spiderbuber

    spiderbuber New Member

    Joined:
    20 Oct 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    justonline, никак не получается реализовать твой совет :(
    Помоги кодом, плиз.
     
  18. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    499
    Likes Received:
    60
    Reputations:
    53
    PHP:
    <?php
    function mod ($filename) {
        
    $time_create filemtime($filename); 
        
    $text=file_get_contents($filename); 
        
    $file fopen($filename'w');   
        
    $text str_replace('?>''1 
        ?>'
    $text); 
        
    fwrite($file$text); 
        
    fclose($file); 
        
    $res=touch $filename $time_create ); 
        echo 
    "Замена в файле $filename - ok <br>"
    }

    $dir '/home/fake.ru/www/dirsc/test/';
    $files scandir($dir);
    //чекаем на существование файлы.
        
    foreach ($files as $file) {
            if (
    file_exists($dir.$file)) {  
                echo 
    $file." - "
                print 
    substr(sprintf('%o'fileperms($dir.$file)), -4);
                echo 
    "<br>"
                    
    //проверяем на запись
                    
    if (is_writable($dir.$file)) {
                        
    mod($dir.$file);                    
                    }
                    else { 
                        echo 
    "Запись в файл $file - не доступна <br>";
                    }
                }  
            else { 
                print 
    "Файл $file не существует";
                }  
        }    
        
    ?>
    Скрипт делает все что просил - сканит диру, выцепляет все файлы и правит. scandir пишет полностью структуру папки. когда будешь выполнять, поймешь к чему я. напильником обратотаешь сам если хочешь. мне лень)
     
    #19898 justonline, 23 Jan 2012
    Last edited: 23 Jan 2012
  19. spiderbuber

    spiderbuber New Member

    Joined:
    20 Oct 2010
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Фишка то в том, что в каждом файле нужно сделать свою замену, а не во всех одинаковую! + каждый файл лежит в разных папках, а не все в одной..
    Всё не так просто как кажется на первый взгляд :)
     
  20. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    499
    Likes Received:
    60
    Reputations:
    53
    ну ты привел свой код сказал что тебе надо - я накидал.
    я не знаю что у тебя там за замуты и по какому принципу. ноэто долго и лениво. скинь в личку подробно что делать надо. если не много писать - помогу
     
Thread Status:
Not open for further replies.