PHPに関する質問です。


あるHTMLファイルに

<?php require('test.txt');?>

というソースを入れ、外部ファイルを読み込むのですが、require以外に、

require_once()
include()
include_once()

などがありますが、例えば1ページのHTML内に5カ所くらいこのPHPソースを配置するとした場合、
どの命令が一番サーバーに対して負荷が軽いでしょうか?

よろしくご解答、お願い致します。

回答の条件
  • URL必須
  • 1人30回まで
  • 登録:2007/05/18 17:28:52
  • 終了:2007/05/25 17:30:03

回答(5件)

id:GEN111 No.1

GEN111回答回数472ベストアンサー獲得回数582007/05/18 17:59:07

ポイント20pt

 include_once や require_once を何回も呼び出しても意味ないと思いますが……

 include と require はエラー処理が違うので機能的に望ましい方を使うべき、なのですが、その違いはどうでもよいという場合、

<?php
define ('TIMES', 1000) ;
define ('FILENAME', 'test.txt') ;

ob_start() ;

$start = microtime(true) ;
for ($i = 0; $i < TIMES; ++$i) require FILENAME ;
$time1 = microtime(true) - $start ;

$start = microtime(true) ;
for ($i = 0; $i < TIMES; ++$i) include FILENAME ;
$time2 = microtime(true) - $start ;

ob_end_clean() ;

echo "require : $time1<br />include : $time2" ;
?>

 このようなコードで処理にかかる時間を計測してみましたが、ほとんど変わりはないようです。負荷的には違いはないのではないでしょうか。


PHP: include - Manual

id:zachouR

ありがとうございます。

参考にさせて頂きます。

requireが負荷が高いと誰からか聞いたので、、、。

すっきりしました。

2007/05/18 19:28:19
id:gekikawa No.2

gekikawa回答回数110ベストアンサー獲得回数112007/05/18 18:08:04

ポイント20pt

require()とinclude()は同じ程度ではないでしょうか?

ただrequire_once()とinclude_once()は上記2つよりはるかに処理が重い(負荷がかかる)

ようです。

厳密に調べるにはforループなどでrequireのみ、includeのみ繰り返したら結果が判るかも知れませんが...

require()とinclude()は読込不可能だったときにエラーとして止めたいか、

それとも処理を続けさせたいかの違いで使って良いのでは?

http://jp.php.net/manual/ja/function.include.php

ちなみにrequire_onceなど使うと同じ外部ファイルは1回しか読み込んでくれないはずですよ。

id:zachouR

ありがとうございます。

ソースを書き換えなくてすむようです。

2007/05/18 19:28:33
id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912007/05/18 18:15:11

ポイント20pt

それぞれの関数により挙動が異なるので、最適なものを使うべきかと思いますが、それを把握した上でどれでもよいのであれば、一番処理が早いのはinlude のようです。


http://www.komonet.ne.jp/~php/chap7.htm:title=require文とinclude文]

PHP:include_once と require_once

id:zachouR

ありがとうございます。

あまり、かわらないという意見がありましたので、inludeも含め再検討をした上で、もう一度考えてみます。

2007/05/18 19:29:16
id:GEN111 No.4

GEN111回答回数472ベストアンサー獲得回数582007/05/18 20:28:19

ポイント20pt

 もう少し検証してみましたが、読み込むのがプレーンテキストの場合はほとんど差はないようです。

 PHPコードの場合は差がある……ようなのですが、コードの内容など、条件によってどちらが速いとは一概に言えないようで……

 ただ、その条件がどの様なものか、試してみた範囲でははっきりとは分かりませんでした。


PHP: require - Manual

id:zachouR

わざわざありがとうございました!

あまり差がないようでしたら、置き換えることはやめておこうと思います。

ありがとうございました!

2007/05/18 20:44:15
id:tobeoscontinue No.5

tobeoscontinue回答回数214ベストアンサー獲得回数542007/05/18 21:35:55

ポイント20pt

>どの命令が一番サーバーに対して負荷が軽いでしょうか?

Linuxなどの場合、メモリーに余裕があれば一度読み込まれたファイルは残っていると何処かで読んだような。そのため残っていればメモリ転送だけなのでそこまで負荷を考慮する必要は無いように思います。


require_once は重い

という記述もありますが私は確認できませんでした。

またPHP : include_onceとrequire_onceの評価コードではvar_dumpがほとんどの時間を使っていると思いますのでその結果には疑問です。


4.include, requireで読み込むファイルはフルパスにしよう

はうなずけるケースです。相対パスで記述された場合、ファイルを探すのはコストの高い処理だと思います。がフルパスで書くのは現実的ではなくinclude_path()を適切に設定するのがいいのではないでしょうか。あるいはdefine()でフルパスのディレクトリーの部分を定義して連結して使用する。


私の場合は何度も実行するという必要性が無いのでinclude_onceかrequire_onceを使っています。

id:zachouR

ありがとうございます。

今まで作ったサイトは全てrequireで、置き換えてアップするのも一苦労なので、とりあえず大きな差がないようなので、このまま行きたいと思います。

今後はrequire_onceで行きたいと思っています。

2007/05/23 11:06:19

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません