Php

XAMPPを使う時

  • POST
注意書き もしこの記事に訪れたのがデザイナーさんや経営者に近い立場の存在であれば、 どうか参考程度の軽い気持ちで読んで欲しい。 あなたにはもっと大事なやるべきことがある。 それはPHPのバージョンやライブラリの管理方法を死ぬ気で勉強する事ではない。 これはWebプログラマを目指す初学者をターゲットとしている。 そのXAMPPは何故インストールした? XAMPPを入れる動機は沢山ある。 しかし、その大多数は自分でLAMP環境を作る知識がないからぐぐった結果楽が出来そうだから入れたというのが真実だろう。 LAMP環境を自前で作れる人間でXAMPPを利用している人は殆ど居ない。 WindowsではLAMPサーバーになりえない PHPもMySQLもWindowsで建てること自体は可能だ。 ソースコードは公開されているからコンパイルすれば動くし、 公式サイトではサーバーソフトのWindowsバイナリだって配布されている。 しかし、初心者がPHPの動作環境にWindowsを選ぶものではない。 LAMPのLがなぜLinuxなのか? それはサーバー用途で頭一つ抜けたシェアを誇っているのがLinuxだからだ。 ライセンス料金が高くGUIがひっついてる分パフォーマンスが画面の描画に食われるWindowsではない。 では何故Linuxを選ぶ必要があるのか? これはぐぐった時の記事の量に影響している。 WindowsでPHPサーバーを建ててる人の記事なんてない。 WindowsでMySQLサーバーを建ててる人の記事なんてない。 これが後々の情報量の少なさで苦しむハメになる。 初心者がXAMPPで構築を楽すると後々どうなるのか? XAMPPは破壊的な変更が往々にして加わる。 PHPやMySQLのバージョンは最新が入る インストールの手段がブラックボックス 設定ファイルの置き方や初期設定はその時点に応じてコロコロ変わる XAMPPでPHPやMySQLの設定を変更する記事はぐぐれば沢山出てくるが、 そのほぼ全てが古くて使えない情報と思って間違いない。 いくら正しくてもそのバージョンのXAMPPの情報であって、貴方が検索して出てきたXAMPPのバージョンで同じ手法が使えるとは限らない。 貴方が頼れる情報はXAMPPに同梱されているドキュメントと、XAMPPの公式サイトの掲示板(英語)のみだ。 必然的にPHPとMySQLのインストールに関する深い知識も必要で、 XAMPPの挙動とその意図を正確に把握出来る程度にはなっている必要がある。 こんな有様でPHP初心者に勧めるわけにはいかない。 初心者のXAMPPあるある 2つのPHP.iniがある理由がわからず困惑 どうすればMySQLに接続したり設定変更出来るの? ライブラリの追加&更新に手間取る…結果諦める 調べたくてもWebにあるのはLinuxでの設定方法であり、XAMPP利用時は書いてない ざっと思いつく辺りではこの辺か 要するに環境構築面で大幅に苦労する事になる XAMPPを使う時 前項目で書き記したようにとにかく情報がない。 だからWindowsサーバーで何度PHPやMySQLをインストールしたか分からない上級者が手抜きする為に入れるものだ。 もし他人からXAMPPの使用を薦められた場合は注意したほうがいい。 「あなたはPHPを深くまで知る必要がない」と思われている。 その言葉に続くのは「どうせ (あなたはデザイナーだ or 勉強しないだろう) から」 つまり、教える事を放棄して軽くあしらわれてる。 初学者が今からLAMPサーバーを構築して勉強したいのなら、 まずVagrantでLinuxを扱うところからはじめよう。

【PHP】PHP: The Right Way

  • POST
良さげなWebサイトを発見した。 PHP: The Right Way http://ja.phptherightway.com/ ちょっと読んだ ようこそ 時代遅れの情報がウェブ上にあふれている。そんな情報を見たPHP初心者は戸惑ってしまうだろう。そして、まずい手法やまずいコードが広まってしまう。 そんなのはもうやめよう。PHP: The Right Way は気軽に読めるクイックリファレンスだ。PHPのベストプラクティスやコーディング規約、 そしてウェブ上のよくできたチュートリアルへのリンクをまとめた。 感想 全くもってその通り、 自分が今まで勉強してきた軌跡が目次化されていて、 そしてこれから勉強したい物も載ってる。 もっと早く知ってればよかったが、きっと前の自分ならこのサイトの価値が全く理解出来なかっただろうな。 こんなサイトって結構多いよね ローカルにコピペすると動かない 間違った見識の元に書かれてて、どう考えても動かない 机上デバッグですぐ分かる 動作確認位しろよ そういうのは後輩にとっても害悪なので、出来るだけコメントに残すようにしている。 しかし、そういうサイトに限ってこんな条件がついててもやもやする - コメント出来ない - コメントはログインユーザーのみ承認しています - コメントは管理人の承認待ちです - そもそもコメント残す欄が無い - SEO頑張ってたのか意外とGoogleの検索順位が高い - 最終更新日時が大昔で止まってる 技術ブログは良いのか? まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西 … http://www.slideshare.net/77web/phperphp2013-lt ごく最近に作られたパワポのようだ。間違いなくこの人の責任ではない。 この人自体はスキルも高いと推測出来るし、問題ないと思う。 でも、初心者との比率がなぁというのは常々感じていた。 HTMLやCSS、JavaScriptもそうなのだが、レベルの低い実装が蔓延っていて、 いくら検索しても欲しい情報が手に入らない事が往々にしてある。 エンジニアとしてどうしていくべきか 【独断と偏見】C#erでも許せるかも知れないフルスタックPHP http://qiita.com/sukobuto/items/ff840d34395fdb6e4e68 全然関係のない記事だけれど、 前半部がとても指針として参考になるので紹介。 PHP は書けば動くから簡単だよ という罠 「書けば動く」というのは本当に罠でしかありません。 「書けば伝わる」日本語がないのと同じです。 我々が国語を学んだのと同じように、意図を表現することを繰り返していかない限り、ほぼ使い捨てのプログラムを書いては引き継ぎ担当者や1年後の自分の首を絞めることになります。 「動けばいい」という人にはできる限りの手を尽くして近寄らないようにすべきです。 それでも PHP を選択するメリットがあるとき、PHP は裏切らない PHP という案内役のいない言語を使わざるをえない場合、最も使いやすい状態にできるかどうかにかかっている。 結論 ただただPHPをDisるのではなく、 有識者がただしく案内していくべき言語なのだ。 僕も有識者を目指す人間の一人として、強くありたいものだ。

【PHP】エラーログを閲覧

  • POST
PHPのエラーログを監視する PHPのエラーは常に画面へ出力されるとは限らない。 例えばコンソールからPHPファイルを実行した場合、 php.iniの設定によってはincludeしたファイルの関数衝突によるFatalエラーはコンソールに表示されない。 PHPのログファイルって何処に吐き出される? php.ini内でerror_log = "xxx"と記載したxxxにエラーログが吐出される http://jp.php.net/manual/ja/errorfunc.configuration.php#ini.error-log これはphpinfoで確認できるので、 コンソールなら以下のコマンド打つだけで取得出来て楽 後はそのままtailコマンドで監視すればいい # php -i | grep error_log error_log => /var/log/php_error.log => /var/log/php_error.log # tail -f /var/log/php_error.log エラー出ないぞ Apacheを通した場合、ApacheのエラーログにPHPのエラーが吐き出される場合がある CentOSの場合、「/etc/httpd/conf/httpd.conf」ファイル内に記載すると、 その中の記述に従ったディレクトリに作成される # vi /etc/httpd/conf/httpd.conf <VirtualHost *:80> ServerName hogehoge.com:80 ServerAdmin test@hogehoge.com DocumentRoot "/var/www/html/" ErrorLog logs/php.err_log CustomLog logs/php.acc_log combined <Directory "/var/www/html/"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> # tail -f /etc/httpd/logs/php.err_log 上記のErrorLog logs/php.err_logに注目、 デフォルトだとこんな感じの設定になっていると思うが、カレントディレクトリは/etc/httpdになっているので

【ZendFramework】インサートしたIDを取得

  • POST
最後にインサートしたレコードのIDを取得する方法 オートインクリメントで振られたIDを知りたい時の話 普通の方法 大抵のRMDBはオートインクリメントで振られたIDを覚えているので、 再度クエリを発行すればID値を取り出すことができる。 複数のユーザが同時にアクセスして登録したら? 軽く試してみたが問題ない。 コネクションを張る度に別プロセスと認識される 同一コネクション内でインサートしたオートインクリメント値が還ると思われる MySQL SELECT last_insert_id() SQLite SELECT last_insert_rowid() PHPによるアダプターを利用する場合 PDO PDO::lastInsertIdを使う。 上記のように、オートインクリメントによって振られたIDを取り出すSQL文はDB毎で異なる為、 PHPのソースコードとDB操作を分けるには不向きで、その差異を吸収する為に存在するメソッドと思われる。 要するにPDOを使う場合は何も考えずにPDO::lastInsertIdでおk // DBへ接続し、INSERT文を発行 $db = new PDO($dsn); $sql = 'INSERT INTO .....'; $db->exec($sql); // オートインクリメント値を取り出す $id = $db->lastInsertId(); Zend Framework アダプタークラスにlastInsertIdというメソッドが用意されている。 アダプターにPDOを使用した場合、lastInsertIdを呼んでるらしい。 $table = new Zend_Db_Table(); // Insert文発行 $adapter = $table->getAdapter(); $id = $adapter->lastInsertId(); $id = $table->getAdapter()->lastInsertId(); // 一発でやってもOK Zend_Db_Tableオブジェクトにアクセス出来ればlastInsertId()メソッド叩くだけで出てくる。 自社開発のコレクターとかモデルとか使ってる場合でも、 以下のようにZend_Db_Tableオブジェクトを返すメソッドを作成すれば良い。