1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【PHP】URLのリストをまとめてDLする

Posted at

とりあえず備忘録として

URLのリストをまとめてDLできるようなものを作成していく。
例えば以下のようなテキストファイルにURLをつらつらと書いていってそれらをまとめてDLできる。

:list.txt
https://.....
https://.....
https://.....
https://.....

#DL保存先ディレクトリを作成
ディレクトリの名前をURLリストファイルの名前と同じものとした。
コマンドライン引数でURLリストファイルのパスを受け取って、そこから名前を抽出する。

以下は保存用ディレクトリがなかったら作成するコード

$dirName = basename($argv[1], ".txt");
$dir = FILE . 'src/' . $dirName;
if (!file_exists($dir)) {
    mkdir($dir);
}

##basename
を使うことでパスからファイル名の抽出が簡単になる。
第1引数はパスで、第2引数へ拡張子を指定してやるとファイル名のみを抽出できる。

#コマンドライン引数でURLリストテキストを読み込む
URLが膨大になることを考えて読み込みは1行ずつ行い、URLリストファイルを配列にする

以下はその雛形

$file = fopen($argv[1], "r");
if ($file) {
    while ($line = fgets($file)) {
       //処理
    }
}
fclose($file);

参考:https://webkaru.net/php/function-fgets/

#ダウンロード
forで回していくがループの始まりを工夫した

for ($i = $argv[2] ?? 0; $i < count($array); $i++) {
//処理
}

$iの初期化を$i = $argv[2] ?? 0;のようにしている。
これは$argv[2]あればそれを代入して、そうでなければ0を代入するというもの。これによりDLしたい開始の場所を指定できる。

##curl
基本的な書き方しかしていないが一応載せます。

    $options = array(
        CURLOPT_URL =>  $url,
        CURLOPT_RETURNTRANSFER => true, 
    );

    $ch = curl_init();

    //オプション
    curl_setopt_array($ch, $options);

    $html =  curl_exec($ch);
    file_put_contents($filepath, $html);
    curl_close($ch); 

CURLOPT_RETURNTRANSFER => trueを指定しないと保存がうまく行かなかったような、、、、

#実行

$php dl.php URLリストファイルのパス [オプション]
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?