• ベストアンサー

URLをたたく賢い方法

定期的に実行させたいスクリプトを組んだのですが、あまりいいアイディアがなく、単にそのスクリプトを自分のホームページのフッターに file_get_contents() をおいて読み込ませるようにしています。 ただしかし、なんとなくページの読み込む時間が遅くなったような気がするので、 file_get_contents() 以外でURLをたたく方法がないかな、と思っています。 できればブラウザの処理に影響がないような方法を探しています。 ご存知の方おられましたらよろしくお願いいたします。

  • jyuu
  • お礼率83% (553/665)
  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

> http://www.htmlcenter.com/tutorials/tutorials.cfm?id=155&type=PHP この辺はcronで設定していますよ。phpだけで定期的な処理というのは無理だと思います。 URLを叩くだけなら、img で空タグを使えばfile_get_contents()等使わなくても良いと思います。 <img src="http://path.php" width="1" height="1" style="display:none;" /> 別に1ピクセル使わなくてもいいんですが。 cronでURLを叩くだけのサービスがあれば良いかもしれませんね(作ろうかなぁ。。。)。 参考まで。

jyuu
質問者

お礼

かなり賢い方法をご教授いただき、ありがとうございました。 >cronでURLを叩くだけのサービスがあれば良いかもしれませんね(作ろうかなぁ。。。)。 ぜひぜひ^^。 ちなみに webcron.org というところを見つけましたが、初期設定で3つのURLまでサポートしてくれているようです。

その他の回答 (2)

  • gfct9s
  • ベストアンサー率90% (10/11)
回答No.2

> できましたら サーバ側で設定の必要ない方法を探しています。 それは難題ですね。 下記のページは、使用中のPHPがCGIなのか、Apacheモジュールなのか、 それによってcronへの登録方法とスクリプトの記述が変わるよ、のように 読めましたが、違うでしょうか。 http://www.htmlcenter.com/tutorials/tutorials.cfm?id=155&type=PHP​ ■代替案 file_get_contents()が書いてあるphpと、そこで呼び出しているPHPが 同じサーバーにある場合で、OSがLinux系だとします。 現在file_get_contents()にしているところを、下記のようにしても いけるんではないかと思いますが、いかがでしょうか。 system('/usr/local/bin/php script.php > /dev/null &'); これはscript.phpをバックグラウンドで実行し、その出力(echoとか) は破棄しなさいという意味です。 system()関数ほか類似の関数については、下記をご覧になってください。 http://au.php.net/manual/ja/function.system.php http://au.php.net/manual/ja/function.exec.php ■注意点 1) /usr/local/bin/phpの部分は、サーバーのphpのパスを指定してください。 2) script.phpのなかでincludeとかrequireとかしている場合、  ファイルパスが相対指定ですと、うまく動かない場合があります。  ほかの原因でもうまく動いていないように思える場合は、/dev/nullを  /tmp/reportとかにして、その中に出力されたエラーメッセージを  見てください。 3) レンタルサーバーによっては、こうした方法で起動したスクリプトが  一定時間実行されるとか、あまりに負荷が高いとかすると、強制的に  中断される設定になっている場合があります。  レンタルサーバーの規約をもう一度ご覧になってください。

jyuu
質問者

お礼

丁寧に解説してくださってどうもありがとうございます。大変参考になります。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

定期的にやるのであれば、cronやatでwgetなどを 実行するというのが定番では?

jyuu
質問者

お礼

アドバイスありがとうございます。参考になります。 できましたら サーバ側で設定の必要ない方法を探しています。 http://www.htmlcenter.com/tutorials/tutorials.cfm?id=155&type=PHP http://www.sitepoint.com/article/introducing-cron 上記のページではPHPサイドで Cron Job が可能なようなことを書いていますが、これは CGI を呼び出すのでしょうか?

関連するQ&A

  • file_get_contents 画像直URL

    file_get_contents($url);した際、画像の直URLがあったら、画像をローカルに保存して、URLを書き換えたいのですが、どうやればいいでしょうか? if(preg_match("/http:\/\//", file_get_contents($url))) { ?? } また、画像をローカルに保存って、PHPで出来るのでしょうか?

    • ベストアンサー
    • PHP
  • file_get_contents()の動きが読めません…。

    いつもお世話になっております。(環境:PHP5.2.5) file_get_contents()を外部ファイル(クラス)の中で使ってデータを取得し、 そのクラスをメインファイルで読み込み、 メインの方で、その得たデータを使おうとしています。 (仮に、メインファイルの名前をmain.phpとしておきます。) その際、クラスの中に書くコードについてですが、 下記のように、2通りの書き方が浮かびました。 (仮に、このクラスファイルの名前をclass.phpとしておきます。) //------------------------------------------------------------ $url= 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; $html = file_get_contents($url); //------------------------------------------------------------ $url= $_SERVER['SCRIPT_FILENAME']; $html = file_get_contents($url); //------------------------------------------------------------ で、パターン2の方は、うまく行くのですが、 パターン1の方の処理だと、なぜか、 その処理を行おうとしているファイル(main.php)のダウンロードを開始しようとするのです! ブラウザに「ダウンロードウィンドウが立ち上がる…」という状況です。 パターン1では、 $url_1 = "http://example.com"; のような、「http://」で始まる書式のURLを file_get_contents()の引数に入れることになりますが、 これ自体は問題ないと思っています。 実際、クラスで読み込む方法ではなく、file_get_contents()を使う方法では、 問題なく動いたからです。 つまり、 メインファイルに、 上記の2パターンを書いて試した場合には、問題なくうまくいったのです。 言い換えれば、 メインファイルだけで完結している場合には、 どうも問題は起こらないようで、 クラスなどで引っ張ってくると、問題が起こるようなのです。 (私の勘違いの可能性もありますが…。) 以上、まとりのない文章で、申し訳ありません。 自分でも、なにがなにやら、よく分かっていないため、 多くの情報を提供することで、なんとかアドバイスを頂けないかと思い、 ひとまず、使えそうな情報を並べてみました。 チェック項目など、提示いただければ、 適宜、それに従って対応致しますので、 どうかご助言をよろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPでWebページの特定部を取得したいのですが、上手くいきません。

    PHPでWebページの特定部を取得したいのですが、上手くいきません。 現在file_get_contentsを用いてURLを指定して取得し、preg_matchの引数にする方法で行っています。 また、preg_matchは以下のように用いています。 preg_match("/パターン(.*?)パターン/s", $html, $matches); print_rで$matchesを表示してみたところArray()のみ出力されます。 また、話が逸れて申し訳ないですが、上記とは別にfile_get_contentsを用いて動的にURLを指定して取得しているのですが、処理に時間がかかります。(約10秒) $wordをURLに組み込む変数として以下のように記述しています。 file_get_contents("http://…".$word."…(URLの続き)"); 以上の2点についてご教示願います。

    • ベストアンサー
    • PHP
  • file_get_contents関数で引数をURLにすれば、HTML

    file_get_contents関数で引数をURLにすれば、HTMLソースを取得できるのはわかるのですが、 例えば、URLが制限 255バイト?を超える場合、GETでなくPOSTタイプでHTMLを取得したいのですが、file_get_contents関数のように手軽にPOSTタイプで取得できる関数はありますか? PHP5を使っています。

    • 締切済み
    • PHP
  • トップページURLのみで下層ページのURL取得

    現在勉強のためにsitemapを自動で作れるものを作成しています。 私が考えているようなツールはこのようなツールです -> http://seo.fc2.com/sitemap/ index.html -> hoge.html -> hogekasou.html のようなサイトのindex.htmlを指定した場合にhogekasou.htmlまで探せる方法を探しています。 私が考えている方法は、file_get_contentsなどでindex.htmlを開き解析してhoge.htmlを見つけ、さらにhoge.htmlをfile_get_contentsで開きhogekasou.htmlを見つける方法を考えています。 しかしページが多くなるとこの作業に時間がかかるためなにか効率のいい方法がないかと思い質問させてもらいました。 宜しくお願いします。

    • 締切済み
    • PHP
  • file(), file_get_contents(), fopen() がタイムアウトしてしまう

    パスが正しいかどうかを何度も確認しましたが、スクリプトのURLをブラウザで開こうとすると、5~6秒した後、以下のエラーが出ます。 Warning: file_get_contents(読み込むファイルのパス): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in スクリプトのパス.php on line 16 おそらく、file_get_contentsの読み込もうとするファイルが重たすぎるのだと思います(スクリプトのファイルサイズ自体は軽いのですが処理に時間がかかってしまう)。というのも、読み込むファイルの内容を、<?php echo "hello world"; ?> とすると、エラーが出なくなり、正常に読み込んでくれます。また、読み込むファイルは php ファイルで同ドメイン上にあり、このファイルをブラウザから閲覧可能です。 他に、fopen, include, file も試しましたが、同様に上記のようなエラーがでます。これはサーバ側でスクリプトの処理の時間制限を行っているからでしょうか? ちなみに、スクリプトの冒頭に、 set_time_limit(0); 一番最後に set_time_limit(30); をおいてみましたが、結果は同様でした。 もし何か対処方法をご存知の方おられましたら、どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • hrefでのページ遷移とscript読み込みについて質問です。

    hrefでのページ遷移とscript読み込みについて質問です。 file:///C:/homepage/main.html というhtmlファイルの中に<li><a href="next.html">aaa</a></li> というリンクを作り、これをクリックすると、 URL欄に file:///C:/homepage/main.html#next.html と表示され、next.htmlの<script>内に記述されているjavaスクリプトが読み込まれません。 URL欄ににfile:///C:/homepage/next.html と直で入力するとスクリプトは読み込まれます。 URLがfile:///C:/homepage/next.htmlに遷移されるようにし、 きちんとスクリプトも読み込まれるようにするにはどうしたらいいでしょうか? ブラウザはFireFox 3.6を使用しています。 ご回答宜しくお願いします。

  • 文字化けしたソースを読み取る方法がわかりません;;

    あるサイトのページの情報を『file_get_contents』関数で読み取ろうとしたところ、 そのページの『徹底検証』という文字が、 下記のように文字化けを起こしているため、うまく読み取れずに困っています。 『蠕ケ蠎墓、懆ィシ』 ブラウザで見るとちゃんと『徹底検証』となっています。 なんとかそのページを読み取りたいのですが、 文字化けを起こしたページをきれいに読み取る方法はないでしょうか? phpのバージョンは5.0です。 よろしくお願い致します。

    • 締切済み
    • PHP
  • system() 関数でスクリプトの代わりに変数内のphpコードを実行させる

    system() 関数でphpスクリプト(例えば、script.php)を実行するときは、 system("php script.php &"); でできますが、これを、script.php のデータの内容がそのまま入っている $phpcode を実行させることなどできますでしょうか? 例えば、 $phpcode = file_get_contents('script'); system("php $phpcode &"); などとしてもだめですよね。 いったい何をしたいのかと申しますと、データベース内にスクリプトを保存し、任意に呼び出して実行できるようにしたいのです。 もし方法をご存知の方おられましたらどうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • URLを印刷したい

    IEとEPSONプリンターを使用しています。 ホームページを印刷するときにフッターにURLを入れて印刷をしたいので、ページ設定で&uを入れて印刷を試しました。 1)最終ページのみURL印刷されます。 全ページに印刷させる方法はありませんか? 2)ネット上のPDFファイルも同様にURLを入れて印刷したいのですができません。 EPSONサポートセンターにTELしましたが解決しませんでした。 すぐに必要な資料なので困っています。 よろしくお願いします!!!

専門家に質問してみよう