1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Как разархивировать средствами php в сборке Денвера или ТопСервера

Тема в разделе "Web Coding", создана пользователем G-Null, 2 дек 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. G-Null

    G-Null

    Регистр.:
    6 сен 2007
    Сообщения:
    180
    Симпатии:
    21
    Вобще задача такова:
    необходимо делать много копий одной папки(в папке много файлов и вложенных папок). Но, что-то ничего не удалось найти по теме копирования целых каталогов.
    Решил уже делать сначала архив, копировать, а потом разархивировать . Но также начал искать: все примеры, что встречал на ТопСервере и денвере не работали.

    Подскажите, пожалуйста, каким образом можно скопировать папку(либо распаковать архив) на подобных сборках ?

    Буду очень вам благодарен :thenks:
     
  2. RomAndry

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    примерно так:
    PHP:
    $dir 'catalog';  // что
    $to 'new/place'// куда
    $res opendir ($dir);
    while ((
    $d readdir ($res)) !== false ) {
      if ( 
    $d !== '.' AND $d !== '..' ) {  // проверка на корни
        
    if ( !is_dir ($dir.'/'.$d) ) {
          
    copy ($dir.'/'.$d$to.'/'.$d);
        }else {
          
    copydir ($dir.'/'.$d$to.'/'.$d);
        }
      }
    }
    closedir ($res);

     
  3. ooosumr

    ooosumr Постоялец

    Регистр.:
    28 июн 2007
    Сообщения:
    105
    Симпатии:
    15
    вот эту штуку пробовал?
    http://ifolder.ru/4383801
    Создаем zip-архив, загружаем его на сервер,
    а PHP Unzipper в считанные секунды его распаковывает.
    Особенно полезен PHP Unzipper будет при отсутствии ftp-доступа к сайту!
     
    FaLL3N и G-Null нравится это.
  4. G-Null

    G-Null

    Регистр.:
    6 сен 2007
    Сообщения:
    180
    Симпатии:
    21
    RomAndry, я быть может что-то недопонял -в пхп я не очень... но ф-цию copydir() ты сам придумал ? Её мне где брать то ?


    В-общем искал я, искал и в итоге нашёл, как часто это бывает, буквально под носом, на ru2php.net.
    на этой страничке
    http://ru2.php.net/manual/ru/function.copy.php

    для нубов, почти таких же как и я, разделю этот код на две части:

    Значит эту часть мы пихаем в только что созданный файлик copydirr.inc.php
    PHP:
    <?PHP
      
    // loc1 is the path on the computer to the base directory that may be moved
    define('loc1''T:/home/localhost'true);

      
    // copy a directory and all subdirectories and files (recursive)
      // void dircpy( str 'source directory', str 'destination directory' [, bool 'overwrite existing files'] )
    function dircpy($source$dest$overwrite false){

      if(
    $handle opendir(loc1 $source)){         // if the folder exploration is sucsessful, continue
        
    while(false !== ($file readdir($handle))){ // as long as storing the next file to $file is successful, continue
          
    if($file != '.' && $file != '..'){
            
    $path $source '/' $file;
            if(
    is_file(loc1 $path)){
              if(!
    is_file(loc1 $dest '/' $file) || $overwrite)
                if(!@
    copy(loc1 $pathloc1 $dest '/' $file)){
                  echo 
    '<font color="red">File ('.$path.') could not be copied, likely a permissions problem.</font>';
                }
            } elseif(
    is_dir(loc1 $path)){
              if(!
    is_dir(loc1 $dest '/' $file))
                
    mkdir(loc1 $dest '/' $file); // make subdirectory before subdirectory is copied
              
    dircpy($path$dest '/' $file$overwrite); //recurse!
            
    }
          }
        }
        
    closedir($handle);
      }
    // end of dircpy()
    ?>

    This new function will be in 0.9.7 (the current release of File Manage) which has just been released 2/2/06.
    Hope this helps some people. 
    makarenkoa at ukrpost dot net
    26-Jul-2005 03:58 
    A function that copies contents of source directory to destination directory and sets up file modes.
    It may be handy to install the whole site on hosting.
    <?php
    // copydirr.inc.php
    /*
    26.07.2005
    Author: Anton Makarenko
        makarenkoa at ukrpost dot net
        webmaster at eufimb dot edu dot ua
    */
    function copydirr($fromDir,$toDir,$chmod=0757,$verbose=false)
    /*
        copies everything from directory $fromDir to directory $toDir
        and sets up files mode $chmod
    */
    {
    //* Check for some errors
    $errors=array();
    $messages=array();
    if (!
    is_writable($toDir))
        
    $errors[]='target '.$toDir.' is not writable';
    if (!
    is_dir($toDir))
        
    $errors[]='target '.$toDir.' is not a directory';
    if (!
    is_dir($fromDir))
        
    $errors[]='source '.$fromDir.' is not a directory';
    if (!empty(
    $errors))
        {
        if (
    $verbose)
            foreach(
    $errors as $err)
                echo 
    '<strong>Error</strong>: '.$err.'<br />';
        return 
    false;
        }
    //*/
    $exceptions=array('.','..');
    //* Processing
    $handle=opendir($fromDir);
    while (
    false!==($item=readdir($handle)))
        if (!
    in_array($item,$exceptions))
            {
            
    //* cleanup for trailing slashes in directories destinations
            
    $from=str_replace('//','/',$fromDir.'/'.$item);
            
    $to=str_replace('//','/',$toDir.'/'.$item);
            
    //*/
            
    if (is_file($from))
                {
                if (@
    copy($from,$to))
                    {
                    
    chmod($to,$chmod);
                    
    touch($to,filemtime($from)); // to track last modified time
                    
    $messages[]='File copied from '.$from.' to '.$to;
                    }
                else
                    
    $errors[]='cannot copy file from '.$from.' to '.$to;
                }
            if (
    is_dir($from))
                {
                if (@
    mkdir($to))
                    {
                    
    chmod($to,$chmod);
                    
    $messages[]='Directory created: '.$to;
                    }
                else
                    
    $errors[]='cannot create directory '.$to;
                
    copydirr($from,$to,$chmod,$verbose);
                }
            }
    closedir($handle);
    //*/
    //* Output
    if ($verbose)
        {
        foreach(
    $errors as $err)
            echo 
    '<strong>Error</strong>: '.$err.'<br />';
        foreach(
    $messages as $msg)
            echo 
    $msg.'<br />';
        }
    //*/
    return true;
    }

    ?>
    а эту в любой другой файл, то есть прописываем путь до файла с функцией и собсна вызываем её

    PHP:
    <?php
    require('./copydirr.inc.php');
    copydirr('./catalog','T:/home/localhost/copy/new',0777,true);
    ?>

    работает на ура
     
Статус темы:
Закрыта.