Ben kullanarak başka bir yere dizinin tüm içeriğini kopyalamak için çalıştı
copy ("old_location/*.*","new_location/");
ama bu akımı, gerçek *.*
bulunmazsa bulamadığını söylüyor.
Başka bir şekilde
Thanks Dave
O kopya only işlemek görünüyor single files. İşte kopyalama için bir işlev özyinelemeli ben üzerinde bulunan bir copy documentation page:
<?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);
}
?>
Burada da sembolik önemser başka bir yaklaşımdır:
/**
* Copy a file, or recursively copy a folder and its contents
* @param string $source Source path
* @param string $dest Destination path
* @param string $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");
}
// Clean up
$dir->close();
return true;
}
copy () sadece dosyaları ile çalışır.
DOS kopyalama ve Unix cp komutları Hem yinelemeli kopyalar - böylece hızlı çözüm ödemek ve bu kullanmak için sadece budur. örneğin
`cp -r $src $dest`;
Is_dir her döndürür true, aksi takdirde sonuçlarına boyunca yineleme, opendir
/ readdir
veya scandir
dizinin içeriğini okumak için kullanmanız gereken ve olacak bir, içine özyineleme.
örneğin
function xcopy($src, $dest) {
foreach (scandir($src) as $file) {
if (!is_readable($src . '/' . $file)) continue;
if (is_dir($file) && ($file != '.') && ($file != '..') ) {
mkdir($dest . '/' . $file);
xcopy($src . '/' . $file, $dest . '/' . $file);
} else {
copy($src . '/' . $file, $dest . '/' . $file);
}
}
}
C.
<?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 );
}
}
?>
Son 4. satırından, bu hale
$source = 'wordpress';//i.e. your source path
ve
$destination ='b';
Gibi başka bir yerde dedi, copy
sadece kaynak değil, bir model için tek bir dosya ile çalışır. Eğer desen kopyalamak kopyasını çalıştırmak sonra, glob
dosyaları belirlemek için kullanmak istiyorsanız. Bu olsa alt dizinleri kopyalamak değil, ne de hedef dizini yaratacaktır.
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
My pruned version of @Kzoty answer. Thank you Kzoty.
Kullanım
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();
}
}
Tam teşekkürler minnetle kodu kullanmış onun mükemmel cevap Felix Kling gitmek gerekir. Ben başarı veya başarısızlık rapor bir boolean dönüş değerinin küçük bir geliştirme sunuyoruz:
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 = recurseCopy($src . '/' . $file,$dst . '/' . $file);
}
else {
$result = copy($src . '/' . $file,$dst . '/' . $file);
}
}
}
closedir($dir);
}
}
return $result;
}