phpでpdf,画像等取得
テスト勉強をするにあたって授業資料のpdfをいっぱい落としたかったので適当に.そんなことする暇あるなら勉強しろっていう話ですが...。
動作環境が限定しているものしか作っていないです。いつか改良を加える予定。
で,そのダウンロードしたいpdfがベーシック認証掛けられているページ上にあったのですが.そのページをfile_get_contentsするにはfile_get_contents(http://user:password@www.hoge.com/...)
という風に書けばよいらしいです.またuser,passwordに@が含まれている場合@を%40にエンコードしてやれば大丈夫らしい。passに@を付ける小癪な教官のおかげで1つ知識を増やすことができました。htmlタグは正規表現で取得してます。
baseurlは相対パスの場合に目的のコンテンツが置かれているまえのディレクトリを入れる,つまりindex.htmlを消したいだけ。
以下,コード
<?php if(isset($_POST["url"])){ $url=$_POST['url']; $folderName = $_POST["folderName"]; $baseurl=$_POST["baseurl"]; getPDFData($url, $folderName,$baseurl); } function getPDFData($url,$folderName,$baseurl){ //フォルダ作成 $url=$url; $folderName=$folderName; $baseurl=$baseurl; if(!file_exists($folderName)){ mkdir($folderName, 0700); } //ベースURLの設定 $url=$url; $folderName=$folderName; $baseUrl=$baseurl; $siteData = file_get_contents($url); $siteData = mb_convert_encoding($siteData,'SJIS', "UTF-8"); //画像ネーム取得 if(preg_match_all("/<a href=\"(.+?).pdf/", $siteData, $match)) { foreach($match[1] as $key => $value){ $imageUrl = $baseUrl.$value; $imageData = file_get_contents($imageUrl.".pdf"); $pathInfo = pathinfo($value); $fileName = $pathInfo["filename"]; //画像ファイルを取り出し保管する。 //$imageData=file_get_contents($imageUrl,FILE_BINARY); if($imageData){ file_put_contents("./".$folderName."/".$fileName.".pdf",$imageData); } else{ echo "nainai\n"; } } }else{ echo "nai"; } } ?>