PHP雑記帳 ITかあさん

ITかあさん

TCPDF requires the Imagick or GD extension to handle PNG images with alpha channel.

TCPDF requires the Imagick or GD extension to handle PNG images with alpha channel.

TCPDFは言わずと知れたPHPでPDFを作るライブラリですね。TCPDFで上記エラーが出たら、phpinfoでGDライブラリが入っているかどうか、pngがenabledになっているか、確認する必要があります。

gdが無かったらインストールする yumの場合

gd以外にも関連するもの含めインストールします。

yum -y install php-gd
yum -y install libpng-devel
yum -y install libjpeg-devel
yum -y install freetype-devel

参考

apt getの場合

aptのケースではライブラリの名称が微妙に異なるのかすぐインストールできませんでした。が、searchで検索しながら入れました

sudo apt search {パッケージ名部分一致}
$ apt-cache search gd | grep php
php-gd – GD module for PHP [default]
php7.2-gd – GD module for PHP
php-horde-image – Horde Image API
php-image-text – Image_Text – Advanced text maipulations in images
php-numbers-words – PEAR module providing methods for spelling numerals in words
$ sudo apt-get install php7.2-gd
$ apt-get install -y libjpeg-dev libpng-dev libfreetype6-dev

PHPで月末 年末 週末はCarbonが楽!

PHPで月末 年末 週末はCarbonが楽!

月末

相変わらずLaravelですが、Laravelには4とか比較的古いバージョンから日付操作に便利なCarbonが最初から含まれているっぽい。

今月末

Carbon::now()->endOfMonth();

先月末

Carbon::parse(‘- 1 month’)->endOfMonth();

フォーマット

省略で、仮にY,mだけセットすると、 d,H,i,jは自動でセットされる

Carbon::create(Y, m, d, H, i, j);

日付をセットして、例えば2017年の2月って何日までだっけ?って言うのにも使えます。

Carbon::create(‘2017′, ’02’)->endOfMonth();

結果

public ‘date’ => string ‘2018-02-28 23:59:59’ (length=19)
public ‘timezone_type’ => int 3
public ‘timezone’ => string ‘Asia/Tokyo’ (length=10)

今月末があれば年末も取れるわけで

Carbon::create(‘2017′, ’06’, ’22’)->endOfYear();
public ‘date’ => string ‘2018-12-31 23:59:59’ (length=19)
public ‘timezone_type’ => int 3
public ‘timezone’ => string ‘Asia/Tokyo’ (length=10)

週末かどうかも取れる

(デフォルトでは金 土 日が週末のようです。)

Carbon::create(‘2017′, ’06’, ’25’)->isWeekend();

今日は何曜日チェッカー

$today = Carbon::now();
$today->inSunday();
$today->inMonday();

以下略

楽しすぎるぞ!

str_replaced空白埋めが正しく挙動しない時の緊急対処

str_replaced空白埋めが正しく挙動しない時の緊急対処

0埋めなり、空白埋めなり指定文字列で 足りない桁数を補うためにちょいちょい使うsprintf。
ちょっと空白埋めを行った際、困ったことがおきました。

たったこれだけのことなのですが、HTMLに表記した時に半角スペースが無視されてしまう事案が発生。ぐぬぬ。最初正しく動作していないのかと思い、ヨーーークみてみると一応半角スペースはあるんだけど、ブラウザの表示上 どうやら無視されているのか、思ったよりも非常にスペースが小さく表示されている模様。

せつこ!半角スペースやない!&nbspを使うんや!

どうしたらいいもんかと悩んだ末、ああ、&nbspを使うべきと神の声が届きました。

半角スペースが正しく表示されないので半角スペースを文字列置換して対応。

本当は&nbspってレイアウト調整のために使うのはNGなんですが、ひとまずこれで対応。

PHP POSTが多すぎて途中からPOSTが消えちゃったよ

一度にPOSTされる量多すぎて途中からPOSTが消えちゃったよ

php
1ページにカレンダーのように日別にフォームがあって、1000を超えるPOSTデータが発生するケースがあったのですが、あれ??途中からPOSTデータが消失してるっぽい

エラーログを確認すると

PHP Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini.

どうやらついにPOST数の上限に達していた模様。

一度に大量のPOSTを発生させるのもいかがなものかと思うのですが、取り急ぎphp.iniのmax_input_varsを修正すれば解決するらしい。

php.ini

; max_input_vars = 1000

コメントアウトを外して上限数をあげてあげればInput variables exceeded のエラーは取り急ぎ解決できます。
修正したらApacheを再起動して繁栄させます。

これでPOSTの上限数が変更されて POSTデータがまた大量に送れるようになりました。
(まあ、極力POSTの数を抑えるよう修正するのが望ましいですけどね)

Laravel 5 collectionを使った必ず記号も含まれるランダムパスワード

str_ramdom()を使うより、もう少し強固な必ず記号も含まれるランダムなパスワードを生成したい

Laravel
Larvalで以下のようにするとランダムな10文字を生成できます。パスワードリセット時などに便利

echo str_ramdom(10);
//Aek3Gkfk89

ただしパスワード設定の仕様がもう少し強固で、

  • 必ず半角大文字と半角小文字が入る
  • 数字を一つ以上含む
  • 記号を一つ以上含む

という「必ず大文字や数字や記号をそれぞれ含めなければならない」というルール縛りがあるとただランダムな文字列を生成するだけでは足りない場合があります。
(生成された文字がただのランダムだと、大文字や数字が一切含まれないということは当然発生しうる)

必ず仕様に乗っ取る強固なパスワードを生成する手順

      a から zの小文字配列をランダムで生成して指定数 配列を抽出
      Aから Zの小文字配列をランダムで生成して指定数 配列を抽出
      0から 9の整数を配列をランダムで生成して指定数 配列を抽出
      パスワードに使える記号を配列に。指定した数だけ 配列を抽出
      1~4までの手順で生成された配列を合体
      5の手順で合体した配列を文字列に変換し、シャッフル

4番目の記号は以下の通りとした

! $ % & ‘ ( ) * + , / ; < = > ? [ ] ^ { } ~

ランダムにいきなりとりだすのではなく、半角英字と数字、記号をそれぞれ別々に取り出してから 合体させて 最後にシャッフルすること。

Laravel5で 必ず数字や記号が含まれるランダムなパスワードの生成の例


CollectionはLaravelで配列からいい感じに配列を抽出できるヘルパーです。

ついでに非Laravelerの人へ捧ぐ、同じような強固なパスワード生成


array_flipは優秀だということがわかった。

MongoDB×PHPでAutoIncrement を実装する

mongoDB

MongoでMySQLのような AutoIncrement は実装できるか!できます!

mongoに新しくレコードが追加されるたびにuuidが追加されるので、識別するには困らないですが管理ようにAutoIncrement で数値で管理したい場合もありますねー。そんな時にはAutoIncrement 用の counter用のコレクションを追加してあげましょう。結構簡単にできました。

mongo コマンド

db.counters.insert({“_id”:”itemid”, “seq”:new NumberLong(1)});

これで、 counters コレクションにitem のAutoIncrementが保存されるドキュメントが作成されました

作成されたドキュメント

>db.counters.find()
{ “_id” : “itemid”, “seq” : 1 }

シーケンス番号発行するClass


MongoCollection::findAndModify
findAndModifyを使いって、countersのseqを取得。さらにseqに1をセットで次の連番に備える。

新規ドキュメント追加の際、 現在の item IDを調べてセット


countersから現在のitemidのseqを取得してセットするだけ。
こんな感じで”_id”に連番が入ります。

db.items.find();
{ “_id” : 1, “title” : “hoge”, “user_id” : 1, “created” : “2015/12/31 11:59:59”}

countersも確認。。

>db.counters.find()
{ “_id” : “itemid”, “seq” : 2 }

まとめ

countersコレクションは一つのコレクション以外に itemid以外の名称をつければ、itemコレクション以外にもAutoIncrementは複数設定してあげることができます。

ITかあさんが2015年入ってから超絶お世話になっている技術書

超絶お世話になっている技術書・参考書

プログラミングには少し離れつつある今日このごろですが、プログラミングは忘れたくない!
けども設計書・ドキュメントはどんどん書く!
そんな母さんが最近超絶お世話になっている本を紹介したいと思います。

Web API: The Good Parts

WEBAPI初めて作るなら絶対読むべき一冊!

最近WEBAPIを作る機会が増えましたが、以前はめっきるAPIは利用する側で開発する側ではありませんでした。
APIの戻り値は?POST?GET?え?何 PUT?PATCHにDELETE?
知らないメソッド、URIはどうするべきか
「APIとは?」という初歩の初歩から書いてあるので、APIの良い設計とはナンなのかを生まれて初めて設計する人にも分かり易く書いてあります。
プログラミングの仕方が書いてあるわけではなく、戻り値はどうあるべきかなどの設計に関わる部分がほとんどを占めていますので、利用言語については何でも問題ないでしょう。とにかくいい本!今は暇さえあればこの本ばかりを眺めて常にAPI設計の参考にしています。

CakePHPで学ぶ継続的インテグレーション

CakePHPに限らずWEBエンジニアなら必読の今時開発環境について網羅!

そうだ、Jenkins勉強しよう!
そう思ったらなぜかCakePHP本に出会ってしまった!
私の現在の開発環境はvagrant環境に構築したCentOSにCakePHPをインストールし、バージョン管理はgit。テストにSelenium。今よく効く継続的インテグレーションのツールを網羅しているのでCakePHPユーザー以外にもぜひともオススメしたい本。既にVagrantもgitもSeleniumも使っていますが、もっと早く出会っていたかったなあ!という本。
CakePHPの入門書とは全く違う切り口なので、CakePHPの入門レベルを終えてから手にとるべき本。もちろん現在別のFWでPHPを使っているユーザーならすぐにでも読むことをオススメしたい本です

実践 Selenium WebDriver

待ってました!Selenium WebDriverの本!

先日春のJavaScript祭を行った際、私の持ちネタはSelenium WebDriver×Node.jsでした。Selenium IDEはブラウザのアドオンとしてブラウザにJavaScriptを埋め込んで動作させるものでしたが、各ブラウザごとのWebDriberをインストールすることでブラウザの細かい挙動のチェックも出来るようになります。
複数のブラウザを平行で立ち上げて処理速度をチェックしたり、正しく挙動するかのチェックが出来ますから今までテストをFirefoxのブラウザで出来ていたことがChromeでもIEでもiPhoneのスマートフォンブラウザのチェックも出来るようになります。
本書はJAVAベースでの解説になりますが、全体的な基礎知識にぜひ読んでおくのがオススメ。

オススメ本は以上になります。

プログラミングにやや離れてしまった感はありますが、やっぱり技術書開いた時のワクワク感が大好きです。
またオススメ本があったら紹介したいと思います。

WEB API利用者・開発者必須アイテムChromeアドオン DHC を使ってみたよ

WEB API利用者・開発者必須アイテムChromeアドオン DHC

DHC

マツダさん、APIツカウならコレ ツカッテ

Chromeアドオン DHCは某国のエンジニアに教えてもらったよ。

Choromeアドオン DHCとは

DHC UI

公開されているWEB APIを叩くためのツール

世の中にはたくさんのAPIが公開されていて(現在公開されているAPI一覧【2013年版】
APIの開発を開始する前にAPIからの戻り値を正確におさえるためには仕様書レベルではなくて実際にAPIを叩いて正確に理解したい。
そんな時に使えるのが今回のChromeアドオンであるDHCです。

DHCのインストール

アドオンをインストールするだけ。

設定>拡張機能>他の拡張機能を見る>DHCを検索

DHCの使い方

アプリ一覧よりアドオンのDHCを起動

APIのURIを記載して、実行するとAPIから戻り値が受け取れます

今回は図書館検索、本の貸し出し状況を確認出来るカーリルAPIっていうので試してみたよ

APIのURLを記載してsave

URIを設定APIの保存

APIのURIを設定して、一先ず保存

サイドメニューに保存されているAPI一覧

保存すると サイドバーに保存したAPIが表示されているので、再度呼び出す時に便利

DHCからAPIを叩く

sendボタンを押してAPIを叩く

sendを押すと、レスポンスが返ってきます

APIでの戻り

レスポンスヘッダと、戻りがXMLなことが分かりますね。

詳細なパラメータを追加

APIには詳細なパラメータが出来るものがあります。今回使ったカリールというAPIも様々なパラメータを付けて、より詳細なデータや、自分の欲しいデータを検索して返すことが出来ます。
それらのパラメータをDHCにセットして叩いてみます。
詳細なパラメータを渡す

戻り値はXMLとJSON形式で選べるようなのでJSONに。なおKeyは仮のデータです。もしこのAPIを使いたい場合はAPI登録の申請を行って下さい。

レスポンスがJSONデータになった

レスポンス結果がJSONになりました。戻ってきた値の詳細についてはAPIの仕様書をご確認下さい。

GET以外にもリクエストは色々

色々なリクエスト

リクエストはPOSTやGET以外にも色々あります。もちろんそのAPIが対応していなければ400のエラーステータスしか返ってきませんが、色々APIを叩く時に試してみるといいと思います。

APIを利用して開発する際いはぜひ使いたい

APIを使って開発する時はもちろん、APIの設計やテストにもぜひ活用していきたいと思います。

PHPでxmlファイルの作成方法を今更なんだけどメモっとく

PHPでxmlファイルの作成方法を今更なんだけど詳しく書いておこう

気がついたら寝落ちして朝になってました

明日勉強会なのに、気がついたら寝落ちして朝になってました、ITかあさんです。

今度の勉強会で、公開されてるJSONデータを毎回取得して整形すると表示速度的によろしくなさそうなので、取得したデータをXMLにしてファイルを生成する処理をしました。

今更なんですが、PHPでXMLを生成する方法をメモしたいと思います。

完成したXML

今更なんですが、XMLは自分で好きに要素や属性値を決めることが出来ます。

<?xml version="1.0" encoding="UTF-8"?>
<conditions>
<condition>
<itchyEyes>
<itchyEyes4>0</itchyEyes4>
<itchyEyes3>0</itchyEyes3>
<itchyEyes2>0</itchyEyes2>
<itchyEyes1>0</itchyEyes1>
<itchyEyes0>0</itchyEyes0>
</itchyEyes>
</condition>
</conditions>

生成するPHP

このPHPと同じ階層にXMLファイルを生成します。

$dom = new DomDocument('1.0', 'UTF-8');
// appendChildでconditions属性作成
$conditions = $dom->appendChild($dom->createElement('conditions'));
//$conditionsに対してappendChildしてcondition属性を作成
$condition = $conditions->appendChild($dom->createElement('condition'));
//以下同様に新たに属性値を作成する
$itchyEyes = $condition->appendChild($dom->createElement('itchyEyes'));

$itchyEyes->appendChild($dom->createElement('itchyEyes4', '0'));
$itchyEyes->appendChild($dom->createElement('itchyEyes3', '0'));
$itchyEyes->appendChild($dom->createElement('itchyEyes2', '0'));
$itchyEyes->appendChild($dom->createElement('itchyEyes1', '0'));
$itchyEyes->appendChild($dom->createElement('itchyEyes0', '0'));

//XMLを整形してから出力処理
$dom->formatOutput = true;
//保存
$dom->save('kafun.xml');

これで同じ階層にxmlファイルが生成されます。

PHPを勉強するならこれだけは言いたい!PHPのオススメ勉強法

ほぼ独学でPHPerになったITかあさんが言いたい、PHPのオススメ勉強法

PHPのオススメ勉強法
エイプリルフールですが、これと言って嘘の予定はありませんITかあさんです。いつかはこんなことを書いてみたかった

PHPのオススメ勉強法について

やや長文になりますが、WEBデザイナーからほぼ独学でPHPerになったITかあさんの目線から色々PHPの勉強について語ってもよいでしょうか?

個人の価値観、他言語のプログラマーがPHPを勉強する際では状況も異なると思うので、ここでは

他言語の経験がゼロでPHPを学ぶ人を対象に

語りたいと思います。

そもそもPHPっていうのはナゼ動くか

ApacheとPHP
WEBデザイナーのころはイマイチPHPの仕組み自体よく分かっていませんでした。

Apacheが動かしているんじゃないの?

と思っていましたが、

ApacheはWEBサーバー

のことで、URLを叩いたらHTMLが表示されたりする「WEB環境の基本」です。

もちろん、WEB環境としてのApacheが起動していないとそもそもPHPも動かないのですが、
「PHPをサーバー上にインストール」しているからこそPHPは動くのです。

PHPはサーバーサイドスクリプト

サーバーサイドスクリプト

なんて言葉を聞いたことがあるかもしれません。PHPはこのサーバーサードスクリプトの一種であります。
Webでプログラムの実行が要求されて初めてその結果をブラウザに対して送信されます。
つまり、

ユーザーがフォームの送信ボタンを押したり、ブラウザを開いたりして初めて動く

それがPHPなのです。

PHPで出来ないこと

PHPは『WEB専門言語』であって、『サイトのユーザーの要求に対して』結果を返すため、例えばブラウザが全く開かれていないなど、一切の要求が無いと勝手に動くことはありません。

このため、PHPだけで『全自動』なプログラムを作ることが出来ません。その場合はサーバーに定期実行をさせる『cron(クーロン)』を設定させる必要があります。

そのことからも、PHPでWEBプログラムをするに当たっては多少のサーバーの知識も必要になってくるのです。

なぜPHPはよくdisられてしまうか

ITかあさんで大川さんの写真使ったのは初めてだな~
他の代表的なサーバーサイドスクリプトに
JavaやPerlやRubyなどがありますが、どの言語も汎用性があり、WEB以外にも使うことが出来ます。それに対しPHPはWEB用であり、PHPを使ってソフトウェアiPhoneアプリやWindowsアプリを開発することは出来ません。
あくまでもWEBアプリケーションしか作れないのです。

ソフトウェアという単語はよくありませんでした(WordPressもブログソフトウェアですしね)、訂正

しかもPHPは他言語に比べて習得が容易であることからも『え?あなたPHPしか出来ないの?』とたまにdisられてしまうんです。

簡単に習得出来るのは、非常によいことだと思うのですが・・

PHPは簡単か?(いや、そうでも・・)

私は最初から職業がプログラマーだったわけではなく、WEBデザイナーからだんだんWEB系のプログラマーにシフトしていきました。(このブログが始まったばかりころはまだWEBデザイナーだったんですよ)

どういう要求が来ても、対応出来るようになったのが本格的にプログラミングをやって2年くらいかかりました。

プログラム全く何もしらない未経験の人からすると、

決して簡単ではないよね、PHP・・・

って感じです。

ズバリ、完全に独学することは可能か?

プログラミングの勉強ってお金かかりますよね

PHPに限らず、プログラミングのスクールに通うのはお金かかりますよね

私はPHPを勉強したのは

ほぼ独学

と言っており、実は全てが独学ではありません。

PHPを学ぶ上で苦労したところ、独学では難しいところ

配列が分からない・・

参考書の構文解説などで配列について項目がありますが、私は配列が本当に分からなかったです。

特に連想配列の意味が分からない

連想配列の意味が分からず、ここは苦労しました。
私が愛するCakePHPもそうですが、SQLでデータベースの情報を要求すると連想配列で結果が返ってくるので連想配列が分からないとPHP+データベースで何か大規模なプログラムを作ることは出来ません。

逆を言えば、連想配列さえちゃんと理解出来れば後はGoogleで検索すれば自然と答えが見えてきます。

一から十まで全てをスクールに通うとお金もかかり大変ですから、
小規模な相互リンク管理のプログラムをPHP+Mysqlで作ってみるまでの簡単なフローをプログラムの家庭教師を雇って教えてもらうといいかもしれません。

ちなみに私は某スクールに3万円ほどでこの一連のフローを学びました。

構文や関数何を覚えればよいか

構文は全て覚える必要なし!

PHPの構文はたくさんありますが、基本3つが使えればOKです。

if文
foreach文
for文
while文・・・たま~に使う、くらいかな~

配列を扱うに当たり、foreach文とfor文の2つをマスター出来れば基本的なWEBサイトのプログラムを作ることは出来ます。
特に

foreach文を完璧に理解する

ことに私は苦労しましたが、逆を言えばそこだけ誰かに教えてもらえればどうにでもなりそうです。
(foreachだけどうにか出来れば、けっこうどうにでもなりそうですね)

あ、私関数は何一つまともに覚えてないですw

関数は都度Googleで検索すればよいので、関数は覚える必要は何一つありません。

PHPを勉強するならレンタルサーバーで!

さくらのレンタルサーバーが一番オススメ

PHPを勉強するにあたり、私はぜひレンタルサーバーで勉強されることをオススメします。
なぜITかあさんはレンタルサーバーで勉強することをオススメしたいかというと、

レンタルサーバーならPHPの環境が全て整っているから!

PHPをこれから勉強しようという人がサーバーをゼロから構築するのは現実的ではないですし、ローカル環境という選択もありますが、
環境設定を自分で整えたり、メールの環境を整えなければなりません。
(PHPの入門書で最初のローカル環境の設定に何十ページもとっていたりするんですよ!)

PHPの勉強をするために、その場だけのローカル環境を準備するのは時間がもったいないし、レンタルサーバーの環境に満足できなくなっるくらいPHPの学習が進んでから VPSなどを借りてサーバー構築されるのがいいと思います。

500円くらいのレンタルサーバーであればcronスケジュールを登録出来るものもありますし、最近のレンタルサーバーは専用サーバー並みに環境が整っています。

訂正しました

レンタルサーバーについて 素人スクリプトを公開するのは他の人にも迷惑をかける恐れがあるのでそれは止めたほうがよいとの意見を頂き、
この件は訂正させて頂きます。また、サーバー屋さんも『プログラムデバックの禁止』をしているところが多いことからも良い意見ではなかったと反省しています。

PHPを勉強するにあたり、オススメの書籍

本は2冊容易するのがベスト

PHPを勉強する=Mysqlとの連携
があるでしょうから、PHPの入門書とMysqlの入門書2冊あったほうがいいです。
ITかあさんがボロボロになるまで愛読したPHPの入門書はこれ!

PHPのオススメ解説本

全体的に文字も大きく読みやすいです。PHPの入門書は余計な解説に終始するものが多いのですが、『必要なことだけ』しっかりまとまっている本です。

ただ、Mysqlがコマンドプロンプトから行う形になっており、Mysqlを扱うなら「phpMyadmin」を選択する方法もあるので初心者の方はMysql部分の解説は難しいかもしれません。本全体の2/3に当たるPHPの解説が大変読みやすいです。

Mysqlのオススメ解説本

PHPの解説本はPHPの解説本で、Mysqlの解説本はMysqlの解説本で分けたほうがいいです。1冊にまとめた本も多いのですが、1冊にまとまっているということはどちらの解説も中途半端に終わる可能性があるためそれぞれ分けることをオススメします。

PHPを勉強するに当たり、何から手をつければよいか

とりあえずPHPが出来るようになりたい

そう、思っている人も多いと思います。実際私もWEBデザイナーのころからそう思っていて、

WEBにおける全ての工程を自分一人で出来るようになりたい!

と思っていました。

いきなりPHP+Mysqlの大規模サイトはしんどいですから、小さいものからコツコツ作ってレベルアップしていくのがいいです。

CSVファイルのPHP出力

まずは超単純なCSVファイルをPHPの配列を理解する上で、連想配列ではない、一列の配列を出力してみるのがいいと思います。まずは配列出力の基礎の基礎ですね。

SESSIONを利用したメールフォーム

SESSIONを利用したメールフォームはプログラムの基本です。またWEBデザイナーの時には中途半端な知識のままフォームのコーディングをしていましたが、フォームをしっかり作れるようにならなければプログラムは作れません。
なお、このサイトでもPHPメールフォームの詳しい作り方を解説しています。

ログファイルベースの掲示板

掲示板にかかわらず、何らかのログファイルベースの掲示板や相互リンク管理を作るといいと思います。
PHPを学ぶ上でパーミッションに対する理解も必要なので、このパーミッションに対する理解が深まります。

ログファイルベースからデータベースに

ログファイルベースで作ったプログラムをデータベースで対応します。
SQLに関する知識はこの時初めて勉強するので十分です。

また、PHPでMysqlにアクセスする方法としてmysql_connect()などがありますが、実は私はほとんど使ったことがありません。絶対にそうすべき!と言うつもりはさらさらありませんが、PHPライブラリでPEARがあり

PEAR:MDB2

と、いうプラグインがあります。

これを使うとPHP+Mysqlの連携が容易になるし、結果が全て連想配列で返ってくるのでforeach構文が使いこなせればすぐにでもプログラムの構築が可能です。

しかも、PHPってフレームワークを使うようになるとまず自分でmysql_connectの関数を書く機会はありません。
このため、余計な知識を付けるくらいなら より簡単なプラグインを使うことをオススメしたいのです。

(ちなみにこのPEAR:MDB2はレンタルサーバーならほとんどがあらかじめインストールされており、自分で使うために設定することは何もありません。)

最後にオープンソースフレームワークを

ここまでの工程を踏んで、最後にオープンソースのフレームワークを使うと、これまでの知識が活かされてスムーズにフレームワークを扱うことが出来ます。(ぜひ、CakePHPをオススメしたいですっ)
私はほとんが仕事での実務でこの工程を踏んできました。私は半年でフレームワークを使うようになりました。あまり習得が早いほうではありませんでしたから、熱心な方は3カ月くらいで可能な人もいるでしょう

フレームワークを使うとMVC(モデル・ビュー・コントローラ)の概念が出来、フレームワークの仕様に乗っ取って「クラス」や「独自関数」も書くようになります。

これだけは言いたい!

よく

PHPを○○日で学ぶシリーズ

とかありますが、

んな数日で出来るか、ボケぇぇぇっ!!

と、声を大にして言いたいです。

配列を制す者はPHPを制す!

私に以前こう言って下さった凄腕のプログラマーがいました。今思えば全くその通りだったと思います。
事実 SQLでDBの内容を取りだしたら連想配列で結果が返ってくるので これを自分の欲しい配列の形に変換する作業はよく使います。

むしろ配列だけやっておけばいいんじゃないの?

と、いう気になるくらい、PHPでサイトのプログラムを作る時は配列の操作を行います。
(後は文字列の操作を行ったり、文字化けの対策もあったり色々ありますがやはりGoogleで調べて解決します)

PHPの入門書は数あれど

配列の重要さ、配列の大切さ、配列への理解を深める書籍

に私は出会ったことがありません。結局本だけで配列への理解を深めるのを諦めてその部分だけスクールで学びました。

配列だけ解説したところで非常に地味なので本としてはつまらないので売れないからだと思います。

なにもPHPに対して理解していなかった時は何となく

PHPって難しそう、でも出来たら何となくスゴそう!

と思っていましたが、実際実務で扱うと

地味!

なんですよ。

まだまだ自分自身 美しいPHPのコードを学んだり、より効率的な記述を模索している最中ですが、

私はPHPが大好き

ですし、よりたくさんの人に『PHPの楽しさ』を伝えていけたらいいかなと思います。

2013.04.02追記

一晩で250近くもハテブを頂くとは思わず、『いい意味』でも『悪い意味』でも反響を頂きました。
誤りの部分は真摯に受け止めるとして、本当に『ド素人』からWEB系のプログラマーとして独立した現在、

『自分がPHPを学ぶ上で本当に苦労したこと、配列の大切さ』を伝えたかったのです。

批判の意見も 私自身がまだまだプログラマーとして未熟な部分もあるからでして、自分自身もっと努力してPHPの楽しさを伝えていきたいと思います。