Verzeichnis auslesen und in MySQL-Datenbank schreiben

ihop

Mitglied
hi
folgendes problem:
ich habe da ein script (selber geschrieben) das den ordner modules auslesen soll und alle ordner die nicht in der DB stehen ein gefügt werden. nur irgendwie macht er das nicht er schreibt keine fehlermeldung aber er addet auch nicht die ordner rein.

modules/fotos
modules/dvd

in der db steht nur foto

das script
PHP:
mysql_connect ($DatabaseHost, $DatabaseUser, $DatabasePassword) or die ("Keine Verbindung zum Server");	
mysql_select_db ($Database) or die ("Keine Verbindung zur Datenbank");
$ergebnis = mysql_query ("SELECT * FROM navigation") or die ("Tabelle nicht gefunden");
if ($handle = opendir('modules')) {
  while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != ".." && $file != "index.html") {
      while ($zeile = mysql_fetch_array($ergebnis)) {      
        if($file!=$zeile["ordnername"]){    
          mysql_query("INSERT INTO navigation VALUES('','$file','','0','all')") or die(mysql_error());  
        }        
      }                 
    }
  }
  closedir($handle);
}
mysql_close ();
 
Hallo,
kann es sein, dass die erste Spalte deiner Tabelle auf auto_increment gesetzt ist?
Wenn ja dann muss du das nicht extra angeben also könnte dein Script so aussehen:
PHP:
mysql_connect ($DatabaseHost, $DatabaseUser, $DatabasePassword) or die ("Keine Verbindung zum Server");     
mysql_select_db ($Database) or die ("Keine Verbindung zur Datenbank"); 
$ergebnis = mysql_query ("SELECT * FROM navigation") or die ("Tabelle nicht gefunden"); 
if ($handle = opendir('modules')) { 
  while (false !== ($file = readdir($handle))) { 
    if ($file != "." && $file != ".." && $file != "index.html") { 
      while ($zeile = mysql_fetch_array($ergebnis)) {       
        if($file!=$zeile["ordnername"]){     
          mysql_query("INSERT INTO navigation VALUES('$file','','0','all')") or die(mysql_error());   
        }         
      }                  
    } 
  } 
  closedir($handle); 
} 
mysql_close ();
 
Probier mal Folgendes:
PHP:
<?php

	mysql_connect($DatabaseHost, $DatabaseUser, $DatabasePassword)
		or die('Verbindung mit Datenbankserver schlug fehl!');
	mysql_select_db($Database)
		or die('Auswahl der Datenbank schlug fehl!');

	// Sammeln der Datensätze
	$records = array();
	$query = '
		SELECT
		        `ordnername`
		  FROM
		        `navigation`
		';
	$result = mysql_query($query)
		or die('Datenbankabfrage schlug fehl!');
	while( $records[] = mysql_result($result, 0) ) {
		continue;
	}

	// Sammeln der Dateien
	$files = array();
	if( $handle = opendir('modules') ) {
		while( false !== ($file = readdir($handle)) ) {
			if( $file == '.' || $file == '..' || $file == 'index.html' ) {
				continue;
			}
			$files[] = $file;
		}
		closedir($handle);
	}

	// Ausgleich der Differenz beider Mengen
	$diff = array_diff($records, $files);
	foreach( $diff as $file ) {
		$query = '
			INSERT INTO
			        `navigation`
			  VALUES(
			        NULL,
			        "'.mysql_real_escape_string($file).'",
			        "",
			        0,
			        "all"
			  )
			';
		mysql_query($query)
			or die(mysql_error());
	}

	mysql_close();

?>
Übrigens möchte ich dir noch die INSERT INTO-Anweisung mit SET-Klausel nahelegen, da bei dieser Anweisung die Angabe nur einzelner Spaltenwerte möglich ist.
 
bringt mir den fehler:
Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in /srv/www/httpd/phost/d/com/pytalhost/dvddb/web/mainfile.php on line 45

das wäre die zeile:
"'.mysql_real_escape_string($file).'",
 
Mein Fehler. Ändere mal Folgendes:
PHP:
while( $records[] = mysql_result($result, 0) ) {
	continue;
}
Meinen vorherigen Beitrag habe ich entsprechend korrigiert.
 
das habe ich gemacht dann kommt:
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 71 bytes) in /srv/www/httpd/phost/d/com/pytalhost/dvddb/web/mainfile.php on line 21

das ganze schaut jetzt so aus
PHP:
 mysql_connect($DatabaseHost, $DatabaseUser, $DatabasePassword)
        or die('Verbindung mit Datenbankserver schlug fehl!');
    mysql_select_db($Database)
        or die('Auswahl der Datenbank schlug fehl!');

    // Sammeln der Datensätze
    $records = array();
    $query = '
        SELECT
                `ordnername`
          FROM
                `navigation`
        ';
    $result = mysql_query($query)
        or die('Datenbankabfrage schlug fehl!');
    while( $records[] = mysql_result($result, 0) ) {
        continue;
    } 

    // Sammeln der Dateien
    $files = array();
    if( $handle = opendir('modules') ) {
        while( false !== ($file = readdir($handle)) ) {
            if( $file == '.' || $file == '..' || $file == 'index.html' ) {
                continue;
            }
            $files[] = $file;
        }
        closedir($handle);
    }
 
Hallo!

Der Dir zugewiesene Arbeitsspeicher langt nicht aus.
phpinfo() müsste Dir unter memory_limit 16M anzeigen.
Dein Script benötigt aber mehr wie 16M.
Wenn Du also kein Zugriff auf die php.ini hast, wirst Du wohl wahrscheinlich die Verzeichnisinhalte aufteilen müssen.
Aber vieleicht fällt Gumbo da ja noch ein Trick ein.

Gruss Dr Dau
 
Ich glaube kaum, dass die Indexierung eines Verzeichnisses so viele Ressourcen schluckt. Und auch der Rest wird sicherlich nicht so viel benötigen. Ist das denn das Einzige, was das Skript macht?
 
Zurück