Ergebnis 1 bis 14 von 14

Thema: preg_match_all() Problem

  1. #1

    preg_match_all() Problem

    Ich wollte mit Hilfe von preg_match_all() alle TAGs aus einem HTML Dokument rauslesen, die ein CSS-Background Attribut mit Bild enthalten (hört sich kompliziert an ). DSazu habe ich folgendes Suchmuster verwendet:
    PHP-Code:
    $suchmuster "/<([^>^<^ .*^>^<^ ]) .*style.*=\".*background:.*url\('(.*)'\).*\".*>/isU"
    Da kommen irgendwie nicht alle Tags als Ergebnis raus, die ein solches Attribut haben. Was mache ich falsch?
    Sollte ich vielleicht das s weglassen?

    Manni

  2. #2
    Den ersten Teil verstehe ich irgendwie nicht ganz..
    PHP-Code:
    $suchmuster '/<([a-zA-Z]*) .*style=".*background:.*url\('(.*)'\).*".*>/isU'
    So würde ich's auf Andhieb versuchen. (Ungetestet)

  3. #3
    Vielen Dank, habs jetzt so gemacht:
    PHP-Code:
    $suchmuster "/<([a-zA-Z]*) [^<^>]*style[ ]*=\".*background:.*url\('(.*)'\).*\".*>/isU" 
    Das funktioniert wunderbar. Ich überlege gerade, warum ich nicht selbst darauf gekommen bin

  4. #4
    Sorry, ich bins nochmal
    Mit welchem Befehl kann ich die Ausgabe einer PHP Datei einlesen? file() (damit habe ich es bis jetzt gemacht) liefert bei PHP Dateien auf dem selben Server den PHP Code zurück und das ist, wenn ich eigentlich die fertige Seite mit preg_match_all() durchsuchen will, ziemlich ungünstig. Hat vielleicht jemand einen Befehl mit dem das geht. Ich probiere gleich mal die Methode mit fopen() und fread() aus, aber da ich mit dem Script evtl. später auch Seiten auf anderen Servern durchsuchen will, fürchte ich, dass das nicht gehen wird. Kann man überhaupt an HTML Dateien bzw. die Ausgaben von PHP Dateien auf anderen Servern in PHP rankommen? Müsste doch eigentlich, siehe Google und Co...

    Thx schonmal im Vorraus und Sorry fürs Doppelposting

  5. #5
    fopen() mit http:// geht auf jedenfall. Musst du dir keine Sorgen machen. ^^.

  6. #6
    Mit http:// vor dem Pfad der lokalen Datei müsstest du auch den Output und nicht den Inhalt der Datei bekommen. Ist zwar evtl. eine nicht ganz saubere Methode, aber so mache ich es!

    @Dingsi: Solltest du das mit deinem Post gesagt haben wollen, hab ich wohl was falsch verstanden ^^

  7. #7
    Thx, stimmt das geht. Aber nur wenn man die Datei mit fpassthru() einliest, denn bei allen anderen Einlese-Funktionen brauchst man eine Länge der Datei, die man afaik aber nur auf dem eigenen Server einlesen kann.
    Ich habe aber jetzt ein weiteres Problem. Ich möchte gerne eine Sicherung einbauen, dass man nur existierende Dateien eingeben kann. Dazu muss ich überprüfen, ob die Datei existiert (is_file(), das file_exists() nur auf dem localhsot funktioniert) Was macht man aber, wenn der Benutzer etwas wie "http://google.de/" eingibt? "http://google.de/" ist für PHP keine Datei. Ich habe schon versucht eine IF-Abfrage einzubauen, die verschiedene Dateinamen (index.html, index.php usw.) anhängt und das gleiche nochmal versucht. Das hat nicht gebracht, obwohl die Datei "http://google.de/index.html" existiert

    Was soll ich machen?

    Manni

  8. #8
    Hierfür wären die Network-Funktionen von PHP angebracht.

    Insbesondere gethostbyname() sollte dir dabei helfen, allerdings sieht es für mich so aus, also ob die Funktionen nur auf DNS-Namen überprüfen und nicht ob die Dateien existieren, aber immerhin wär das mal ein Anfang ^^

  9. #9
    Es reicht mir ja nicht, rauszufinden, ob es diese Adresse gibt, denn mit weder mit http://google.de/ noch mit 126.86.119.86 kann die Funktion fopen() etwas anfangen. Ich muss irgendwie an den Dateinamen (zB index.html) rankommen und überprüfen uns sehen, ob es den gibt. Da bringt mir die IP-Adresse wenig

    Manni

  10. #10
    Ich bin mir nicht sicher, aber du könntest versuchen, gleichzeitig eine Überprüfung auf Ordner einzubauen, etwa so:
    PHP-Code:
    <?php
    # ...
    if(is_file($bla) OR is_dir($bla))
    {
       
    # Einlesen...
    }
    else
    {
       echo 
    'Nö, keine Datei!';
    }
    # ...
    ?>
    [EDIT]
    OK, 2 Dinge: Du kannst mit fopen sehr wohl eine "Datei" wie http://www.google.de/ auslesen (s. PHP-Manual) und außerdem arbeiten laut PHP-Manual sowohl is_file als auch is_dir nicht mit enfernten Dateien.

    Geändert von dead_orc (04.02.2005 um 11:07 Uhr)

  11. #11
    Ich habe beschlossen, das mit der Überprüfung, ob die Datei existiert, sein zu lassen. Aber jetzt habe ich ein weiteres Problem:
    Wie kann ich eine Datei einlesen, wenn ich nicht weiß, wie groß die Datei ist? Sowohl fread(), als auch die fget() Funktionen benötigen eine Länge um die Datei auszulesen. Nun funktioniert filesize() aber nur auf dem lokalen Server. Lässt sich das irgendwie machen?

    Manni

  12. #12
    mach einfach eine zahl bei der du sicher bist das sie höher als der zu lesende string ist.
    die größe dieser seite beträgt z.b. 11kb. da würd ich dann 24k oder 65k oder was in der richtig auslesen lassen.

  13. #13
    Du kannst auch versuchen, die Datei nicht mit fopen und fgets/fread sondern einfach mit file_get_contents einzulesen, aber auch hier bin ich mir nicht sicher, ob die Funktion auf entfernte Dateien zugreifen kann.

  14. #14
    Thx, mit file_get_contents() geht es
    Ich hatte da noch eine andere Methode gefunden:
    PHP-Code:
    while (!feof($fp)) {
       
    $content .= fread($fp500);
     } 
    Aber die andere (file_get_contents()) ist einfacher. Ich frage mich nur, warum das bei SelfPHP nirgendwo auftaucht (oder hab ich es übersehen )

    Jedenfalls geht es jetzt

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •