Copia ricorsiva

filomeni

Moderatore
Membro dello Staff
MOD
14 Mag 2006
1.054
6
38
53
Roseto degli Abruzzi (TE)
www.sitiweb.cloud
Salve,
ho preso dal sito un programma PHP per eseguire la copia di una cartella e delle sue sotto cartelle e copiarle in una nuova directori ma non riesco a farlo funzionare!
Le uniche variabili da impostare sono la sorgente (URL) dove prendere il contenuto da copiare e la destinazione dove copiare il tutto.
Da premettere che la cartella di destinazione ha permesso 777 e gli URL sono esatti.
Lanciando lo script non mi genera nessun errore ma di fatto la copia non viene eseguita!
Di seguito riporto lo script così come l'ho scritto:
PHP:
<?php
if(!empty($_GET)){
$id_isc=$_GET['id_isc'];
}

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

header("Location: http://www.e-bookartist.com/mkeb/$id_isc/admin/login.php");
?>

Qualcuno mi aiuta a capire il perchè?

Grazie in anticipo Maurizio
 
Ultima modifica di un moderatore:

MMDesign

Utente Attivo
15 Apr 2014
76
0
0
Google Inc.
www.mmwebservice.it
Tutto normale perchè prima di tutto non c'è un'istruzione nel codice che ti permette di capire dove sta l'errore e seconda cosa la funzione php "display_errors" e su 0 di default. Infatti qualsiasi azienda di hosting come aruba per citare un'esempio mette a disposizione un registro globale su tutte le notifiche per gli errori.

Nel tuo caso però possiamo provvedere a modificare il codice visto che c'è la funzione If/Else e modificare alcune cose.

Prima di passare al codice permettimi di avvisarti che l'hosting deve essere linux per gestire i permessi delle cartelle ed invece di creare io il codice da zero ho visto che sul sito MrWebMaster c'era già disponibile il codice da poter studiare che ti riporto qui sotto :

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

Per farlo funzionare devi usare :

PHP:
// cartella da copiare
$s = '/var/www/sito';

// destinazione
$c = '/backup/sito';

// copia ricorsiva di tutto il contenuto della cartella sorgente
copia_tutto($s,$c);

Per avere un riscontro dell'avvenuto funzionamento possiamo utilizzare if/else che nell'articolo non trovi :

PHP:
if ( copia_tutto($s, $c) ) {
        echo "COPIA EFFETTUATA!";
    }else{
        echo "ERRORE NEL TENTATIVO DI COPIARE IL FILE.";
    }
 
Ultima modifica di un moderatore:

filomeni

Moderatore
Membro dello Staff
MOD
14 Mag 2006
1.054
6
38
53
Roseto degli Abruzzi (TE)
www.sitiweb.cloud
Tutto normale perchè prima di tutto non c'è un'istruzione nel codice che ti permette di capire dove sta l'errore e seconda cosa la funzione php "display_errors" e su 0 di default. Infatti qualsiasi azienda di hosting come aruba per citare un'esempio mette a disposizione un registro globale su tutte le notifiche per gli errori.

Nel tuo caso però possiamo provvedere a modificare il codice visto che c'è la funzione If/Else e modificare alcune cose.

Prima di passare al codice permettimi di avvisarti che l'hosting deve essere linux per gestire i permessi delle cartelle ed invece di creare io il codice da zero ho visto che sul sito MrWebMaster c'era già disponibile il codice da poter studiare che ti riporto qui sotto :

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

Per farlo funzionare devi usare :

Codice:
// cartella da copiare
$s = '/var/www/sito';

// destinazione
$c = '/backup/sito';

// copia ricorsiva di tutto il contenuto della cartella sorgente
copia_tutto($s,$c);

Per avere un riscontro dell'avvenuto funzionamento possiamo utilizzare if/else che nell'articolo non trovi :

Codice:
if ( copia_tutto($s, $c) ) {
        echo "COPIA EFFETTUATA!";
    }else{
        echo "ERRORE NEL TENTATIVO DI COPIARE IL FILE.";
    }

Ciao,
Grazie per la risposta sei stato molto gentile.
Vorrei delle delucidazioni, se possibile.
L'hosting che utilizzo è comunque LINUX e gestisco tranquillamente i permessi
e nel mio caso ho settato la cartella "mkeb" a 777
Poi non ho ben capito come devo usare il codice per far funzionare il tutto
Questo è quello che ho fatto:
PHP:
<?php
if(!empty($_GET)){
$id_isc=$_GET['id_isc'];
}
$id_isc="375";//rendo la variabile nota per chiamare lo script senza GET in fase di test
$s="/free_ebook";
$c="/mkeb/$id_isc";
function copia_tutto($s,$c) {
  foreach (scandir($s) as $file) {
    if (!is_readable($s.'/'.$file)) continue;
    if (is_dir($file) && ($file!='.') && ($file!='..') ) {
      mkdir($c . '/' . $file);
      copia_tutto($s.'/'.$file, $c.'/'.$file);
    } else copy($s.'/'.$file, $c.'/'.$file);
  }
}
if ( copia_tutto($s, $c) ) {
        echo "COPIA EFFETTUATA!";
    }else{
        echo "ERRORE NEL TENTATIVO DI COPIARE IL FILE.";
    }
?>

In questo caso si genera il seguente errore:

Warning: scandir(/free_ebook/): failed to open dir: No such file or directory in /web/htdocs/www.e-bookartist.com/home/php/mkeb.php on line 9

Warning: scandir(): (errno 2): No such file or directory in /web/htdocs/www.e-bookartist.com/home/php/mkeb.php on line 9

Warning: Invalid argument supplied for foreach() in /web/htdocs/www.e-bookartist.com/home/php/mkeb.php on line 9
ERRORE NEL TENTATIVO DI COPIARE IL FILE.
----------------------------------------------
Ma la cartella "sorgente" esiste e i permessi sono a 777
HELP
Attendo cordiale riscontro
 
Ultima modifica di un moderatore:
Discussioni simili
Autore Titolo Forum Risposte Data
R Dubbi copia sito CMS (Content Management System) 2
P Funzione copia multipla. Javascript 2
J Info per copia sfondo Photoshop 2
Beppe2 [Javascript] Tasto seleziona e copia Javascript 4
W [Prestashop] Non accedo più dopo la copia da remoto a locale E-Commerce 7
M [Javascript] Copia incolla con alert Javascript 0
G [HTML] copia il TAG META che trovi sotto ed incollalo sotto il tag <HEAD> HTML e CSS 9
Max 1 Copia articolo Leggi, Normative e Fisco 4
C [Joomla] Copia di un sito web "statico" in locale Joomla 3
utente è possibile creare una pagina php che copia interamente il contenuto di un'altra pagina ? PHP 10
S [MySQL] Conversione dati e copia in in altra colonna MySQL 8
O cicli di scrittura dati e copia dati secondo una griglia predefinita Visual Basic 2
napuleone File MYD e copia del database Database 0
M Funzione copia nascosta Javascript 0
felino [C#] Farpoint Spread: copia-incolla su celle filtrate .NET Framework 1
G Per copia ed incollare un immagine su un' altra fotografia ho selezionato Photoshop 1
M Invio e mail al destinatario con invio di una copia al mittente PHP 35
M Copia file da server A a server B PHP 0
P Sito che mi copia, segnalazione a Google SEO e Posizionamento 1
novello88 Google: aggiornare "copia cache" SEO e Posizionamento 1
L copia email al cliente PHP 1
M Modificare form email affinchè mandi una copia BCC CMS (Content Management System) 1
D Copia file da Windows a Linux PHP 9
K Cluster mysql copia database MySQL 6
B Codice che disabilita la funzione di Copia Schermo? Javascript 1
S Copia immagine - Salva con nome PHP 3
S consiglio per ottimizzare copia dati fra diversi DB Database 0
M copia dati Excel Outlook Visual Basic 0
M copia database Visual Basic 0
A Flash - copia pulsante da distaccare... ? Flash 1
A Flash: separare un pulsante dalla propria copia Webdesign e Grafica 2
Z Dreamweaver crea una copia delle immagini Windows e Software 1
F copia file di determitati file con checkbox PHP 0
M Cdosys Invio copia email a utente Classic ASP 19
G script Copia e incolla in php PHP 1
G Copia di immagine da internet a server in intranet HTML e CSS 4
A Copia Disco Windows e Software 4
C Copia cartelle in rete Reti LAN e Wireless 0
P Copia tabella su altra tabella PHP 1
G News dal mondo, cronaca sport ecc. Con un semplice copia incolla sul tuo sito HTML e CSS 1
T copia di colonne Database 5
S problemi con copia e incolla!!! Hardware 0
A BASTA! Spazio Web Gratis + Copia/Incolla Siti Supporto Mr.Webmaster 1
A Evitare copia pagine Javascript 2
J [Javascript] una funzione ricorsiva che non capisco come lavori Javascript 6
Z Modifica ricorsiva file html HTML e CSS 3
M relazione ricorsiva Database 0
criric return di una funzione ricorsiva PHP 5
P funzione ricorsiva PHP 4

Discussioni simili