ブログ・エス技研

当ブログは引越しをしました。10秒後に自動で転送しますが、転送されない場合は、http://blog.s-giken.net/ をご覧ください。
ブログ・エス技研 TOP  >  2013年01月

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --年--月--日 --:-- ] カテゴリ:スポンサー広告 | TB(-) | CM(-)

PHPを勉強するための環境を構築するにはXAMPPが最適

システム開発を行う上では開発を行う環境を用意する必要があります。
Webサーバとして Apache、言語として PHP、DBとして MySQL...というように。

私は、自身で公開しているサイトなどがあるためにレンタルサーバを借りていますのでそこを使って開発を行っていますが、ほとんどの場合費用がかかってしまいますので、ローカルに環境を構築したいと思うことも多々あるでしょう。
でも、自分で構築するにはある程度スキルが必要ですし、インストール中に不具合が起こっても対応方法が分からない、インストールはしたけど起動の方法が分からない、毎回起動させるのが面倒といった場合もあるでしょう。

そんなときに役に立つアプリケーションがありました。

「XAMPP」です。

 「XAMPP」オフィシャルサイト
 http://www.apachefriends.org/jp/index.html

Apache、PHP、MySQLといった、Webアプリケーションを実行するのに必要なソフトウェアをパッケージでまとめたもので、それらを一括してインストールして、各種設定などもコントロールパネルから更新できるようになっているものです。

開発用途や学習用途で使う事をメインに考えられているようですが、イントラネットなどであれば、実運用環境用としても耐えうるものになっているようです。
ただ、アプリのバージョンや、ドライバなどが最新版ではないため、実際に公開するサーバで運用を行うにはセキュリティの面で問題がありますので、使用は避けるべきかと思われますね。


「XAMPP」はこの種のツールとしては、メジャーなもののようですので、それだけで事足りると思いますが、他にも「phpdev」と言ったツールもあります。

「XAMPP」と比較して各アプリのバージョンがやや古いことや起動が手間であったりしますので、こちらを積極的に選択する理由は見出しにくいですが、無理矢理何か理由を見つけるとすると、アプリ全体の容量が小さいために、HDDの容量を気にしなくてはいけない環境では選択肢となり得る事もあるかもしれませんね。
スポンサーサイト
[ 2013年01月22日 17:23 ] カテゴリ:システム開発関連技術 | TB(0) | CM(0)

日本語は2バイト文字?3バイト文字?

前回の日記の最後に少し文字のバイト数の件を書きましたので、ついでに今日は文字のバイト数のお話です。

最近の Webサイト製作、PHPのプログラム開発は Unicodeでの開発がほとんどで、以前ほど文字コードによる文字化けに悩まされることは減って来ているのではないかと思います。
また、かつて、半角カタカナは非常に厄介な問題でもあったわけですが、こちらも技術の進歩でかなりの部分問題なく対応されて来ています。


そんなわけで、最近はあまり文字コードのことを気にしなくなりつつあるわけですが、今日の日記の主題は「日本語の 1文字は果たして何バイトなのだろうか?」ということです。


SHIFT-JIS、EUCを主に使っていた頃は、全角文字は 2バイト文字とも言われるように、1文字は 2バイトだったわけです。
ですが、Unicodeなるとやや事情が異なってきてしまいます。

Unicodeでもこれまでと同様 2バイトのものもありますが、文字によっては 3バイト、4バイトのものが存在するわけです。

詳しくは、下記のサイトが参考になりました。
PHPのstrlen関数で全角文字が3バイトになる件
 http://hamamuratakuo.blog61.fc2.com/blog-entry-421.html


そして、「文字ごとにバイト数が違う場合、どのような影響があるのか?」ということについては、フォームなどから文字を入力してもらう際に行う文字数チェックで、意図しない結果になる可能性が出てくる、というわけです。

PHPで文字数をチェックする際には「strlen」で文字のバイト数を取得して計算するわけですが、文字によって返ってくるバイト数が違ってくるために、一概に「入力は何文字まで」と言う制限が出来なくなってしまうわけです。

DBに日本語を保存する場合、char型などで桁数を指定しようとした場合にも不具合が起こる可能性があるわけです。


詳しい説明などは書きのサイトなどが参考になるかと思いますのでご覧いただければ、今後の参考になるかと思います。

日本語文字列のバイト数取得にstrlenだけではダメな理由-PHP
 http://www.cpa-lab.com/tech/0144

Script雑感
 http://zombiebook.seesaa.net/article/33192046.html
[ 2013年01月20日 17:20 ] カテゴリ:プログラミング関連技術 | TB(0) | CM(0)

初めて JavaScriptを勉強してみた

これまで敬遠してきた言語がある。
それは、JavaScriptである。

なぜなら、ブラウザによって実装方法が大きく違い、実装する際のデバッグが非常に大変だからだ。
そして、実際にやったことがなかったことがその恐怖心にも似た間隔を増幅させて JavaScriptを遠ざけてきた。

しかし、AJAXをやってみよう!と決心したときから JavaScriptを敬遠するわけにはいかなくなった。


そんなわけで、昨年末頃から時間を見つけて JavaScriptを使って AJAXの仕組み、組み込みの勉強をしているわけですが、プログラムの記述の方法そのものは PHPとそれほど大きく違うこともないために、あと離れの問題なのかな、という感じもしました。
しかし、JavaScriptの使われ方というか、仕組みが全く違う言語ですので、プログラムの書き方と言うより実装の方法を理解、納得する方が大変な感じがしますね。
そして、どの言語に対してもそうなのですが、これを使いこなすには、それこそ場数をこなしていくしかないんじゃないか、と。

こういうときはこういう実装方法をした方がいいね!そんな風に思えてくるまでにはやや時間がかかりそうです...


さてさて、前置きが長くなりましたが、今日は JavaScriptからです。

以下のようなサンプルソースがありました。
for文でぐるぐる回すところは PHPと変わりありませんので、構文としては理解しやすいのですが、「JavaScript length」というプロパティをググルと「文字列の長さ」と出てくるわけです。

サンプルソースとしては動いているため、「文字列の長さ」では違うような気がするわけですが、「文字列の長さ」と説明してあるページがいろいろと出てくるわけです。

-----(サンプルソース)-------------------------------
for(i = 0; i < item.length; i++){
  var title = item[i].getElementsByTagName('title');
  var titleValue = title[0].firstChild.nodeValue;
   (以下略)
}
------------------------------------------------------


最初は JavaScriptとはそういうものかと思うことにして、先に進んでいたわけですが、for文はあちこちに出てきますので、やはり気になって仕方がないのです。


そこで改めて調べなおした結果、下記のページにたどり着きました。

5種類の .length(JavaScript おれおれ Advent Calendar 2011 - 11日目)
http://ginpen.com/2011/12/11/types-of-length/

そこには衝撃的な事実が。
「JavaScript の .length プロパティは、どのオブジェクトに使うかによって意味が違ってくる!」ということを知ったのです。

配列のプロパティとして使うのか、文字列のプロパティとして使うのかによって意味が違ってくるようなのですが、JavaScriptと言う言語は、プロパティの使い方によってこういった意味の違いがあると言うことを始めて知ったわけです。
PHPの場合は、文字列なのか配列なのかによって使うコマンドは違いますので、「どちらにも使えるにもかかわらず、意味が違うという場合があるのか!?」という衝撃を受けました。

逆に、JavaScriptを学び始めたこのタイミングでこういったオブジェクトによってプロパティの意味が違うと言う場合があると言うことを知ることが出来たことはラッキーだったのでしょう。
今後、同じ様な状況に行き当たった場合はすばやく対応できるようになるでしょう。

それにしても、言語が違っても基本構文は大きく違わないけれど、細かなところではぜんぜん違う発想のものがあるなぁ、と改めて感じさせられましたね。


ちなみに、文字列のプロパティとして使った場合に取得出来る文字数は、バイト数が返ってくるのではなく、文字数が返ってくるようです。
半角英数字であっても、全角の文字であっても、全角の Unicodeの文字であっても、1文字は 1文字として処理されるようですね。
[ 2013年01月15日 17:17 ] カテゴリ:JavaScript | TB(0) | CM(0)

UNIXのコマンドで特定の文字列を置換する方法

今日は、PHPから離れて UNIX(Linux)のコマンドのお話です。

とはいえ、PHPのプログラムなどのファイルの中にある文字列をまとめて置換したい、という場合の対応方法ですので、全く無関係ではありませんね。

今日は、ファイル内の文字列を一括置換するための UNIXコマンド(Linuxコマンド)です。

文字列置換をする UNIXコマンドは「sed」コマンドで、下記のように記述します。

sed -e 's/置換前対象文字列/置換後文字列/g' 読み取るファイル.txt > 保存.txt


このままでは、元の「読み取るファイル.txt」の文字列を置換し、結果は「保存.txt」に保存します。
そのため、別ファイルを作らずに、置換して上書き保存するには「-i」オプションをつける必要があります。

sed -i -e 's/置換前対象文字列/置換後文字列/g' 読み取るファイル.txt

これで、「読み取るファイル.txt」の中身が置き換えられ、上書きして保存されるます。


もし、置換する際にファイル名は変えずに上書きしたいけども、でも万一の際には元に戻せるようにバックアップを取っておきたい、という場合は、「-i」オプションにファイル名の引数を設定すれば OKです。

sed -i".bak" -e 's/置換前対象文字列/置換後文字列/g' 読み取るファイル.txt

 ※「-i".bak"」の「-i」と「"(ダブルクォーテーション)」の間隔は空けずに詰めて記述します


複数のファイルに対して実行したい場合は、「*.txt」「file_???.txt」のようにワイルドカードも使えます。

sed -i -e 's/置換前対象文字列/置換後文字列/g' *.txt
sed -i".bak" -e 's/置換前対象文字列/置換後文字列/g' *.txt


さらに、置換する文字列を含むファイルだけを指定して置換したい場合は、「grep」とあわせて使う方法があります。
※「grep」の「-l(エル)」オプションは、検索条件にマッチしたファイル名を表示するオプション
※「xargs」は、grepで結果を「sed」に引数として渡すコマンド


grep -l 置換前対象文字列 *.txt | xargs sed -i -e "s/置換前対象文字列/置換後文字列/g"

この方法は、「*.txt」で指定した際にファイル数が膨大な場合や、特定の文字列を含むファイルだけを対象にしたい場合に役に立つでしょう。


ちなみに、サブディレクトリがあるディレクトリ内で「*.txt」のようなワイルドカード指定の「sed」コマンドを実行するとディレクトリ名が影響してエラーが起こるようです。
現時点では、それを回避する方法を確認できていませんので、一度サブディレクトリがないディレクトリに対照ファイルをコピーしてから実行する方がいいでしょう。(万一のコマンドのミスで取り返しが付かない置換処理がされてしまうリスクを避けるためにも有効だと思います。)

※一部、ソース上の「<」「>」などを全角文字で記述しています。


そのほか、perlのコマンドを使って実行する方法もあります。

perl -p -i.bak -e 's/event12/event13/g' event13*
 ※「-i.bak」をつけずに処理をする事は出来ない
  (ファイル保存ではなく、画面表示になるため)

今回の記事を書くために参考にさせていただいたサイトは以下の通りです。こちらも参考にしていただければ、と思います。
http://kazmax.zpp.jp/linux/lin_replace.html
http://what-linux.seesaa.net/article/135110745.html
http://open-groove.net/linux-command/sed-edit-files/
[ 2013年01月10日 17:07 ] カテゴリ:Linuxコマンド | TB(0) | CM(0)

PHPで正規表現の検証には preg_match_allが便利

PHPで正規表現が正しいか、間違っているかの検証には preg_match_allが便利

Swiffyで Base64でエンコードされた画像を置換する際に、その画像の部分を正規表現で表現する必要があったわけですが、正規表現には不慣れなこともあり、正規表現の記述があっているのか、間違っているのかの確認が非常に悩ましいところでした。


ですが、あれこれと試していたところ「preg_match_all」という便利な関数があることを知りました。

「preg_match_all」は「繰り返し正規表現検索を行う」関数です。

 preg_match_all ( $pattern, $subject, $matches );

$subject(文字列)の中にある $pattern(検索する文字列)を検索し、$matchesの中にその結果を配列として編集してくれます。

これを、下記のように配列を見やすく表示してくれる「print_r」(「var_dump」でもOK)と組み合わせて使う事で、記述している正規表現にヒットしているものが何かがすぐに分かるのです。

 preg_match_all ( $pattern, $subject, $matches );
 print_r ( $matches );

正規表現をあれこれと書き直ししながら、何がヒットしているのか、どこの記述が違うのかを簡単に見る事が出来ますので正規表現を書くのに非常に便利でした。

正規表現は、とっつきにくい印象がありますが、具体的に見ながら記述することが出来れば少しはとっつきにくさも解消されるんじゃないでしょうかね。
[ 2013年01月07日 16:56 ] カテゴリ:PHP | TB(0) | CM(0)
プロフィール

エス技研

Author:エス技研
性別:男性
職業:Web系エンジニア
エンジニアになって 15年ほど経ちますが、その途中で 5年ほどディレクタ、マネジメントを中心とした業務を行っていたためにやや現場を離れていましたが、転職をきっかけに 2012年に現場に復帰し、新たな技術を楽しみながら勉強しています。
メインの環境は LAMP環境です。

FC2ブログランキング
FC2カウンター
FC2拍手ランキング
GoogleAdWords
カレンダー
12 | 2013/01 | 02
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
検索フォーム
ブロとも申請フォーム
QRコード
QR
フリーエリア


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。