Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe Suche darf nur Dateien mit Zahlem im Dateinamen durchsuchen.
luerwald 26-01-2010, 00:12 Hallo zusammen,
ich benötige eine Anpassung eines Skriptes für eine Suche nach bestimmten Wörtern auf einer Internetseite. Diese darf aber nur bestimmte Dateien durchsuchen. Die Datenseiten haben ausschließlich Zahlen als Namen z.B. 10236482.php und die dürfen nur durchsucht werden.
Wie kann ich die array erweitern das nur Dateinamen mit Zahlen durchsucht werden:
$AllowedDir = $RootDir;
$AllowedExts = array(".php");
$files=ReadDirs($AllowedDir,$AllowedExts);
Zuerst mal - Regeln lesen, Posting anpassen. :teach:
(Aktueller Link ist in meiner Signatur.)
luerwald 26-01-2010, 00:57 Sorry war mein erstes Posting in einem Forum. Bin leider nicht fit genug um nur das Wichtigste heraus zu schreiben und hoffe das es so richtig ist.
AmicaNoctis 26-01-2010, 00:59 Hallo,
es ist zwar gut, dass du den Code etwas zusammengestrichen hast, aber leider fehlt jetzt etwas, nämlich die Funktion ReadDirs. Darin liegt der Schlüssel zu deinem Problem. Wenn du die nicht verändern willst, musst du deren Rückgabe weiter filtern. Da das vermutlich ein Array sein wird, sieh dir mal array_filter (http://php.net/ array_filter) an.
Bitte ändere den Quelltext nochmal und benutze die PHP-Tags statt der Zitat-Tags.
Gruß,
Amica
Den Code kann man nicht erweitern. Er lässt nur eine Beschränkung auf Verzeichnisse und Dateiendungen zu.
Du müsstest also zunächst die Programmlogik von ReadDirs() entsprechend anpassen, vermute ich.
Wenn du Programmieren kannst, würde ich dich bitten, die die entsprechende Stelle in der Funktion herauszusuchen und nachzusehen wie dort die Einschränkung vorgenommen wird. Dann sollte es ein leichtes sein, das zu erweitern. Eventuell kannst du der Funktion dann sogar noch einen dritten Parameter (allowedChars) geben. Das wäre die optimale Variante.
Wenn du nicht Programmieren kannst, bleibt dir nur übrig es zu lernen, dann helfen wir natürlich gerne dabei, sofern erkenntlich ist, dass du es selbst versuchst.
Alternativ verschiebe ich dich ins entsprechende Forum, die Chance auf hilfe ist dort allerdings geringer.
AmicaNoctis 26-01-2010, 01:06 Den Code kann man nicht erweitern.
Kann man schon, ...
Den Code kann man nicht erweitern. Er lässt nur eine Beschränkung auf Verzeichnisse und Dateiendungen zu.
... wenn man den gegebenen Beschränkungen noch eine weitere hinzufügt, indem man das Rückgabearray filtert.
Das bezieht sich auf die drei oben genannten Zeilen.
Das Vorgehen zur Anpassung von ReadDirs ist ja im weiteren Text beschrieben. ;)
luerwald 26-01-2010, 01:10 Danke für die schnelle Antwort. Hier habe ich mal die ReadDirs herausgeschrieben.
function ReadDirs($d, $ExtArray) {
$fileArray = array();
if ($hDir = opendir($d)) {
while ($file = readdir($hDir)) {
if (!is_dir($d . "/" . $file)) {
// *** .*-Dateien (zB .htaccess) ignorieren ***
if (substr($file, 0, 1) != ".") {
foreach ($ExtArray as $ext){
if (
substr(strtolower($file), strlen($file) - strlen($ext), strlen($ext))
== strtolower($ext)
) {
array_push($fileArray, $d . "/" . $file);
}
}
}
}
}
closedir($hDir);
}
return $fileArray;
}
AmicaNoctis 26-01-2010, 01:12 Nochmal: Du sollst endlich PHP-Tags benutzen und den Code nicht als Zitat und auch nicht als Fließtext posten! Ändere das bitte jetzt!
Benutze bitte endlich die [php]-Tags! :teach: (steht auch in den Regeln genaustens beschrieben.)
Und dann bitte auch deine Ansätze. Hinweise hast du von Amica und mir ja schon die ersten bekommen.
Ansonsten könntest du auch an der Stelle, wo beispielsweise die htaccess-Dateien ausgeschlossen werden, auch alle Dateien ausschließen, die nicht nur aus zahlen (+Dateiendung) bestehen. (preg_match() hilft dir dabei)
AmicaNoctis 26-01-2010, 01:56 So, jetzt wo du den Code richtig getaggt hast und ich die Einrückung übernommen hab, damit man ihn auch lesen kann, geht es weiter im Text.
Hast du dich schon entschieden, ob du die Funktion ReadDirs modifizieren oder beibehalten und nur deren Rückgabe filtern willst? Das Entscheidungskriterium dafür liegt darin, ob du sie woanders nochmal im Original brauchst oder nicht.
luerwald 26-01-2010, 02:24 Also für mich wäre es am besten, wenn man nur die Funktion ReadDirs modifizieren kann. Der Rest funzt ja dann wie gehabt.
AmicaNoctis 26-01-2010, 02:26 OK und worin besteht da das konkrete Problem? Du hast noch nicht auf TobiaZ' Beitrag geantwortet, ob du programmieren kannst.
luerwald 26-01-2010, 02:34 Ne leider noch nicht. Einige Sachen konnte ich mir bis jetzt anpassen, so das diese für mich passten. Nur mit diesem Problem bin ich überfordert und habe mir hier hilfe erhofft.
AmicaNoctis 26-01-2010, 03:09 Statt der bisherigen Vorfilterung
substr($file, 0, 1) != "."
innerhalb der Bedingung musst du mit preg_match (http://php.net/ pre_match) arbeiten, um die Dateinamen zu überprüfen. Der Reguläre Ausdruck, den du dafür brauchst, lautet
'<^\\d+\\.\\w+$>i'
Den Rest solltest du selbst schaffen.
Gruß,
Amica
luerwald 27-01-2010, 18:03 Habe es hinbekommen. Es hat zwar etwas länger gedauert aber es klappt. Vielen Dank nochmal für die HILFE!
function ReadDirs($d,$ExtArray){
$fileArray=array();
if($hDir = opendir($d)){
while($file=readdir($hDir)){
if(!is_dir($d."/".$file)){
if(substr($file,0,1)!="."){
if (preg_match("/^\d{1,20}$/", strtok($file, ".")) == 1) {
foreach($ExtArray as $ext){
if(substr(strtolower($file),strlen($file)-
strlen($ext),strlen($ext))==strtolower($ext)){
array_push($fileArray,$d."/".$file);
continue;
}
}
}
}
}
}
closedir($hDir);
}
return $fileArray;
}
AmicaNoctis 27-01-2010, 18:07 Die vorherige Bedingung
if(substr($file,0,1)!=".")
hättest du ersetzen können, bzw. kannst du sie jetzt rausnehmen. Dieser Fall ist durch den Regulären Ausdruck schon mit abgedeckt und daher jetzt doppelt gemoppelt.
Gruß,
Amica
luerwald 27-01-2010, 18:35 Ja stimmt, naja ich habe halt noch nicht soviel Ahnung.
Trotzdem vielen Dank.
|
-
- |