• ベストアンサー

PHP初心者はSmartyやPEARを使うべきですか?

 PHPのサンプルなどが載っている書籍で勉強をしていると、Smartyで効率を上げるとか、PEARのクラスを利用して実装の時間を減らすということが書かれていて、実際のサンプルプログラムもそれらの技術を使って作られていることが多いです。  しかし、PHPをまだ習熟できていない私は、それらの技術が出てくる所為でプログラムを理解することに苦しむことがあります。エラーがあっても、その原因を特定するのに時間がかかってしまったり、PEARのマニュアルを読むだけでも一苦労だったりします。  そこで皆さんの意見をお聞きしたいのですが、PEARやSmartyは是非とも使いたいものなのでしょうか?私はこういう所が気に入っているから使っているとか、ここがダメだから使っていないなどありましたら教えてください。  また、初心者だからこそPEARやSmartyを使ったほうが良いのでしょうか?

  • PHP
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 んっと…難しいところですね。 まず、質問者さんが「どういった立場でPHPを組んでいるか/学んでいるか」というのがあって。 個人的な趣味レベルであるなら、ぶっちゃけ「どっちでも」だと思います。 で、もうちょっと、例えば仕事としてとか、将来に向けてとかっていうスタンスであると過程して。 MVCフレームワーク(Smartyがこれにあたります)は、ビジネス用途として捉える場合、大変に重要です。また共有ライブラリや共有クラス(PEARがこれにあたります)を使う癖をつけておくこともまた、業務的には大変に重要です。 ただ…正直なところ、個人的にはSmartyにせよPEARにせよ…つくりが悪いです :-P 双方のソースコードを見ると一目瞭然なのですが。 なので、 ・MVCフレームワークを使うこと ・共有クラスを使うこと はお勧めいたしますが、 ・Smartyを使うこと ・PEARを使うこと はあまりお勧めできません(苦笑 もし勉強として使ってみるのであれば、PHPでフレームワーク系であれば、例えば Mojavi というものがありまして、これはなかなか美しいMVCフレームワークになっております。 文献などあまりないので苦労するかとは思うのですが、適当なタイミングで一度ご覧になってみてはどうでしょか? 参考URLに、MojaviのURLを貼り付けておきます。

参考URL:
http://iteman.typepad.jp/blog/files/hustling-mojavi.html
ORmituhide
質問者

お礼

アドバイスありがとうございます。 PHPを学んでいるのは、自分の作りたいHPが動的コンテンツがほとんどだったので、CGIやCMSなどを探した結果、自分で作るしかないということで勉強をしています。ほとんど趣味ですね。 MVCフレームワークや共有クラスが業務的に大変重要とのことですが、PHPがもっと理解できるようになったら使ってみようかと思います。その頃にはもっとつくりが良くなっていると思うので。

その他の回答 (1)

  • alioth
  • ベストアンサー率48% (13/27)
回答No.1

初心者が勉強でWebアプリを作る文には、無理にSmartyやPEARを使う必要はないでしょう。 あるていどPHPになれて、PHPの問題点を理解してから使った方がより有効に使えるかもしれません。 私の場合、PEARを使う理由はDBです。SQLインジェクションを防ぐ為のプレースホルダや、DB変更したときの影響がすくなくなることなどがメリットです。 Smartyについては、デザインとロジックを分離するために有効です。あるていどPHPになれたらMVCモデルについて調べてみてください。 Smarty等を使う理由がわかってきます。

ORmituhide
質問者

お礼

アドバイスありがとうございます。 確かにプレースホルダは初心者にもメリットが大きそうですね。 もう一度PEARを使うかどうか検討してみることにします。

関連するQ&A

  • HTML_QuickForm_Renderer_ArraySmartyの動作について

    こんにちわ。 今SMARTYの勉強をしており、色々サンプルスクリプトを動かしたりしているのですが、PHPからHTML_QuickFormを動かす分には全く問題ないのですが(http://pear.php.net/manual/en/package.html.html-quickform.tutorial.phpのサンプルスクリプトは動作します)、テンプレート上で使おうと思うと動きません。SMARTYはインストールされていますし、HTML_QuickForm_Renderer_ArraySmartyの存在も確認しました。どこか設定する箇所があるのでしょうか?PEARとSMARTYの連携について書かれている書籍やサイトも少なく、苦戦しております。アドバイスの程よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHP PEARのPagerをSmartyで使う

    初めまして、PEARのPagerを勉強していたのですが、Smartyで実装したいと思い試行錯誤していたらうまく表示されなくて困っています。 【PHP】 //PEARの読み込み、Smartyクラスの読み込み、MySQLクラスの読み込みは省略 //上記は正常に動作しています。 // テーブルの行数を数えます $sql = "SELECT COUNT(*) AS cnt FROM table_name;"; //レコード開始位置指定 $start = 0; //最大レコード数を指定 $limit = 10; // データを取り出すSQLを実行します。 $sql = "select * from table_name ORDER BY no DESC LIMIT $start, $limit"; $result = mysql_query($sql); while($rows = mysql_fetch_array($result)){ $res_data[]=array("title"=>$row['title'],"name"=>$row["name"],"no"=>$row["no"]); } //Pagerのパラメータを指定 $params = array( "itemData" => $res_data, "totalItems" => $limit, "perPage" => 6, "delta" =>5, "mode" =>"Jumping" ); //パラメータの連想配列を受け取る $pager =& Pager::factory($params); // ページデータの割り当て処理 foreach($pager->getPageData() as $item){ $res_data_page[] = $item; } //戻る/次/最初/最後のリンクとページリンクを返す $link = $pager -> getLinks(); //現在のページ番号を返す $currentPageID = $pager -> getCurrentPageID(); // テンプレート用に変数を設定 $smarty->assign('data', $res_data_page); $smarty->assign('pageNavi', $link['all']); $smarty->assign('currentPage', $currentPageID); ■tpl <table border="1"> <tr> <th>名前</th> <th>NO</th> <th>タイトル</th> </tr> {foreach from=$data item=i} <tr> <td>{$i.name}</td> <td>{$i.no}</td> <td>{$i.title}</td> </tr> {/foreach} </table> <p>{$pageNavi}</p> <p>{$currentPage}ページを表示</p> 参考URL http://meerweb.blog7.fc2.com/blog-entry-101.html データベースへの接続は出来ていて、ページャー機能は動いています。 取得しているデータ数もあっているのですが、全部1行目のデータだけ表示されます。 どなたか原因が分かる方いらっしゃいましたら、是非ともご教授ください。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • レンタルサーバー環境でのSmartyの設定

    御世話になります。 いくつかサイトや書籍で調べてみたのですが レンタルサーバー環境でのSmartyの設定がわかりません。 レンタルサーバーはロリポップを使っていますが、レンタルサーバーである以上 php.iniの設定も直接出来ませんし・・・ Smartyのマニュアル(和訳)にローカル環境下での設定が主です。(私が勘違いしているだけのような気はします。) ちょっと古いですが『基礎 PHP』のサンプルで試しあれこれ試してみても、やはり出来ませんでした。 どのようにすればレンタルサーバー上でSmartyを正常に動かせるのでしょうか? ご教示ください。お願いします。

    • ベストアンサー
    • PHP
  • smartyテンプレート読み込みについて

    Smarty動的Webサイト構築入門という書籍を見ながらSmartyを学習しているのですが、書籍のCD-ROMから落としたサンプルファイルを保存しているのですがどうしてもテンプレートを読み込むことができません。 03_01.php <?php require_once("../smarty/libs/Smarty.class.php"); $smarty = new Smarty(); $smarty->template_dir = "templates"; $smarty->compile_dir = "templates_c"; $smarty->assign("name", "Smartyさん"); $smarty->display("03_01.tpl"); ?> 03_01.tpl Hello, {$name}!! エラーメッセージ Warning: Smarty error: unable to read resource: "03_01.tpl" in C:\xampp\htdocs\smartybook\smarty\libs\Smarty.class.php on line 1092 03_01.phpは、C:\xampp/htdocs/smartybook/ren/に保存しています。 03_01.tplは、C:\xampp/htdocs/smartybook/templates/に保存しています。 どこが駄目なのか教えてください。 宜しくお願いします。

    • 締切済み
    • PHP
  • xserver Smarty PHP+MySQL

    xserver Smarty PHP+MySQL xserver(レンタルサーバー)でSmartyのtplが読み込まれません。 Xserver(レンタルサーバー)環境 MySQL5 バージョン:5.0.77 MySQL5 ホスト名:xxx.xserver.jp PHP Version 5.3.3 include_path .:/usr/share/php53/pear :/usr/share/php Xserver PHP関連の仕様一覧 PEARインストール済み <インストール済みライブラリ> ・Archive_Tar ・Auth ・Console_Getopt ・DB ・HTML_Common ・HTML_QuickForm ・HTTP ・HTTP_Header ・HTTP_Download ・Mail ・Net_SMTP ・Net_Socket ・Pager ・PEAR ・XML_Parser ・XML_RPC ・Structures_Grap データベースは同じくXserverに設置されているphpmyadmin(MySQL5)で作成しました。 /xxx.xsrv.jp/内に 【php_libs】   [config]     ・config.inc.php   [module]     ・build_screen.inc.php     ・menu.inc.php     ・MYDB.inc.php     ・sub.inc.php       [smarty]     ・cache     ・configs     ・libs     ・templates     ・templates_c 【public_html(DocumentRoot)】   ・testsmarty.php   ・testsmarty.tpl を置いています。 以下のコードでエラーがでます。 Warning: Smarty error: unable to read resource: "testsmarty.tpl" in /home/xxx/xxx.xsrv.jp/php_libs/smarty/libs/Smarty.class.php on line 1088 どこが間違っているのか教えて下さい。 ●testsmarty.php <?php $documentroot = dirname( __FILE__) . '/'; require_once $documentroot . '../php_libs/config/config.inc.php'; require_once( _SMARTY_LIBS_DIR . "Smarty.class.php"); $smarty = new Smarty; $smarty->template_dir = _SMARTY_TEMPLATES_DIR; $smarty->compile_dir = _SMARTY_TEMPLATES_C_DIR; $smarty->config_dir = _SMARTY_CONFIG_DIR; $smarty->cache_dir = _SMARTY_CACHE_DIR; $smarty->assign("title", "タイトル名"); $file = 'testsmarty.tpl'; $smarty->display($file); ?> ●testsmarty.tpl {$title} ●config.inc.php <?php //---------------------------------------------------- // デバッグ表示 true / デバッグ表示オフfalse //---------------------------------------------------- // define("_DEBUG_MODE", true); define("_DEBUG_MODE", false); //---------------------------------------------------- // データベース関連 //---------------------------------------------------- define("_DB_USER", "xxx_sample"); define("_DB_PASS", "password"); define("_DB_HOST", "tcp+xxx.xserver.jp"); define("_DB_NAME", "xxx_sampledb"); define("_DB_TYPE", "mysqli"); define("_DSN", _DB_TYPE . '://' . _DB_USER . ':' . _DB_PASS . '@' . _DB_HOST . '/' . _DB_NAME); //---------------------------------------------------- // 認証関連 //---------------------------------------------------- // 会員認証に使うテーブル名 define("_DB_MEMBER_TB", "m_member"); // 管理者認証に使うテーブル名 define("_DB_SYSTEM_TB", "m_system"); // ユーザー名を格納するカラム名 define("_DB_USERNAMECOL", "username"); // パスワードを格納するカラム名 define("_DB_PASSWORDCOL", "password"); //---------------------------------------------------- // 会員・管理者 処理分岐用 //---------------------------------------------------- // 会員用フラッグ define("_MEMBER_FLG", false); // 管理者フラッグ define("_SYSTEM_FLG", true); //---------------------------------------------------- // セッション名 //---------------------------------------------------- // 会員用セッション名 define("_MEMBER_SESSNAME", "PHPSESSION_MEMBER"); // 管理者用セッション名 define("_SYSTEM_SESSNAME", "PHPSESSION_SYSTEM"); //---------------------------------------------------- // ファイル設置ディレクトリ //---------------------------------------------------- //$smarty->○○○を使わない場合下記で表示されました。 define( "_PHP_LIBS_DIR", "/home/xxx/xxx.xsrv.jp/php_libs/"); // 設定ファイル define( "_CONFIG_DIR", _PHP_LIBS_DIR . "config/"); // 機能ファイル define( "_MODULE_DIR", _PHP_LIBS_DIR . "module/"); //---------------------------------------------------- // Smarty関連設定 //---------------------------------------------------- // Smartyのlibsディレクトリ define( "_SMARTY_LIBS_DIR", _PHP_LIBS_DIR . "smarty/libs/"); // Smartyのテンプレートファイルを保存したディレクトリ define( "_SMARTY_TEMPLATES_DIR", _PHP_LIBS_DIR . "smarty/templates/"); // Smartyのlibsディレクトリ Webサーバから書き込めるようにします。、 define( "_SMARTY_TEMPLATES_C_DIR", _PHP_LIBS_DIR . "smarty/templates_c/"); // Smartyのlibsディレクトリ define( "_SMARTY_CONFIG_DIR", _PHP_LIBS_DIR . "smarty/configs/"); // Smartyのlibsディレクトリ Webサーバから書き込めるようにします。、 define( "_SMARTY_CACHE_DIR", _PHP_LIBS_DIR . "smarty/cache/"); ?>

    • 締切済み
    • PHP
  • pear_info.phpが表示できません

    PCをサーバーにしてPHPの練習をしている初心者です。最近PEARをインストールしたのですが、機能しなくて困っています。試しにpear_info.phpを作ってブラウザで開くと下記の警告がでました。 ---------------------------------------------- <?php require_once("PEAR/Info.php");//←line 8 $info = new PEAR_Info(); $info->show(); ?> Warning: require_once(PEAR/Info.php) [function.require-once]: failed to open stream: No such file or directory in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\pear_info.php on line 8 Fatal error: require_once() [function.require]: Failed opening required 'PEAR/Info.php' (include_path='.;C:\php5\pear') in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\pear_info.php on line 8 かなりの時間を費やして原因を調べていたのですが、どうしても解決する事ができません。助言を頂けると非常にありがたいです。 php.iniのパス include_path = ".;c:/php/includes;C:/php/PEAR" また、phpinfoで Configuration File (php.ini) Path の項目は C:\WINDOWS となっています。 上記に記載したエラーで「include_path='.;C:\php5\pear'」と表示されている部分がありますが、C:\php5と言うフォルダは作っていません。C:\phpと言うフォルダならあります。 PCの環境  Windows XP  Apache  2.2.6  PHP 5.2.4

    • 締切済み
    • PHP
  • PHP+Smarty+MySQLで、データベースの値を読みだしたい。

    PHP勉強中、Smarty初心者の者です。 PHPだけならば、DBから値を読みだすことは容易にできますが、そこにSmartyが絡んでくるとさっぱりわかりません。 ただ単に、あるDBのテーブルにある値を表示させるというプログラムをSmartyを使った場合で教えていただけないでしょうか! http://d.hatena.ne.jp/haku69/20070406/1175865347 このサイトで同じことをやっているとは思うのですが、 require_once("bbs_top_model.php5"); require_once('SmartyManagerClass.php'); としているので、このソースをそのまま使ってもたぶんできないと 考え、質問させていただきます。 わからないからすぐ質問しているというわけではなく、自分で本やサイトを調べましたが、わからず、立ち止っている時間がもったいないので質問させてもらいます。 お優しい方、よろしくお願いします!

    • 締切済み
    • PHP
  • XAMPPでPEARのAuthが動作しない

    XAMPPでPEARのAuthが動作しません。 XAMPPのバージョンは1.7.4です。 使ったサンプルは、Pearのサイトに載っている以下のサンプルです。 (認証の選択的な使用を試してみました。) http://pear.php.net/manual/ja/package.authentication.auth.intro.php プログラムを置いた場所は C:\xampp\htdocs\hoge です。 ●考えられる原因 1.XAMPPでPEARのインストールが出来ていない 2.SQLからデータを取得するときに何らかのエラーが起きている 1.の根拠として、go-pear.batを動かした時にエラーが出てインストールできなかったので phpのコードには require_once 'C:\xampp\php\PEAR\Auth.php'; のように絶対パスで指定している。 ※ただしphpを動かした時にエラーが出ません。(notisは消してます) インストールがうまくいかない解決方法として以下 を試してみましたが結局、うまくいきませんでした。 http://ameblo.jp/phpwalker/entry-10422457243.html 2.の根拠として、SQLのテーブルにログイン用の値が見つからない たぶんこれだと思うのですが、webauthというテーブルがありました。 しかし中には1行目にnameとpassというセルと 2行目にはxamppとwamppとうセルがありました。 入力したパスワードなどがありませんでした。 SQLは初心者なのでデータをテーブル構造で保存するものという認識しかありません。 正しい検証方法も出来たら教えてください。 PEARのAuthが動作しない原因はなんでしょうか? ご教授、お願いします。

    • 締切済み
    • PHP
  • ロリポップでPagerを使うには?

    質問させて下さい。 PHP Smartyなどで開発をしている者です。 サーバはロリポップを使っています。 ページング機能を使いたくて、PEARのPagerを利用したいと思っています。 いくつか参考サイトを見たりしましたが、情報が古かったり簡略化されてたりと、いまいち分かりません。 元々PHPでページング機能を実装していたのですが、Smartyでページング機能を実装するのが困難だったので、PEARのPagerがよいのかな?という事で試行錯誤しています。 是非とも教えて下さい。

    • ベストアンサー
    • PHP
  • PEARのXML/Unserializer.phpが見つからない

    PHP5をインストールしたローカル環境で、落ちていたサンプルコードを改造して使おうとしているのですが、PearのXML/Unserializer.phpが無いと言われます。 PEARのサイトで検索してみても見つかりません。 どこで見つけたらよいのでしょうか? それともPHP5では使えないのでしょうか? ちなみに落ちていたサンプルコードは以下の通りです。 <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>PHPのPEARパッケージであるServices_Amazon</title> <meta name="description" content="Amazonウェブサービスを簡単に扱うことができるPEARのServices_Amazonを使ってみる。" /> </head> <body> <form method="POST" action="<?php $_SERVER['PHP_SELF'] ?>"> 書籍検索: <input type="text" name="keywd" size="30" maxlength="255" value="<?php print($_POST['keywd']); ?>" /> <input type="submit" value="検索" /> </form> <?php // 検索ボックスに入力されたかの判定 if($_POST['keywd'] != '') { $AWSAccessKeyId = "****************"; $Version = "2008-04-07"; $AssociateTag = "working16h-22"; $SearchIndex = "Books"; $ResponseGroup = "Medium"; $Keywords = htmlspecialchars($_POST['keywd']); require_once 'Services/AmazonECS4.php'; $amazon = new Services_AmazonECS4($AWSAccessKeyId,$AssociateTag); $amazon->setLocale('JP'); $option = array( 'Keywords' => $Keywords, 'Sort' => 'salesrank', 'ResponseGroup' => $ResponseGroup, 'Version' => $Version, ); $result = $amazon->ItemSearch($SearchIndex,$option); if(PEAR::isError($result)){ die($result->message); } foreach ($result["Item"] as $key => $value){ $ama1 = $value["DetailPageURL"]; $ama2 = $value["ItemAttributes"]["Title"]; $ama3 = $value["ItemAttributes"]["Author"][0]; print('<p>タイトル:<a href="' . $ama1 . '" target="_blank">' . $ama2 . '</a><br />著者:' . $ama3 . '</p>'); } } ?> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう