[PHP] \nでソースコードが改行されない時の確認項目

PHPからHTMLを出力する時、\nでソースコードを改行させて、ソースコードを見やすくすることができます。この時、注意すべきなのは、\nをシングルクォーテーションではなくダブルクォーテーションで囲むことです。\nをシングルクォーテーションで囲った場合、\nという文字のまま出力されてしまいます。

“[PHP] \nでソースコードが改行されない時の確認項目”の続きを読む

[PHP] strftime(), timezoneに関するエラーが出た時の対処法

PHPのグラフ生成ライブラリJpGraphをこちらのチュートリアル記事を見ながら、サーバにインストールしました。そして、Examplesのファイルを使った最初の動作確認でエラー発生。以下のようなコードを吐きました。

“[PHP] strftime(), timezoneに関するエラーが出た時の対処法”の続きを読む

[PHP] requireでヘッダーを読み込むと、上に空白ができる問題の解決法

問題:
index.phpにrequireやincludeでheader.phpを読み込むと、ヘッダーの上に謎の隙間ができる。

解決法:
UTF-8をUTF-8Nで保存。

自分が使っているTeraPadには、UTF-8の保存形式に、UTF-8とUTF-8Nの2つあり、UTF-8がBOMつき、UTF-8NがBOMなしです。BOMというのは、そのファイルがUnicodeであると判別できるように、ファイルの先頭につけられるデータのことです。今回このBOMというのが悪さをしていたようです。

以下、Wikipediaから引用。

BOM

バイトオーダーマーク (byte order mark) あるいはバイト順マーク(バイトじゅんマーク)は通称BOM(ボム)といわれる、Unicodeの符号化形式で符号化したテキストの先頭につける数バイトのデータのことである。このデータを元にUnicodeで符号化されていることおよび符号化の種類の判別に使用する。

Unicode

Unicode(ユニコード)とは、符号化文字集合や文字符号化方式などを定めた、文字コードの業界規格である。文字集合(文字セット)が単一の大規模文字セットであること(「Uni」という名はそれに由来する)などが特徴である。

UTF-8

UTF-8(ユーティーエフはち、ユーティーエフエイト)はISO/IEC 10646(UCS)とUnicodeで使える8ビット符号単位の文字符号化形式及び文字符号化スキーム。
正式名称は、ISO/IEC 10646では‘UCS Transformation Format 8’、Unicodeでは‘Unicode Transformation Format-8’という。両者はISO/IEC 10646とUnicodeのコード重複範囲で互換性がある。RFCにも仕様がある[1]。
2バイト目以降に「/」などのASCII文字が現れないように工夫されていることから、UTF-FSS(File System Safe)ともいわれる。旧名称はUTF-2。
データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向がある。Linuxのように、OSの標準文字エンコードとして使用される例も増えている。

UTF-8とBOM

UTF-8で符号されたテキストデータはエンディアンに関わらず同じ内容になるので、バイト順マーク (BOM) は必要ない。しかし、テキストデータがUTF-8で符号化されていることの標識として、データの先頭にEF BB BF(16進。UCSでのバイト順マークU+FEFFのUTF-8での表現)を付加することが許される。一部のテキスト処理アプリケーション(エディタなど)がこのような動作をする(TeraPad、EmEditorエディタのように付加するかどうかを選択できるものもある)。
なお、日本の特殊事情として、このシーケンスがある方をUTF-8、ない方を特にUTF-8Nと呼ぶこともあるが、このような呼び分けは日本以外ではほとんど知られておらず、また公的規格などによる裏付けもない[10]。
このシーケンスを通常の文字と認識するプログラムでは、先頭に余分なデータがあるとみなされて問題となることがある。例えば、Unix系OSにおける実行可能スクリプトは、ファイル先頭が「#!」から始まるとき、それに続く文字列をインタプリタのコマンドとして認識するが、多くのシステムでは、このシーケンスが存在するとこの機能が働かず実行できない。
逆にこのシーケンスがないとUTF-8と認識できないプログラムも存在する。とくにASCII部以外の文字が少ない場合に誤認することが多い (たとえば、Microsoft Excelでは、CSVファイルを開くとき、このシーケンスが付加されていないUTF-8の場合は正常に読み込むことができない[11]。Microsoft Windowsに付属するメモ帳、ワードパッドも同様。)。

BOMについてなんとなく知ってはいたけど、ここでこういう仕打ちを受けるとは…。Web制作ではUTF-8ではなくてUTF-8Nで保存した方が良さそうですね。今回、色々悩んで調べて3時間くらいで解決。こういったカタルシスは、ゲーム・映画・小説のそれをはるかに凌ぐ…。

Windows7(64bit) PHP環境設定完了とそのメモ

PHPの環境設定がうまくいかず、いくつかのPHP入門サイトを渡り歩いて苦戦してたんですが、以下のサイトの通り設定したら動くようになりました!サイト主さんに感謝!

WindowsでPHPを使う方法、知ってる?

ちなみに配布されているファイルのバージョンや、上記のサイトの指示と多少異なることをしたので、その辺りについて書いておきます。

・Apache
http://httpd.apache.org/download.cgiから
Win32 Binary without crypto (no mod_ssl) (MSI Installer): httpd-2.2.25-win32-x86-no_ssl.msi
をダウンロード

・PHP
http://www.php.net/downloads.php
Windows 5.3.27 binaries and sourceをクリック。
PHP 5.3 (5.3.27)
VC9 x86 Thread Safe
Zipをダウンロード。

・上記のサイトの指示と異なる設定をした点
インストール場所をProgram Filesではなく、他の場所に変えました。
apacheはProgram Filesを省略して、C:/Apache Software Foundation
phpはC:/php
へファイルを置きました。

他には、ダウンロードしたphpのファイルの中にphp5apache2_2.dllが入っていたので、「2.2.2.1.PHPモジュールの組み込み」の項目は飛ばしました。

・PC環境
Windows7 64bit

一つ注意点としては、apacheのバージョン(今回は2.2)とphpのフォルダの中に入っているphp5apache2_2.dllのバージョンを合わせることですね。
上記のサイトには書いてませんが、もし動かなければ、PHP入門の他のサイトを参考にvisual c++を入れたりしてみてください。

(・・・それにしても、PHPの環境設定、複雑すぎてハードル高すぎないか?)

Apache

Apache HTTP Server(アパッチ エイチティーティーピー サーバ)は、世界中でもっとも使われているWebサーバソフトウェアであり、大規模な商用サイトから自宅サーバまで幅広く利用されている。単にApacheとも称されている。
開発は、Apacheソフトウェア財団のApache HTTPサーバプロジェクトで行われている。Apache Licenseの下でソースコードが公開および配布されており、代表的なオープンソースソフトウェアの一つである。