- 締切済み
phpプログラムの転送量を少なくする方法
現在レンタルサーバーでphpのウェブアプリを運営しています。 phpの転送量を削減したいのですが、 良い方法がありましたら、教えて下さい。 phpのファイルサイズが1Mバイトを超えてしまいました。 転送量を少なくしたいのですが、次のようなプログラムは効果があるのでしょうか? <?php $a = ""; if($a == 0){ include_once("function0.php"); function0($a); }else($a == 1){ include_once("function1.php"); function1($a); } ?> 場合分けで分割して、プログラムを読み出すというものです。 あとapcでキャッシュしています。 root権限があるので、サーバー設定でも構いません。 phpの転送量を少なくする方法がありましたら、教えて下さい。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hogehoge78
- ベストアンサー率80% (433/539)
とりあえずは、下記のように、ある程度出力されるページで、どれを読み出すか、読み出すもののみをincludeしてやれば良いとして、 後は、そのPHPスクリプトが、 ・どの程度分類わけが出来るか ・分類わけ時点でいらない関数を捨てれるか ・そもそも関数の書き方でもっと簡単に書けるものがないか といったところになると思いますがいかがでしょうか。 組み込み関数で処理できるのに、自前で書いてしまってる部分があるとか、似たようなSQL文がベタ書きされているとかといったところも見直してみてはいかがでしょうか。 他にも、DBやcsv、設定ファイルに書き込むべき内容を、配列で記述してあったりとか。
- hogehoge78
- ベストアンサー率80% (433/539)
1MBを超える単体のPHPスクリプトというものが想像しがたいんですが、 どのようなものを記述されておりますか? 表示するHTML部分もフルで記述されているのでしょうか。 ソレであれば、質問者さんが例として記述してる方法でかなり効果があるのではないかと思いますが、実際のスクリプト自体がどのようになっているのかが分からないとなんとも言えません。 例えばHTML部分(View部分)と、PHP部分を分離させるとか --index.php-------------------- <?php require_once 'path/to/common.php'; //全体的に使うモジュール $page = $_GET['page']; //例えばページの遷移をパラメータで引くとして if(preg_match('/^[0-9a-z]+$/i', $page)){ $action = $page; if(file_exists('path/to/'.$page.'.php')){ require_once 'path/to/'.$page.'.php'; execute(); } }else{ echo 'not found'; } ?> --ページの名前(hogeとすると)hoge.php <?php function execute(){ include('なんか必要なモジュールとか'); //コンテンツの内容で必要な処理 $assign = array( 'title' => 'ページの名前とか', 'date' => date('Y年m月d日', time()); ); view_html('path/to/contents.html', $assign); } ?> --なんかメインモジュール的なもの(common.php) <?php function view_html($___html_path, $___variables=array()){ if(!file_exists($___html_path)) exit(); //表示するべきHTMLファイルが存在しなかったら終わり foreach($___variables as $___key => $___value){ ${$___key} = $___value; } include($___html_path); } ?> --表示するHTMLファイル(contents.html) <html> <head> <title><?php echo $title?></title> </head> <body> 今日は、<?php echo $date?>です。 </body> </html> ・・・・このようにしてやれば、 index.php?page=hoge とアクセスがあった場合に 読むファイルは、 common.php hoge.php contents.html(hoge.htmlとかactionと一緒の名前にしておいたり。) (及びオプション的に必要なモジュール) のみとなります。 index.php?page=test とアクセスがあった場合も同様に common.php test.php test.html のみと。 最終的に何らかのフレームワークをご利用されたほうがいいかもしれませんが・・・
補足
hogehoge78様 ありがとうございます。 なんとか理解できました。 言葉足らずの点があって申し訳ないのですが、 HTML部分とロジックの部分は分離してあります。 ロジックのphpプログラムが1Mバイトあります。 そのほとんどが実行されることのない関数なのですが、 たまに実行される関数というのがたくさんあります。 それで分離できないものかと思ったのです。 必要なときだけ読み出せばいいのではないかと。 ありがとうございました。 自分でも実際に動かしてみます。