3

我在 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

4 回答 4

3

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

  • 自己决定wget应该创建的文件的名称
  • 指示wget应该对该文件进行下载
  • 下载完成后,使用该文件——因为您已经知道名称。

查看-Owget 的选项 ;-)


例如,从命令行运行它:

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

将创建一个名为my-output-file.html.

于 2010-03-23T05:41:40.397 回答
1

如果您的要求很简单,就像获取一样google.com,那么在 PHP 中进行

$data=file_get_contents('http://www.google.com/');
file_put_contents($data,"./downloads/output.html");
于 2010-03-23T05:51:54.557 回答
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目录中没有其他进程创建文件,则此方法有效。

于 2010-03-23T05:52:23.950 回答
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
?>
于 2011-05-06T15:22:13.997 回答