wget返回下载的文件名

时间:2010-03-23 05:36:26

标签: php return wget filenames

我在php脚本中使用wget,需要获取已下载文件的名称。

例如,如果我尝试

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

我将在下载目录中获得一个名为index.html的文件。

编辑:页面并不总是谷歌,目标可能是图像或样式表,所以我需要找出下载文件的名称。

我想要这样的事情:

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

4 个答案:

答案 0 :(得分:3)

也许这是某种作弊,但为什么不呢:

  • 自行决定wget应创建的文件的名称
  • wget表明应该下载该文件
  • 下载完成后,使用该文件 - 因为您已经知道了名称。

查看wget的-O选项; - )


例如,从命令行运行它:

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

将创建一个名为my-output-file.html的文件。

答案 1 :(得分:1)

如果您的要求很简单,只需获取google.com,那么在PHP

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

答案 2 :(得分:0)

在类似Linux的系统上,你可以这样做:

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

如果./downloads目录中没有其他进程创建文件,则此方法有效。

答案 3 :(得分:0)

我最终使用php使用以下代码在目录中查找最近更新的文件:

<?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
?>