• 締切済み

PHPのレガシーな設計について

あるお仕事でフレームワークを使えないという状況に陥っております。 月々数千円のホスティングサーバーでの運用になるのですが、今となってはレガシーなSmarty+Pearの組み合わせでの設計を指定されています。 PHPバージョンは5.3です。ホスティングなので変えられません。 CakeやFuelがそのホスティングで使用できるかはテストしないと分からない状況です。 過去の遺産でSmarty+Pearのコードはいろいろあるのですが、DBの接続もPear::MDB2を使っていたりといまいちです。PDO使いたいけどいちいち書き換えが面倒・・。 また、ホスティングなので気まぐれに5.4や5.5などに上げられると、レガシーな設計だと動作が心配です。 どうのように思われますでしょうか。識者の方からのご意見をお待ちしてます。

みんなの回答

  • shockatz
  • ベストアンサー率80% (153/191)
回答No.2

レガシー php 指定での開発案件? 私の所でも、大手 SIer がらみの php 案件は全部それですわwww これがjavaとかc#、RoRですと、全部 MVC フレームワークになるんですが、何で php だけ? と思うのですが、やはりフレームワーク自身の安定性や成長性、バージョン変更時のコード互換性など、言われてみれば思いあたるフシもあります。 CakePHP や FuelPHP はコミュニティが活発なのは日本だけ、Laravel など海外の有名フレームワークは日本で全然実績がないとか、継続性を指摘されることが多いです。 でもまあ、発注者の立場ですと、納品されたコードを部分的に保守するのが仕事なので、思い切りスキルの低いチームでも対応できるように、という事は理解できます。 いっそのこと(当社のように)普段の開発がフレームワーク一色なら、思い切ってレガシー php 案件は全部社外スタッフに発注されたらいかがですか? 変な話ですが、開発難度の高いはずのレガシー php のほうがずっと容易に人員を調達できますし、請負先のコストだって3割以上低いし。 不条理と言えば不条理な話なんですが、レガシー php に我々が合わせる必要もないのと違います?

begin96
質問者

お礼

放置してました。すみません。 ご意見ありがとうございました。 クライアントの意向に沿った開発というのが大前提ではありますので、今回は仕方なくノンフレームワークでいきます。 しかし、PHPではデファクトとなるフレームワークが定まらないですよね。その辺りもPHPでの受注開発を面倒にしている要因かもしれませんね。 一時Ethna使ってたこともありますが、今はほとんどすたれちゃってますし・・。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

PEARはPHP5.4あたりからSTRICTで運用しようとすると 挙動があやしくなってきていますね ただしPEAR自体は強力なライブラリ群なので、使わない手はないでしょう。 (PHPマニュアルの中でさえPEARを推奨する記載があるくらいですから) またDBの接続については「書き換えが面倒」レベルなら少しがんばって PDOに切り替えた方が今後のことを考えるとベターだと思います 本来SQL自体が環境に左右されにくい仕様なのですから、 接続方法の変更はさほど負担にならないかと思います。 肝心のフレームワークについては利用している方にとっては 使用しないことによる非効率具合は相当なものでしょう。 そればっかりはクライアントにメリットをアピールして説き伏せるしかないですが 逆に導入してしまうとその環境をクライアントに強要することになるので 別の業者が入った時に「こんな使えない環境を利用しやがって」と 同じようなトラブルの原因になりかねません。 クライアントが望むのであればソリッドな環境をベースにするしかないと思います。

begin96
質問者

お礼

ご意見ありがとうございます。 確かにPEARは大変便利なライブラリですね。これまでいろいろ助けられました。 クライアントを納得させるほどのメリットを語ることが出来ればいいのですが・・。 フレームワークも最初は規約を覚えるのが大変でしたけど、慣れると非常に有効ですね。 クライアントはその規約を理解するコストを嫌がっているようですが。 Cake+Smartyという手で納得してもらおうかとも思ったのですが、それもダメでした。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHP5とORACLE10の接続方法

    参考意見を頂ければと思い質問しました。 現在PHP5+ORACLE10gRelease2でDB接続をしようと思っています。 またORACLEを使用したことがなく調べている状況です。 Oracle8関数の使用やPEAR、PDOなど何種類かあるよう ですが、実際現時点でどういった接続方法が一般的なのでしょうか。 環境としてはLinuxでwebサーバ、DBサーバを分けて接続予定です。 アドバイス等ございましたらよろしくお願いします。

    • ベストアンサー
    • PHP
  • PDO利用できますか?

    PHP5.1でレンタルサーバーにてMySQLと接続しようとしています。 今までPear::MDB2でおこなっていたのを、今回新たにPDOにて接続したいと考えております。 そこで質問なのですが、phpinfoにて確認してどこがどうなっていればPDOが利用可能なのでしょうか? ざっと確認したところ、PDOというセクションのPDO Driversという項目にmysqlという文字があるのですが、それさえ表示されていれば問題なく使用できるということでしょうか。 ググってみたらphp.iniでPDOを利用するように設定変更しなければならないようなサイトをたくさん見たのですが、標準で最初から利用できる設定になっていないのでしょうか? 実際に設置して確認できれば良いのですが、それが出来ない状況です。 よろしくおねがいします。

    • ベストアンサー
    • PHP
  • classの使い方について

    とある書籍にて require_once "MDB2.php"; require_once "Smarty.class.php"; class BBS extends Smarty{  private $_db;  public function __construct(){   $this->Smarty();   $this->template_dir = "{$dir}/themes";   $this->compile_dir = "{$dir}/templates_c";   $this->config_dir = "{$dir}/config";   $this->config_load("app.conf",basename($_SERVER["SCRIPT_NAME"],".php"));   $this->security=TRUE;   $this->secure_dir=array("{$dir}/image");   $this->_db=MDB2::connect($this->get_config_vars("db_string"));  }  public function __destruct(){   if(!PEAR::isError($this->_db)) $this->_db->disconnect();  }  public function get_db(){ return $this->_db; } } $Bbs = new BBS(); $db = $Bbs->get_db(); $db->setCharset('ujis'); と、あるのですがサーバーがPHP4の為、それに適用させたいのですがどのようにすればいいのでしょうか。ローカルサーバーはPHP5なので問題ないのですが。 class BBS extends Smarty{  var $_db;  function BBS(){   $this->Smarty();   $this->template_dir = "{$dir}/themes";    ~省略~  }  function shutdown(){   if(!PEAR::isError($this->_db)) $this->_db->disconnect();  }  register_shutdown_function("shutdown");  function get_db(){ return $this->_db; } } 上記で試してみたのですが Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in D:\aki\public_html\1\class\smarty.php on line 33 とエラーが出てしまいデストラクタがうまくできない状態です。 PHP4のクラスについて調べてみたが応用できそうなのが見つからなくて・・・ ご教授を願えたらと思います。

    • 締切済み
    • PHP
  • pearのパッケージがインストールできません

    初めまして。宜しくお願いします。 環境はwindowsXP、PHP5.1.2です。 コマンドプロンプトでpearのパッケージMDB2をインストールしようとしたのですが、「php.exeは有効なwin32アプリケーションではありません」と表示され、続けて「アクセスが拒否されました」となりインストールできません。以前同様のやり方でpearのDBはインストールできました。 原因を探してみたら、どうやらphp.exeの破損かも知れないのですが、対処法がわからず困っています。 どなたかこの状況をご存知の方がいましたら、このようになったと思われる原因と対処法をどうかご教授ください。 宜しく御願いいたします。

    • 締切済み
    • PHP
  • MySQL テーブルの存在チェックでエラー

    宜しくお願いします。 環境 php5 MySQL5.6 PEAR (mdb2) Smarty レンタルサーバー(ロリポップ:チカッパ)でテスト確認 ---------------- データーベースにテーブルが存在するかどうかのチェックについてお聞きします。 下記コードをご確認の上よろしくお願いします。 テーブルが存在しない時は、エラーオブジェクトがかえるのでしょうか? それとも0(ゼロ)などの数値がかえるのでしょうか? また、テーブルが存在しないかどうかのチェックは下記のようにすれば大丈夫でしょうか? ------------------------------------.. //$mdb2にはDBへの接続情報はきちっと格納されています。 $sql = "SHOW TABLES FROM dbname LIKE 'tablename'"; $request = $mdb2->query($sql); //★ if($request->fetchRow()){    //※テーブルが見つかった場合の処理 }else{ //※テーブルが見つからない場合の処理 } ------------------------------------ 上記を実行すると、 テーブルが存在しない際は、エラーとなります。 ※ Call to undefined method MDB2_Error::fetchRow() テーブルが存在してるときは、エラーとなりません。 そもそも、テーブルの存在確認で、テーブルが存在しない際は、 エラーオブジェクトがかえるようになっているのでしょうか? それともエラーとはならず、0など値が返るもんでしょうか? ★の位置でチェックすると、エラーオブジェクトが返ってきています。 if (PEAR::isError($request)){ echo $sth->getDebugInfo(); exit(); } その為、★より以下を実行されていなく、 ※ Call to undefined method MDB2_Error::fetchRow() のエラーがでて引っかかってると思います。 実現したいこととしては、 DBにテーブルが無いときは、新規にテーブルを作成する。 というものです。 もし、 if($request->fetchRow()){ ・・・・ }else ・・・・ } に問題があれば修正したいので、最良の書き方を教えていただくとありがたいです。 どうぞ宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • queryの使い方

    お世話になります。 queryの使い方で質問です。 DB内に下記の様なデータが在ります。 -------------------------------- | id | header | footer | -------------------------------- | 1 | HTML文 | HTML文 | -------------------------------- テーブルとフィールドを指定してデータ(HTML文)を抜き出したいのですが、いまいち方法が理解できません。 queryの使い方を理解していないのだと思います。 以下、PHPに記述しているコードです。PHP自体は問題なく動いてます。 PHP---------------------------------------------------- $footer =& $mdb2 -> query('select footer from where id=1'); if (PEAR::isError($footer)) {die($footer->getMessage());} $smarty->assign("footer",mb_convert_encoding($footer,"SJIS","UTF-8")); 表示---------------------------------------------------- MDB2 Error: syntax error 宜しくお願いします。

  • カーソルエラー

    カーソルエラーについて質問です。 phpからpearを使ってoracleへ接続しています。 バッチ処理で大量にSQL文(SELECT,INSERT,UPDATE)を発行したいのですが、カーソルエラーになってしまいます。 途中の処理でエラーになった場合はロールバックしたい為最後までコミットできません。また、なるべく少ないSQL発行で済むようにプログラムを組み替え済みです。 で、少々手詰まりといった状況なのですが、コミットする以外でカーソルエラーを回避する方法はあるでしょうか? DB設計から見直さないとだめですかね…。

    • 締切済み
    • PHP
  • cakePHPを自分の現状ではいかに学ぶべきか?

    PHPは、オブジェクト指向以外はひと通りわかります。 オブジェクト指向は見たり少しいじったりという程度でしたらわかりますが、1から作ることはきついレベルです。 で、cakePHP2.xを勉強しはじめているのですが、CookBook(日本語版)を読んでCookBookにあるとおりのブログをつくるところまではできました。 ですが、CakePHPの概要の次(コントローラ)以降になって、急に、かなり理解するのに時間がかかっています。 MVC自体については、昔Smartyを個人的に使っていたので、Smartyでウェブ構築ができる程度にはわかります。 が、cakaやzendのようながっしりしたフレームワークに取り組むのはこれがはじめてです。 (PHP以外にも) このような状態なのですが、このままCookbookを進めていくよりも、効率的な方法はありますでしょうか? 現状だと、Cookbookでわからない部分を毎回毎回ぐぐって、相当時間がかかっています。 本にたよろうかとも思ったのですが CakePHP2 実践入門 (WEB+DB PRESS plus) [単行本(ソフトカバー)] http://www.amazon.co.jp/dp/4774153249/ Webアプリ開発を加速する CakePHP2定番レシピ119 [単行本] http://www.amazon.co.jp/dp/4798039519/ が定番っぽいですが、 ユーザレビューを読むと、評価がわかれていて、 こういう状況の自分にとってどうなのか迷ってしまいます。 今後どのように学んでいったらいいでしょうか? とりあえずcookbookをざっと、理解できなくてもざーっと読んでしまい、 「定番レシピ119」にのっとって組んでみて、Cookbookに戻る。。。。というのはどうでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP 画面設計

    PHPでちょっと遊べるページを作ろうとしています。ですが、スタート画面を作り見に行くとエラーと文字化けだらけとなってしまいます。 <html> (start.php) <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <title>トントン商店です</title> </head> <body> <?php echo<<<EOD <h1>トントン商店です</h1> <ul> <li>御用の方は下にある入口を押してね</li> <li>間違えて来た方は立ち去ってください</li> </ul> EOD; $rand = rand(0, 100); ?> <form action="input.php" method="POST"> <input type="submit" value="入口"/> <input type="hidden" name="rand" value="$rand"/> <input type="hidden" name="count" value="1"/> </body> </html> エラーが、 Warning: Unexpected character in input: ' ' (ASCII=27) state=5 in ~/opening.php on line 9 Notice: Undefined variable: B in ~/opening.php on line 9 Notice: Undefined variable: G in ~/opening.php on line 9 9以外にも11,12にも同じようなのが出ます。 また、乱数を入れたrandを次のページに渡そうとしましたが、次のページに乱数ではなく、$randという文字が表示されてしまいます。文字化けは、 .htmlに変えて少しいじれば直るのですが、rand()関数を使うため.phpでやりたいのですが、どうすればいいかわかりません。 エラーの対処と次のページへの渡し方について、誰か正しい書き方を教えてください。

    • ベストアンサー
    • PHP
  • owncloudのインストールについて

    Scientific Linux release6.3(64bit)を使用しています。 owncloudのインストールをしているのですが、初期設定 の段階からつまづいてしまいました。 yumでepelリポジトリからインストールしています。 実際に行った手順を書き記します。 # yum --enablerepo=epel install owncloud owncloud noarch 4.5.8-1.el6 epel audit-libs-python x86_64 2.2-2.el6 sl libXpm x86_64 3.5.10-2.el6 sl libcgroup x86_64 0.37-7.el6 sl libsemanage-python x86_64 2.0.43-4.2.el6 sl mysql x86_64 5.1.67-1.el6_3 sl mysql-server x86_64 5.1.67-1.el6_3 sl owncloud-httpd noarch 4.5.8-1.el6 epel owncloud-mysql noarch 4.5.8-1.el6 epel perl-DBD-MySQL x86_64 4.013-3.el6 sl perl-DBI x86_64 1.609-4.el6 sl php x86_64 5.3.3-22.el6 sl php-PHPMailer noarch 5.2.2-1.el6 epel php-channel-dropbox-php noarch 1.3-3.el6 epel php-channel-sabredav noarch 1.3-3.el6 epel php-cli x86_64 5.3.3-22.el6 sl php-cloudfiles noarch 1.7.11-2.el6 epel php-common x86_64 5.3.3-22.el6 sl php-dropbox-php-Dropbox noarch 1.0.0-4.el6 epel php-gd x86_64 5.3.3-22.el6 sl php-getid3 noarch 1:1.9.3-1.el6 epel php-ldap x86_64 5.3.3-22.el6 sl php-mbstring x86_64 5.3.3-22.el6 sl php-mysql x86_64 5.3.3-22.el6 sl php-pdo x86_64 5.3.3-22.el6 sl php-pear noarch 1:1.9.4-4.el6 sl php-pear-Auth-SASL noarch 1.0.4-1.el6 epel php-pear-Cache-Lite noarch 1.7.12-1.el6 epel php-pear-Crypt-Blowfish noarch 1.1.0-0.4.rc2.el6 epel php-pear-DB noarch 1.7.13-3.el6 epel php-pear-HTTP-OAuth noarch 0.2.2-1.el6 epel php-pear-HTTP-Request2 noarch 0.5.2-2.el6 epel php-pear-Log noarch 1.12.7-1.el6 epel php-pear-MDB2 noarch 2.5.0-0.9.b5.el6 epel php-pear-MDB2-Driver-mysqli noarch 1.5.0-0.8.b4.el6 epel php-pear-Mail noarch 1.2.0-1.el6 epel php-pear-Net-Curl noarch 1.2.5-4.el6 epel php-pear-Net-SMTP noarch 1.6.1-1.el6 epel php-pear-Net-Socket noarch 1.0.10-1.el6 epel php-pear-Net-URL2 noarch 0.3.1-2.el6 epel php-pear-XML-Parser noarch 1.3.4-1.el6 epel php-pecl-oauth x86_64 1.2.3-1.el6 epel php-phpass noarch 0.3-2.el6 epel php-sabredav-Sabre noarch 1.0.0-9.el6 epel php-sabredav-Sabre_CalDAV noarch 1.6.4-3.el6 epel php-sabredav-Sabre_CardDAV noarch 1.6.5-2.el6 epel php-sabredav-Sabre_DAV noarch 1.6.5-1.el6 epel php-sabredav-Sabre_DAVACL noarch 1.6.0-3.el6 epel php-sabredav-Sabre_HTTP noarch 1.6.4-3.el6 epel php-sabredav-Sabre_VObject noarch 1.3.5-2.el6 epel php-xml x86_64 5.3.3-22.el6 sl policycoreutils-python x86_64 2.0.83-19.30.el6 sl setools-libs x86_64 3.3.7-4.el6 sl setools-libs-python x86_64 3.3.7-4.el6 sl インストール完了後、iptablesを一旦停止させました。 # service iptables stop その後、httpdを起動させました。 # service httpd start ブラウザよりowncloudでアクセスします。 http://localhost/owncloud 管理者アカウントの設定で任意のユーザ名とパスワードを使用し 「Finish Setup」をクリックすると「Failed to connect to database」 と表示され、データベースにアクセスできません。 初期状態ではsqliteデータベースを使用するように設定されており そこがまずいのかと思い、mysqlを使用するよう設定をしました。 # service mysqld start # mysql -u root -p owncloudデータベースの作成 mysql> create database owncloud default character set utf8; owncloudユーザの作成 mysql> grant all on owncloud.* to owncloud@localhost identified by 'password'; ブラウザよりowncloudでアクセスします。 http://localhost/owncloud 管理者アカウントの設定で任意のユーザ名とパスワードを使用し、Advancedをクリックします。 Data folder /var/lib/owncloud/data MySQL データベースのユーザ名:owncloud データベースのパスワード:password データベース名:owncloud localhost 「Finish Setup」をクリックすると「Failed to connect to database」 いずれのDBでもデータベースに接続できません。 これ以外に設定が必要な個所はあるのでしょうか?