3 Stimmen

wget Rückgabe des heruntergeladenen Dateinamens

Ich verwende wget in einem php-Skript und muss den Namen der heruntergeladenen Datei erhalten.

Zum Beispiel, wenn ich versuche

<?php
  system('/usr/bin/wget -q --directory-prefix="./downloads/" http://www.google.com/');
?>

Ich erhalte eine Datei namens index.html im Download-Verzeichnis.

EDIT: Die Seite wird nicht immer google sein, das Ziel kann ein Bild oder ein Stylesheet sein, also muss ich den Namen der heruntergeladenen Datei herausfinden.

Ich hätte gerne etwas in dieser Art:

<?php
  //Does not work:
  $filename = system('/usr/bin/wget -q --directory-prefix="./downloads/" http://www.google.com/');
  //$filename should contain "index.html"
?>

3voto

Pascal MARTIN Punkte 384469

Vielleicht ist das eine Art von Betrug aber warum nicht?

  • Bestimmen Sie selbst den Namen der Datei, die wget erstellen sollte
  • anzeigen wget dass der Download auf diese Datei erfolgen soll
  • Wenn der Download abgeschlossen ist, verwenden Sie diese Datei, da Sie den Namen bereits kennen.

Überprüfen Sie die -O Option von wget ;-)

Wenn Sie dies zum Beispiel von der Befehlszeile aus ausführen:

wget 'http://www.google.com/' -O my-output-file.html

Erstellt eine Datei namens my-output-file.html .

1voto

ghostdog74 Punkte 305138

Wenn Ihre Anforderung einfach ist, z. B. wenn Sie nur google.com dann tun Sie es innerhalb von PHP

$data=file_get_contents('http://www.google.com/');
file_put_contents($data,"./downloads/output.html");

0voto

codaddict Punkte 426877

Auf Linux-ähnlichen Systemen können Sie das tun:

system('/usr/bin/wget -q --directory-prefix="./downloads/" http://www.google.com/');
$filename = system('ls -tr ./downloads'); // $filename is now index.html

Dies funktioniert, wenn es keinen anderen Prozess gibt, der eine Datei in der ./downloads Verzeichnis.

0voto

Matthew Punkte 5973

Am Ende habe ich php verwendet, um die zuletzt aktualisierte Datei im Verzeichnis mit folgendem Code zu finden:

<?php
system('/usr/bin/wget -q --directory-prefix="./downloads/" http://www.google.com/');
$dir = "./downloads";

$newstamp = 0;
$newname = "";
$dc = opendir($dir);
while ($fn = readdir($dc)) {
  # Eliminate current directory, parent directory
  if (ereg('^\.{1,2}$',$fn)) continue;
  $timedat = filemtime("$dir/$fn");
  if ($timedat > $newstamp) {
    $newstamp = $timedat;
    $newname = $fn;
  }
}
// $newname contains the name of the most recently updated file
// $newstamp contains the time of the update to $newname
?>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X