とりあえず備忘録として
URLのリストをまとめてDLできるようなものを作成していく。
例えば以下のようなテキストファイルにURLをつらつらと書いていってそれらをまとめてDLできる。
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リストファイルのパス [オプション]