Antworten auf deine Fragen:
Neues Thema erstellen

opendir() [failed to open dir: Result too large]

Christian

verpeilt & verschallert

Ich komm gerade irgendwie gar nicht weiter. Auch ewiges googlen hat mich zu keinem brauchbaren Ergebnis geführt.
Ich will mit einem Script ein Backup eines Ordners durchführen, jedoch beim Öffnen des Ordners bekomme ich die o.g. Fehlermeldung. Ich habs auch schon mit der Pseudoklasse dir versucht mit selbem, verzweifelnden Ergebnis.
Das Script:
PHP:
/**
 * Copy dirs (src: http://www.php.net/copy)
 *
 * @param string $srcdir
 * @param string $dstdir
 * @param int $offset
 * @param bool $verbose
 * @return string result_set
 */
function dir_copy($srcdir, $dstdir, $offset = '', $verbose = false)
{
    if(!isset($offset)) $offset=0;
    $num = 0;
    $fail = 0;
    $sizetotal = 0;
    $fifail = '';
    if(!is_dir($dstdir)) mkdir($dstdir);
    if($curdir = dir($srcdir)) {
        while($file = $curdir->read()) {
            if($file != '.' && $file != '..') {
//                $srcfile = $srcdir . '\\' . $file;    # deleted by marajax
//                $dstfile = $dstdir . '\\' . $file;    # deleted by marajax
                $srcfile = $srcdir . '/' . $file;    # added by marajax
                $dstfile = $dstdir . '/' . $file;    # added by marajax
                if(is_file($srcfile)) {
                    if(is_file($dstfile)) $ow = filemtime($srcfile) - filemtime($dstfile); else $ow = 1;
                    if($ow > 0) {
                        if($verbose) echo "Copying '$srcfile' to '$dstfile'...<br />";
                        if(copy($srcfile, $dstfile)) {
                            touch($dstfile, filemtime($srcfile)); $num++;
                            chmod($dstfile, 0777);    # added by marajax
                            $sizetotal = ($sizetotal + filesize($dstfile));
                            if($verbose) echo "OK\n";
                        }
                        else {
                            echo "Error: File '$srcfile' could not be copied!<br />\n";
                            $fail++;
                            $fifail = $fifail.$srcfile.'|';
                        }
                    }
                }
                else if(is_dir($srcfile)) {
                    $res = explode(',',$ret);
                    $ret = dir_copy($srcfile, $dstfile, $verbose);
                    $mod = explode(',',$ret);
                    $imp = array($res[0] + $mod[0],$mod[1] + $res[1],$mod[2] + $res[2],$mod[3].$res[3]);
                    $ret = implode(',',$imp);
                }
            }
        }
        $curdir->close();
    }
    $red = explode(',',$ret);
    $ret = ($num + $red[0]).','.(($fail-$offset) + $red[1]).','.($sizetotal + $red[2]).','.$fifail.$red[3];
    return $ret;
}

$DataBaseName	= 'webauth';

define('SRC_PATH', "C:\\apachefriends\\xampp\\mysql\\data\\".$DataBaseName."\\");
define('DST_PATH', "D:\\Daten\\User\\Backup\\". $DataBaseName .'__'. date('d.m.Y_H.i.s') ."\\" );
define('HOME_BUTTON', '<br /> <br /><input type="button" onClick="self.location.href=\''.$_SERVER['PHP_SELF'].'\'" value="zurück" />');

if(isset($_GET['start'])){
	$result_set	= dir_copy( SRC_PATH, DST_PATH );
	$rst	= explode( ',', $result_set );
	echo '<h2>Backup der Datenbank <i>'.$DataBaseName.'</i></h2><br />'.$rst[0]. ' Dateien gesichert mit einer Gesamtgröße von '. (round(($rst[2]/1048576),2)) .'MB. <br />
						Das Backup befindet sich auf <b>\\\\'. $_ENV["COMPUTERNAME"] .'</b> in dem Ordner <b>'. DST_PATH .'</b> 
						'.HOME_BUTTON;
}else{
	print '<form method="GET"><input type="submit" name="start" value="Backup der Datenbank \''.$DataBaseName.'\' jetzt durchführen" /></form>';
}
Mit anderen Ordnern klappt es komischerweise schon, nur halt nicht mit den Ordnern die in mysql\data\ liegen.
Hat irgendjemand irgendeine Idee?

Vielen Dank im Voraus
Chrischan


(ps: ja mit exec('mysqldump'); hab ich es auch schon versucht, aber das will gar nicht. )

Edith:
Hier die Version mit opendir/readdir/closedir:
PHP:
/**
 * Copy dirs (src: http://www.php.net/copy)
 *
 * @param string $srcdir
 * @param string $dstdir
 * @param int $offset
 * @param bool $verbose
 * @return string result_set
 */
function dir_copy($srcdir, $dstdir, $offset = '', $verbose = false)
{
    if(!isset($offset)) $offset=0;
    $num = 0;
    $fail = 0;
    $sizetotal = 0;
    $fifail = '';
    if(!is_dir($dstdir)) mkdir($dstdir);
    if($curdir = opendir($srcdir)) {
        while($file = readdir($curdir)) {
            if($file != '.' && $file != '..') {
//                $srcfile = $srcdir . '\\' . $file;    # deleted by marajax
//                $dstfile = $dstdir . '\\' . $file;    # deleted by marajax
                $srcfile = $srcdir . '/' . $file;    # added by marajax
                $dstfile = $dstdir . '/' . $file;    # added by marajax
                if(is_file($srcfile)) {
                    if(is_file($dstfile)) $ow = filemtime($srcfile) - filemtime($dstfile); else $ow = 1;
                    if($ow > 0) {
                        if($verbose) echo "Copying '$srcfile' to '$dstfile'...<br />";
                        if(copy($srcfile, $dstfile)) {
                            touch($dstfile, filemtime($srcfile)); $num++;
                            chmod($dstfile, 0777);    # added by marajax
                            $sizetotal = ($sizetotal + filesize($dstfile));
                            if($verbose) echo "OK\n";
                        }
                        else {
                            echo "Error: File '$srcfile' could not be copied!<br />\n";
                            $fail++;
                            $fifail = $fifail.$srcfile.'|';
                        }
                    }
                }
                else if(is_dir($srcfile)) {
                    $res = explode(',',$ret);
                    $ret = dir_copy($srcfile, $dstfile, $verbose);
                    $mod = explode(',',$ret);
                    $imp = array($res[0] + $mod[0],$mod[1] + $res[1],$mod[2] + $res[2],$mod[3].$res[3]);
                    $ret = implode(',',$imp);
                }
            }
        }
        closedir($curdir);
    }
    $red = explode(',',$ret);
    $ret = ($num + $red[0]).','.(($fail-$offset) + $red[1]).','.($sizetotal + $red[2]).','.$fifail.$red[3];
    return $ret;
}
 
Zuletzt bearbeitet:

Harrystyle

Noch nicht viel geschrieben

AW: opendir() [failed to open dir: Result too large]

Naja wenn du meinst das es mit den einen Ordnern geht und mit den anderen nicht schau mal ob du genug rechte hast bei dem ordner
 

Christian

verpeilt & verschallert

AW: opendir() [failed to open dir: Result too large]

Huch, ich hab den Fehler schon gefunden... ich hab das falsche Laufwerk angegeben, und statt mir einen Fehler mit Ordner nicht gefunden zu geben, hat er mir diese Fehlermeldung zurückgegeben. Das hat mich ein bisschen irritiert.
Also immer schön alles 2 mal prüfen :)
 

Duddle

Posting-Frequenz: 14µHz

AW: opendir() [failed to open dir: Result too large]

Ähm, du willst aber so nicht die MySQL-Datenbanken sichern, oder?
Genau für diesen Zweck gibt es mysqldump und fertige (sehr simple) Scripte, die das für dich bewerkstelligen.


Duddle
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.614
Beiträge
1.538.351
Mitglieder
67.525
Neuestes Mitglied
mgtaucher
Oben