php:phpで開発時に使用しているデバック(debug)方法

phpでシステムの開発を行っている時のデバック方法を記載します。
システムを開発している時に変数や配列の値を確認しながら作業すると思います。
変数や配列の値を確認する方法は「var_dump」や「print_r」などの関数を使用すると思いますが、皆さんはどのような方法でデバックしていますか?
「var_dump」や「print_r」をそのまま使用すると、一列に表示されるので複雑な配列や値が多く含む配列だと非常に見にくいです。
変数や配列を見やすくするため、私は下記の方法でデバックしています。


phpで変数や配列の値をデバックする方法

・「var_dump」を使用した場合

【PHP】

$arr = array('aaa', 'bbb', 'ccc');
var_dump($arr);

【出力結果】

array(3) { [0]=> string(3) "aaa" [1]=> string(3) "bbb" [2]=> string(3) "ccc" }

・「print_r」使用した場合

【PHP】

$arr = array('aaa', 'bbb', 'ccc');
print_r($arr);

【出力結果】

Array ( [0] => aaa [1] => bbb [2] => ccc )

・使用しているデバック方法

debug_backtrace」を使用し、ファンクションが呼びだしたファイルのパスと行数を出力するようにしています。
pre」タグを使用することによって出力内容が見やすくなります。後はCSSでより見やすくなるように調整してます。
func_get_args」を使用し、関数に引数リストを取得してます。

【PHP】

独自でデバック関数

function dp() {
    $arr = debug_backtrace();
    echo '<div>' . $arr[0]['file'] . '  ' . $arr[0]['line'] . '</div>';

    $args = func_get_args();
    echo '<pre style="border:1px solid #CCC; padding: 5px; font-family: monospace; font-size: 12px;">';
    foreach ($args as $val) {
        print_r($val);
    }
    echo '</pre>';
}

上記の関数を呼び出します。

$arr = array('aaa', 'bbb', 'ccc');
dp($arr);

【出力結果】

/var/www/html/[パス]/test.php 28

Array
(
    [0] => aaa
    [1] => bbb
    [2] => ccc
)

出力した内容に改行がそのまま表示されるので、見やすく開発効率も上がると思います。


debug_backtrace()とは

関数を呼び出したバックトレースを連想配列で返します。
下記のように出力されます。

Array
(
    [file] => [関数を呼び出したファイルの絶対パス]
    [line] => 28
    [function] => dp
(省略)
)

.htaccess:.htaccessでwwwの有無を統一する方法

WEBサイトを作成しているとサイトのドメイン部分(URL)を「www」無し、又は「www」有りで統一したい場合があります。
「www」の制御はどちらでもいいという方もいますし、どちらがいいということもありません。
しかし、どちらかに統一していないと検索エンジンから別サイトと判断されてしまうようなので、SEOを考えても「www有無統一はした方がいいと思います。

例としては「yahoo」のサイトで「http://yahoo.co.jp/」でアクセスすると、自動的に「www」有りの「http://www.yahoo.co.jp/」にリダイレクトされサイトが表示されます。

今回はwwwの有無を統一させる為に「.htaccess」を使用し、URLに表示するwww有無を制御する方法を記載します。
サイトにアクセスすると「.htaccess」で設定したURLに転送されるようになります。


wwwが有りに設定する場合
※「sample.com」の箇所を設定するドメインに書き換えます。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(sample\.com)(:80)? [NC]
RewriteRule ^(.*) http://www.sample.com/$1 [R=301,L]
</IfModule>

wwwが無しに設定する場合
※「sample.com」の箇所を設定するドメインに書き換えます。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.sample\.com)(:80)? [NC]
RewriteRule ^(.*)$ http://sample.com/$1 [R=301,L]
</IfModule>

「.htaccess」を作成し、設定したいサイトのドキュメントルートにアップロードします。
アップが完了すると「www」の有無が統一されます。

Linux:出力結果やテキストをファイルに書き出す方法

Linuxで操作している時に各コマンドで出力した内容や文字列等のテキストをファイルに書き出したい場合があります。
リダイレクションを使用すれば、ファイルに書き込むことができます。
今回はLinuxでリダイレクションを使用して、出力結果やテキストをファイルに書き出す方法をメモします。


リダイレクションとは

入力元や出力先を変更する機能です。
出力結果をディスプレイに出力するのではなく、ファイルに書き込む場合などに利用されます。
「>」、「>>」を使用します。


ファイルに書き出す方法

・テキストをファイルに書き出す場合

# echo 'test' > hoge.txt
# cat hoge.txt
test

・追記で書き込みを行う場合

# echo 'hoge' >> hoge.txt
# cat hoge.txt
test
hoge

・コマンドで出力した内容をファイルに書き出す場合

# ls
hoge.txt  hoge2.txt  list.txt
# ls > hoge2.txt
# cat hoge2.txt
hoge.txt
hoge2.txt
list.txt

・ファイルの中身を空にする場合

# echo '' > hoge2.txt
# cat hoge2.txt


Dreamweaver:_notesフォルダの削除、生成をさせない方法

Dreamweaverで作業していると「_notes」というフォルダを見たことがあると思います。
ちなみに_notesフォルダには「dwsync.xml」というファイルが作成され、「dwsync.xml」にはリモートとの同期情報が保存されます。

dreamweaver _notes1

「_notes」や「dwsync.xml」はDreamweaverで自動で生成されるファイル・フォルダなので削除しても問題無いです。
手動で削除しても、何度も生成されてしまうのでDreamweaverの設定を変更します。


_notesフォルダの削除

すでに生成された_notesフォルダを削除するには下記の操作で削除できます。

「サイト設定」→「詳細設定」→「デザインノート」で「デザインノートの保持」のチェックを外します。
※Fireworksと連動する設定ファイルを生成しないようにします。

dreamweaver _notes2

メッセージボックスが出力されるので「はい」をクリックします。

dreamweaver _notes3

_notesフォルダを削除するために、「デザインノートのクリーンアップ」ボタンをクリックします。

dreamweaver _notes4

メッセージボックスが出力されるので「はい」をクリックします。

dreamweaver _notes5

生成されていた_notesフォルダが削除されます。


dwsync.xmlを生成をさせない方法

_notesフォルダを削除したのに、再度サーバーにファイルをアップすると、また生成されてしまいます。
生成させないように下記の設定を行います。

「サイト設定」→「サーバー」→「リモート情報の詳細設定タブ」で「同期情報の保持」のチェックを外します。

dreamweaver _notes6

メッセージボックスが出力されるので「はい」をクリックします。

dreamweaver _notes7

サーバーにファイルをアップしてもdwsync.xmlが生成されなくなります。