Array Wert datin suchen

strex

Erfahrenes Mitglied
Ich muss den Dateibestand vergleichen. Das heißt, ich lade in ein Array den aktuellen Bestand und überprüfen mit einem foreach ob darin die Datei schon eingetragen ist, wenn nicht wird diese eingetragen.

Leider kommt es jetzt öfters zu einem Fehler: "Warning: Compilation failed: regular expression too large at offset 0 in"

Mir ist schon klar, dass die Aneinanderreihung zu lang ist, wie kann ich dies beheben?

PHP:
foreach ($entrys as $entry) 
{ 

list ($otrkey,$dir,$size,$time)=explode(";",$entry); 
                          list ($datum,$uhrzeit)=explode(" ",$time); 
                          
                              $pfad = "/$dir/$otrkey";
                              $timstampanalog = strtotime("$datum $uhrzeit"); 
 
 
if(!preg_match('#('.implode('|',$filelistserver).')#i',$otrkey)) { 	

$sql = mysql_query("INSERT IGNORE INTO otrlist (otrkey, dir, pfad, size, time, status, server, filetime, otrstatus) VALUES ('".$otrkey."','".$dir."','".$pfad."','".$size."','".$timestamp."','".$status."','".$ftp."','".$timstampanalog."','".$otrstatus."')");   

//$off = mysql_query("UPDATE `otrlist` SET `otrkey` = '$otrkey', pfad = '$pfad' WHERE `otrkey` LIKE '$otrkey'");


   }
           	              
}
 
Hi,

kannst Du mal beschreiben, was Du hier prüfen willst?

PHP:
if(!preg_match('#('.implode('|',$filelistserver).')#i',$otrkey)) {

Was steht in $filelistserver, was in $otrkey?

LG
 
Hi,

das vermute ich auch mal ganz stark. Wenn der Ausdruck vom Prinzip her richtig ist, sollte auch ein schnödes in_array genügen. Wenn nicht, würde ich dieses $filelistserver-Array einfach so aufbauen, dass es genügt. ;)

LG
 
Ich teste mal strpos, hierzu muss ich aber auch das Array in eine Zeichenkette zusammenfügen?

An in_Array hatte ich auch gedacht und auch getestet, nur dass er hier mir auch File Dateinamen liefert die schon in der Datenbank sind. Warum auch immer...

Array $filelistserver sieht so aus:
PHP:
Array ( [0] => Marienhof_08.01.21_18-25_ard_30_TVOON_DE.mpg.avi.otrkey [1] => Brisant_08.01.21_17-15_ard_45_TVOON_DE.mpg.avi.otrkey [2] => Verbotene_Liebe_08.01.21_18-00_ard_25_TVOON_DE.mpg.avi.otrkey [3] => Panda_Gorilla_und_Co_08.01.21_16-10_ard_50_TVOON_DE.mpg.avi.otrkey [4] => Tagesschau_08.01.21_17-00_ard_15_TVOON_DE.mpg.avi.otrkey [5] => Sturm_der_Liebe_08.01.21_15-10_ard_50_TVOON_DE.mpg.avi.otrkey [6] => Tagesschau_08.01.21_16-00_ard_10_TVOON_DE.mpg.avi.otrkey [7] => Rote_Rosen_08.01.21_14-10_ard_50_TVOON_DE.mpg.avi.otrkey [8] => Tagesschau_08.01.21_15-00_ard_10_TVOON_DE.mpg.avi.otrkey [9] => ARD_Mittagsmagazin_08.01.21_13-00_ard_60_TVOON_DE.mpg.avi.otrkey [10] => Tagesschau_08.01.21_14-00_ard_10_TVOON_DE.mpg.avi.otrkey [11] => ARD_Buffet_08.01.21_12-15_ard_45_TVOON_DE.mpg.avi.otrkey [12] =>....

$otrkey: z.B. ARD_Buffet_08.01.21_12-15_ard_45_TVOON_DE.mpg.avi.otrkey
 
Getestet und klappt nicht, er gibt Werte aus die schon in der DB enthalten sind:

PHP:
foreach ($entrys as $entry) 
{ 

list ($otrkey,$dir,$size,$time)=explode(";",$entry); 
                          list ($datum,$uhrzeit)=explode(" ",$time); 
                          
                              $pfad = "/$dir/$otrkey";
                              $timstampanalog = strtotime("$datum $uhrzeit"); 
 
 $server_liste_string = implode('|',$filelistserver);
 $pos = strpos($server_liste_string, $otrkey); 

 
//if(!preg_match('#('.implode('|',$filelistserver).')#i',$otrkey)) { 	
	
	if($pos === false){	

$sql = mysql_query("INSERT IGNORE INTO otrlist (otrkey, dir, pfad, size, time, status, server, filetime, otrstatus) VALUES ('".$otrkey."','".$dir."','".$pfad."','".$size."','".$timestamp."','".$status."','".$ftp."','".$timstampanalog."','".$otrstatus."')");   

echo "$otrkey<br>";

//$off = mysql_query("UPDATE `otrlist` SET `otrkey` = '$otrkey', pfad = '$pfad' WHERE `otrkey` LIKE '$otrkey'");


}
               array_push($files, trim($otrkey));
           
		              

}
 
Zurück