- 締切済み
PHPで自動的にWEBページを保存することは可能か?
PHPのことに関しては初心者なので、質問させてください。 WEBページをローカルに保存する時は、IEなら通常[ファイル]-[名前を付けて保存]として HTML形式やMHT形式などを選んで保存できると思います。 この保存の動作をPHPによって行うことは可能でしょうか? もし可能であれば、そのソースコードもしくはソースコードが公開されているページを教えて頂けませんでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>あまり意味が分かりませんが わけわからん、コメントしてすみません。 1)サーバーで動作させてサーバーに保存する 2)サーバーで動作させてクライアントに保存する 3)サーバーではなく、ローカルで動作させて、ローカルに保存する っていうパターンを考えていました。 2以外はできると思うという意味でした。 >A.phpにアクセスしたときにまったく別の外部のWEBページ「B.html」を、「A」サーバの中に保存したいのです。 #3の方がちゃんと説明されてますね。
- skytemple
- ベストアンサー率62% (5/8)
要するに、あなたのサーバー上にそのニュースサイトのキャッシュを作成したい、という解釈でよろしいでしょうか? HTMLファイル単独で保存したいのであれば比較的簡単にできますが、画像やFlashなどを込みでとなると少々面倒ですし、ましてやMHTファイル形式でとなるとかなり面倒です。(MHTの仕組みが分かれば不可能ではないですが) HTMLだけであれば、以下のようにすれば出来ると思います。 (ただしphp.iniのallow_url_fopenが有効であることが前提) $read_fp=@fopen($url,"r"); $write_fp=@fopen($file_path,"w"); while($line=@fgets($read_fp,1024)){ fputs($write_fp,$line); } fclose($read_fp); fclose($write_fp); 画像などのファイルも込みで保存したいとなると、HTMLファイルをパースして<img>タグなどを解析する必要が生じて少々処理が面倒になりますので、wgetにでも処理を丸投げした方が手っ取り早いと思います。 (もっとも、これもsafe_modeが無効であることに加え、変数のサニタイズをしっかりやらないといけませんが) exec("/path/to/wget -r -L -l 1 -p ".$save_path." ".$url); なお、余計なお節介かも知れませんが、キャッシュしたページを他人に再公開する場合は、著作権上の配慮にご注意下さい。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
PHPでは、URIもファイルの様に扱えるので、 以下のように読込(サンプルでは、printしてますけどファイルに書き出しできるので、名前をつけて保存できることになる)して保存することができます。 ローカルに保存というのが、サーバー上でスクリプトを動かすのでなくて、 ローカルでコンソール起動するという意味だったらローカルに保存できます。 <?php $file="http://www.sample.ne.jp/index.html"; $fp=@fopen($file,"r"); while($line=fgets($fp)){ print "$line"; } fclose($fp); ?>
- inu2
- ベストアンサー率33% (1229/3720)
できません PHPはwebに特化した言語です そのようにパソコンで自由自在につかえるよな言語ではありません PHPはサーバー内だけで完結してしまい 結果としてHTMLなどのブラウザが認識できるものを出力させるだけにすぎません ですから、PHPを使ったサイトのページを保存させてもPHPソースはどこにも書かれていません、出力されるのは単なるHTMLなどです
補足
>PHPはサーバー内だけで完結してしまい すみません、説明不足でした。 例えば下記のような方法だったらどうでしょうか。 これだとサーバ内で完結していると思うのですが…。 --------------------------------------------------------------------------------------------- 「A」というサーバ内にA.phpというファイルを置きます。 で、A.phpにアクセスしたときにまったく別の外部のWEBページ「B.html」を、「A」サーバの中に保存したいのです。 ここでいう「B.html」は、ユーザーが指定するWEBページを、保存したものになります。 現時点ではニュースサイトの記事ページを対象に保存しようと考えているので、B.htmlはそれになります。 ---------------------------------------------------------------------------------------------
補足
>ローカルに保存というのが、サーバー上でスクリプトを動かすのでなくて、 >ローカルでコンソール起動するという意味だったらローカルに保存できます。 すみません。あまり意味が分かりませんが、とりあえずやってみます。