Avatar billede rjs Nybegynder
15. november 2007 - 15:01 Der er 4 kommentarer

Kopiering af mappe på server. Har brug for Simpel Script.

Hej alle sammen.

jeg har brug for et script som kan kopiere en mappe fra et sted på min server til et andet sted på min server.

min mappe struktur ser således ud:

root
|
+"manager"+"new_doc"+"basic"
|
+"documents"

Jeg skal kopiere mappen "basic" fra "new_doc" til mappen "documents" med alt indhold samtidig med at jeg skal kunne omdøbe mappen.

er der nogen der kan hjælpe mig med lidt MEGET simpel source-code?
Avatar billede rjs Nybegynder
15. november 2007 - 15:06 #1
Nå ja: Jeg er ikke ret kendt i PHP så det gør ikke noget hvis der er udførlige kommentarer med der beskriver hvordan jeg tilpasser hvis jeg skal bruge koden i en anden source. Men det er self ikke et krav.
Avatar billede jakobdo Ekspert
17. november 2007 - 10:52 #2
Har på siden kan du finde dircopy() måske den kan hjælpe: http://dk2.php.net/copy
Avatar billede rjs Nybegynder
19. november 2007 - 09:55 #3
Har været inde på siden og kigge. Mit problem er at jeg skal se fungerende kode som jeg skal sætte ind og få til at virke før jeg forstår og lærer (learning by doing what you have done).

Hvis du kan fremstille noget kode, der virker, som jeg kan kigge på og afprøve ville det være en stor hjælp.
Avatar billede jakobdo Ekspert
19. november 2007 - 10:57 #4
<?php
    /* Copies a dir to another. Optionally caching the dir/file structure, used to synchronize similar destination dir (web farm).
    *
    * @param $src_dir str Source directory to copy.
    * @param $dst_dir str Destination directory to copy to.
    * @param $verbose bool Show or hide file copied messages
    * @param $use_cached_dir_trees bool Set to true to cache src/dst dir/file structure. Used to sync to web farms
    *                    (avoids loading the same dir tree in web farms; making sync much faster).
    * @return Number of files copied/updated.
    * @example
    *    To copy a dir:
    *        dircopy("c:\max\pics", "d:\backups\max\pics");
    *
    *    To sync to web farms (webfarm 2 to 4 must have same dir/file structure (run once with cache off to make sure if necessary)):
    *        dircopy("//webfarm1/wwwroot", "//webfarm2/wwwroot", false, true);
    *        dircopy("//webfarm1/wwwroot", "//webfarm3/wwwroot", false, true);
    *        dircopy("//webfarm1/wwwroot", "//webfarm4/wwwroot", false, true);
    */
    function dircopy($src_dir, $dst_dir, $verbose = false, $use_cached_dir_trees = false)
    { 
        static $cached_src_dir;
        static $src_tree;
        static $dst_tree;
        $num = 0;

        if (($slash = substr($src_dir, -1)) == "\\" || $slash == "/") $src_dir = substr($src_dir, 0, strlen($src_dir) - 1);
        if (($slash = substr($dst_dir, -1)) == "\\" || $slash == "/") $dst_dir = substr($dst_dir, 0, strlen($dst_dir) - 1);

        if (!$use_cached_dir_trees || !isset($src_tree) || $cached_src_dir != $src_dir)
        {
            $src_tree = get_dir_tree($src_dir);
            $cached_src_dir = $src_dir;
            $src_changed = true;
        }
        if (!$use_cached_dir_trees || !isset($dst_tree) || $src_changed)
            $dst_tree = get_dir_tree($dst_dir);
        if (!is_dir($dst_dir)) mkdir($dst_dir, 0777, true);

          foreach ($src_tree as $file => $src_mtime)
        {
            if (!isset($dst_tree[$file]) && $src_mtime === false) // dir
                mkdir("$dst_dir/$file");
            elseif (!isset($dst_tree[$file]) && $src_mtime || isset($dst_tree[$file]) && $src_mtime > $dst_tree[$file])  // file
            {
                if (copy("$src_dir/$file", "$dst_dir/$file"))
                {
                    if($verbose) echo "Copied '$src_dir/$file' to '$dst_dir/$file'<br>\r\n";
                    touch("$dst_dir/$file", $src_mtime);
                    $num++;
                } else
                    echo "<font color='red'>File '$src_dir/$file' could not be copied!</font><br>\r\n";
            }     
        }

        return $num;
    }

    /* Creates a directory / file tree of a given root directory
    *
    * @param $dir str Directory or file without ending slash
    * @param $root bool Must be set to true on initial call to create new tree.
    * @return Directory & file in an associative array with file modified time as value.
    */
    function get_dir_tree($dir, $root = true)
    {
        static $tree;
        static $base_dir_length;

        if ($root)
        {
            $tree = array();
            $base_dir_length = strlen($dir) + 1;
        }

        if (is_file($dir))
        {
            //if (substr($dir, -8) != "/CVS/Tag" && substr($dir, -9) != "/CVS/Root"  && substr($dir, -12) != "/CVS/Entries")
            $tree[substr($dir, $base_dir_length)] = filemtime($dir);
        } elseif (is_dir($dir) && $di = dir($dir)) // add after is_dir condition to ignore CVS folders: && substr($dir, -4) != "/CVS"
        {
            if (!$root) $tree[substr($dir, $base_dir_length)] = false;
            while (($file = $di->read()) !== false)
                if ($file != "." && $file != "..")
                    get_dir_tree("$dir/$file", false);
            $di->close();
        }

        if ($root)
            return $tree;   
    }
?>

Og så: dircopy('/dir1', /nyt_dir1',true);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester