una subir servidor reemplazar otro otra manejo ejemplos ejemplo crear copiar contenido carpeta archivos archivo php

subir - Copie todo el contenido de un directorio a otro usando php



php copiar archivo de un servidor a otro (10)

Como se describe aquí , este es otro enfoque que también se ocupa de los enlaces simbólicos:

/** * Copy a file, or recursively copy a folder and its contents * @author Aidan Lister <[email protected]> * @version 1.0.1 * @link http://aidanlister.com/2004/04/recursively-copying-directories-in-php/ * @param string $source Source path * @param string $dest Destination path * @param int $permissions New folder creation permissions * @return bool Returns true on success, false on failure */ function xcopy($source, $dest, $permissions = 0755) { // Check for symlinks if (is_link($source)) { return symlink(readlink($source), $dest); } // Simple copy for a file if (is_file($source)) { return copy($source, $dest); } // Make destination directory if (!is_dir($dest)) { mkdir($dest, $permissions); } // Loop through the folder $dir = dir($source); while (false !== $entry = $dir->read()) { // Skip pointers if ($entry == ''.'' || $entry == ''..'') { continue; } // Deep copy directories xcopy("$source/$entry", "$dest/$entry", $permissions); } // Clean up $dir->close(); return true; }

Traté de copiar todo el contenido del directorio a otra ubicación usando

copy ("old_location/*.*","new_location/");

pero dice que no puede encontrar la transmisión, verdadero *.* no se encuentra.

Cualquier otra manera

Gracias Dave


Como se dijo en otro lugar, la copy solo funciona con un único archivo como fuente y no como un patrón. Si desea copiar por patrón, use glob para determinar los archivos, luego ejecute copy. Sin embargo, esto no copiará los subdirectorios ni creará el directorio de destino.

function copyToDir($pattern, $dir) { foreach (glob($pattern) as $file) { if(!is_dir($file) && is_readable($file)) { $dest = realpath($dir . DIRECTORY_SEPARATOR) . basename($file); copy($file, $dest); } } } copyToDir(''./test/foo/*.txt'', ''./test/bar''); // copies all txt files


Copio todo el directorio por SPL Directory Iterator.

function recursiveCopy($source, $destination) { if (!file_exists($destination)) { mkdir($destination); } $splFileInfoArr = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); foreach ($splFileInfoArr as $fullPath => $splFileinfo) { //skip . .. if (in_array($splFileinfo->getBasename(), [".", ".."])) { continue; } //get relative path of source file or folder $path = str_replace($source, "", $splFileinfo->getPathname()); if ($splFileinfo->isDir()) { mkdir($destination . "/" . $path); } else { copy($fullPath, $destination . "/" . $path); } } } #calling the function recursiveCopy(__DIR__ . "/source", __DIR__ . "/destination");


Gracias a Félix Kling por su excelente respuesta que utilicé con gratitud en mi código. Ofrezco una pequeña mejora de un valor de retorno booleano para informar de éxito o fracaso:

function recurse_copy($src, $dst) { $dir = opendir($src); $result = ($dir === false ? false : true); if ($result !== false) { $result = @mkdir($dst); if ($result === true) { while(false !== ( $file = readdir($dir)) ) { if (( $file != ''.'' ) && ( $file != ''..'' ) && $result) { if ( is_dir($src . ''/'' . $file) ) { $result = recurse_copy($src . ''/'' . $file,$dst . ''/'' . $file); } else { $result = copy($src . ''/'' . $file,$dst . ''/'' . $file); } } } closedir($dir); } } return $result; }


La mejor solución es!

<?php $src = "/home/www/domain-name.com/source/folders/123456"; $dest = "/home/www/domain-name.com/test/123456"; shell_exec("cp -r $src $dest"); echo "<H3>Copy Paste completed!</H3>"; //output when done ?>


Mi versión podada de @Kzoty responde. Gracias Kzoty.

Uso

Helper::copy($sourcePath, $targetPath); class Helper { static function copy($source, $target) { if (!is_dir($source)) {//it is a file, do a normal copy copy($source, $target); return; } //it is a folder, copy its files & sub-folders @mkdir($target); $d = dir($source); $navFolders = array(''.'', ''..''); while (false !== ($fileEntry=$d->read() )) {//copy one by one //skip if it is navigation folder . or .. if (in_array($fileEntry, $navFolders) ) { continue; } //do copy $s = "$source/$fileEntry"; $t = "$target/$fileEntry"; self::copy($s, $t); } $d->close(); } }


Parece que copiar solo maneja archivos individuales . Aquí hay una función para copiar recursivamente que encontré en esta nota en la página de documentación de copia :

<?php function recurse_copy($src,$dst) { $dir = opendir($src); @mkdir($dst); while(false !== ( $file = readdir($dir)) ) { if (( $file != ''.'' ) && ( $file != ''..'' )) { if ( is_dir($src . ''/'' . $file) ) { recurse_copy($src . ''/'' . $file,$dst . ''/'' . $file); } else { copy($src . ''/'' . $file,$dst . ''/'' . $file); } } } closedir($dir); } ?>


copy () solo funciona con archivos.

Tanto la copia de DOS como los comandos de Unix cp se copiarán de forma recursiva, por lo que la solución más rápida es simplemente desembolsarlos y usarlos. p.ej

`cp -r $src $dest`;

De lo contrario, necesitará usar el opendir / readdir o scandir para leer el contenido del directorio, repetir los resultados y si is_dir devuelve verdadero para cada uno, recurse en él.

p.ej

function xcopy($src, $dest) { foreach (scandir($src) as $file) { if (!is_readable($src . ''/'' . $file)) continue; if (is_dir($src .''/'' . $file) && ($file != ''.'') && ($file != ''..'') ) { mkdir($dest . ''/'' . $file); xcopy($src . ''/'' . $file, $dest . ''/'' . $file); } else { copy($src . ''/'' . $file, $dest . ''/'' . $file); } } }


<?php function copy_directory( $source, $destination ) { if ( is_dir( $source ) ) { @mkdir( $destination ); $directory = dir( $source ); while ( FALSE !== ( $readdirectory = $directory->read() ) ) { if ( $readdirectory == ''.'' || $readdirectory == ''..'' ) { continue; } $PathDir = $source . ''/'' . $readdirectory; if ( is_dir( $PathDir ) ) { copy_directory( $PathDir, $destination . ''/'' . $readdirectory ); continue; } copy( $PathDir, $destination . ''/'' . $readdirectory ); } $directory->close(); }else { copy( $source, $destination ); } } ?>

de la última 4ta línea, hazlo

$source = ''wordpress'';//i.e. your source path

y

$destination =''b'';


function full_copy( $source, $target ) { if ( is_dir( $source ) ) { @mkdir( $target ); $d = dir( $source ); while ( FALSE !== ( $entry = $d->read() ) ) { if ( $entry == ''.'' || $entry == ''..'' ) { continue; } $Entry = $source . ''/'' . $entry; if ( is_dir( $Entry ) ) { full_copy( $Entry, $target . ''/'' . $entry ); continue; } copy( $Entry, $target . ''/'' . $entry ); } $d->close(); }else { copy( $source, $target ); } }