Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Hilfe Suche darf nur Dateien mit Zahlem im Dateinamen durchsuchen. [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-consult PHP Entwicklung
- Ad -
php-resource




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);

 
TobiaZ
26-01-2010, 00:26 
 
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

 
TobiaZ
26-01-2010, 01:03 
 
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.

 
TobiaZ
26-01-2010, 01:10 
 
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!

 
TobiaZ
26-01-2010, 01:14 
 
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.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:15 Uhr.