php textausgabe mit wget downloaden

Kesar_Neron

Kesar_Neron

Tripel-As
Hallo zusammen,

ich verzweifle hier an einem kleinen Problem. Derzeit arbeite ich an einer Art onlinedienst, der schwarze listen für squidguard (oder andere) bereitstellen soll. Nun hänge ich an dem Punkt, wo ich eine Liste mit gesperrten domains generieren möchte. DAS ist an sich kein Problem. Nur bekomme ich es komischer weise nicht hin, dass wget die ausgeb herunter läd. Vie Browser ist es ueberaupt keine Schwierigkeit.

Hier mal mein php code:
PHP:
<?php
 if(isset($_GET['dl_kat']))
 {
    if($_GET['status']== "checked")
    {
     $query = "SELECT eintrag FROM blacklist WHERE kategorie_id='$_GET[dl_kat]' AND status='1'";
    }
    if($_GET['status']== "all")
    {
     $query = "SELECT eintrag FROM blacklist WHERE kategorie_id='$_GET[dl_kat]'";
    }

    $query_katname = "SELECT name FROM kategorie WHERE id='".$_GET['dl_kat']."'";
    $result_katname = mysql_query($query_katname);
    $daten_katname = mysql_fetch_array($result_katname);

    $result = mysql_query($query);
    $anzahl = mysql_num_rows($result);
    
     	 header("Content-Type: text/plain");
     	 header("Content-Disposition: attachment; filename=blacklist_".$daten_katname['name'].".txt");
 	 
    for($i=0; $i<$anzahl; $i++)
    {
      $daten = mysql_fetch_array($result);
      
      echo $daten['eintrag']."\r\n";
    }
 }
?>

Das Skript tut folgendes: Es uebernimmt die Kategorie ID und stellt dann anhand des gewünschten Stati die benötigte Query bereit. Diese geht an die Datenbank und es wird die anzahl der Zeilen ermittelt. Dann werden noch ein paar Headereigentschaften gesetzt, damit die ausgabe richtig erkannt wird und im anschluss werden die zutreffenden Datensätze ausgegeben.

Wie oben schon geschrieben, wenn ich die Datei via Browser herunterladen möchte funktioniert alles bestens. Nur passiert absolut gar nichts, wenn ich die Url an wget weitergebe.

Hat vielleicht jemand einen tipp für mich?

Gruß

Kesar
 
Hallo
Dass garnix passiert, glaube ich dir nicht.
wget spuckt doch normalerweise aus was es macht.
Was erscheint denn in der Konsole, wenn du wget darauf startest?

Wie sieht der Befehl für wget aus?

Gruß Wolfgang
 
Hallo,

also, meine Konsole sieht nach einem einfachen downloadversuch wie folgt aus:


wget http://www.edv-bode.de/projekt_blacklist_download.php?dl_kat=3&status=checked
--20:25:21-- http://www.edv-bode.de/projekt_blacklist_download.php?dl_kat=3
=> `projekt_blacklist_download.php?dl_kat=3'
Auflösen des Hostnamen »www.edv-bode.de«.... [1] 23384
kesar@217-20-118-124:~$ 217.20.118.124
Verbindungsaufbau zu www.edv-bode.de[217.20.118.124]:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 200 OK
Länge: nicht spezifiziert [application/octetstream]

[ <=> ] 0 --.--K/s

20:25:22 (0.00 B/s) - »projekt_blacklist_download.php?dl_kat=3« gespeichert [0]


Und genau hier bleibt er ewig und drei tage hängen, oder eben bis ich mit strg+c alles abbreche.

Ich habe leider keine ahnung, woran es liegen könnte... Achso, eines noch: selbst nach 5 min Wartezeit hat die angelegte (vermeindlich) downgeloadete Datei 0 bytes.

Gruß
 
PHP ist nicht grad meine Stärke, aber mir fällt da auf, daß du zwar im Skript den Header auf "Content-Type: text/plain" setzt, wget aber [application/octetstream] herunterladen will.
Da scheint die Kommunikation schief zu laufen oder der Header wird nicht korrekt gesetzt.
Werden Sonderzeichen benutzt? Oder gibt es irgendeine Art von Preface zum ausgegebenen Text?
Eventuell kann dir das Firefox-Plugin tamper-data weiterhelfen: damit kannst du die gesendeten Daten des Servers analysieren und bekommst u.a. alle Header angezeigt.
Außerdem könntest du versuchen, im Skript die Länge zu spezifizieren und mit auszugeben.

Gruß
XL
P.S.: wenn es gar nicht will, dann hilft immer noch eine Analyse mit ethereal! :)
 
headers_sent() ??

PHP ist nicht grad meine Stärke, aber mir fällt da auf, daß du zwar im Skript den Header auf "Content-Type: text/plain" setzt, wget aber [application/octetstream] herunterladen will.
Da scheint die Kommunikation schief zu laufen oder der Header wird nicht korrekt gesetzt.
Hallo,

dazu fällt mir gerade ein, daß header() doch überhaupt nur funktioniert, wenn noch nichts vorher gesendet wurde (weil dabei halt bereits Header anfallen und nur die gelten, die wirklich als erstes kommen)... das Beispiel scheint zwar nichts zu senden, aber man sieht auch nicht daran, ob es ein Ausschnitt von irgend was ist oder von etwas gerufen wird, das schon was gesendet hat.

Das kann man gut testen, indem man vor die Zeile "headers_sent()" packt (true, wenn schon was gesendet wurde - false wenn nicht)
PHP:
if(headers_sent(){
   echo "zu spät!";
}
header("Content-Type: text/plain");
Sorry, wenn das jetzt überflüssig war, aber s.o. .... man weiß nicht, in welchem Zusammenhang das Beispiel läuft.
 
@x-lette: Es kann gut sein, dass sich zwischen den beiden Darstellungen etwas verändert hat. Wenn dann ist es allerdings kein Fehler, sondern einfach nur der Beweis, dass ich nicht still stitze :-)!!

@jabo: ich denke ebenfall nicht, dass es irgendwas mit der Reihenfolge meines Skripts zu tun hat. Es wird ja, wie du es schon erkannt hast, nichts ausgegeben. Was mich nur wundert ist, dass ALLES genau so funktioniert, wie ich es haben möchte, wenn ich es über den Browser aufrufe.

Ich vermute, dass wget die header einfach nicht in der Form akzeptiert, wie ich es möchte. Dann verstehe ich allerdings nicht, warum ABSOLUT keinerlei Daten ankommen... noch nichteinmal schrott wird übertragen---das ist es was, mich stört...

Gruß

Kesar
 
Ich denke jetzt einfach mal, dass wget sein application/octetstream aus der Dateiendung nimmt, was zwar dumm ist, aber naja... vielleicht musst du wget irgendwie den content-type übergeben...

EDIT: Probier mal:
Code:
wget --header "Content-type: text/plain" http://www.edv-bode.de/projekt_blacklist_download.php?dl_kat=3&status=checked

Grüße,
patlkli!
 
Zuletzt bearbeitet:
Hallo zusammen

@patlkli: danke für den tipp, das wusste ich noch nicht, aber leider hat das auch nicht funktioniert. Ich werd mich wahrscheinlich einfach weiter auf die suche machen müssen. Achso, es wurde ja nach einer Beispielausgabe gefragt.
Nun, Das Ergebnis soll eine Textdatei sein, welche simple so aufgebaut sein soll:

81.19.70.1
64.124.125.10
193.125.152.10
206.50.181.10
206.173.193.10
216.40.195.10
216.200.199.10
216.34.209.10
212.143.22.10
80.190.228.10
207.38.10.100
208.184.138.100
65.39.176.100
207.150.181.100
66.150.2.100
209.132.205.100
209.202.240.100
...
...
...

Das stllt dann letztendlich eine Blacklist dar, welche von z.B. Squidguard genutzt werden kann, um den Interzugang ein wenig einzuschränken.

Gruß
 
Header scheinbar nicht ok

Code:
wget --header "Content-type: text/plain" http://www.edv-bode.de/projekt_blacklist_download.php?dl_kat=3&status=checked
Hallo,

das brachte mich jetzt mal auf folgende Idee:
Code:
 wget -S http://www.edv-bode.de/projekt_blacklist_download.php?dl_kat=3&status=checked
[1] 13913
--23:15:33--  http://www.edv-bode.de/projekt_blacklist_download.php?dl_kat=3
           => `projekt_blacklist_download.php?dl_kat=3.3'
Auflösen des Hostnamen »www.edv-bode.de«.... jens@trebulon-1:~> 217.20.118.124
Connecting to www.edv-bode.de|217.20.118.124|:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 
  HTTP/1.1 200 OK
  Date: Thu, 16 Nov 2006 22:15:31 GMT
  Server: [COLOR=gray][hier stand der Server-String][/COLOR]
  X-Powered-By: [COLOR=gray][hier stand die PHP-Version][/COLOR]
  Content-Disposition: attachment; filename=blacklist_Audio-Video.txt
  Connection: close
  [B][I][COLOR=red]Content-Type: application/octetstream[/COLOR][/I][/B]
Länge: nicht spezifiziert [application/octetstream]

    [ <=>                                                          ] 0             --.--K/s             

23:15:34 (0.00 B/s) - `projekt_blacklist_download.php?dl_kat=3.3' saved [0]
Der Parameter "-S" gibt die Header aus, die vom Server kommen (also so wie ich die manpage verstehe *keine* von wget generierten).

Wenn man wget nicht traut, mal Lynx:
Code:
lynx --dump --head http://www.edv-bode.de/projekt_blacklist_download.php?dl_kat=3&status=checked
HTTP/1.1 200 OK
Date: Thu, 16 Nov 2006 22:23:31 GMT
Server: [COLOR=gray][hier stand der Server-String][/COLOR]
X-Powered-By: [COLOR=gray][hier stand die PHP-Version][/color]
Content-Disposition: attachment; filename=blacklist_Audio-Video.txt
Connection: close
[COLOR=red][B][I]Content-Type: application/octetstream[/I][/B][/COLOR]
(während übrigens "lynx --dump [....] > blist.txt" zu ner sauberen Liste in "blist.txt" führt...)

Aber: Scheinbar gehen die Header eben *nicht* rüber....
 
Zuletzt bearbeitet:
@jabo: Das sieht doch schon mal gut aus... also bin cih mit dem content-type application/octetstream gar nicht so verkehrt....

Selbst wenn die header nicht rüber kommen wundert es mich, das wget keinerlei daten empfängt...

Aber ich denke, das hat mir schon mal weitergeholfen... danke
 

Ähnliche Themen

Akonadi startet nicht mehr

dovecot und postfix Konfiguration Problem

skript aus der kommandozeile starten

mysql_result + Unable to jump to

CMS Problem [php]

Zurück
Oben