PHP デバッグ方法(XAMPP/Eclipse/Xdebug)

Xdebugモジュール

ダウンロード

phpinfo()を出力


https://xdebug.org/wizard.php
のテキストエリアにphp_info()の出力結果を貼り付け


「Analyse my phpinfo() output」ボタン押下


分析されたモジュールをダウンロード
例:php_xdebug-2.6.1-7.2-vc15.dll

保存

C:\xampp\php\ext\
に保存

XAMPP

読み込み

C:\xampp\php\php.ini
に以下を追加

[XDebug]
;; Only Zend OR (!) XDebug
zend_extension_ts="C:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\xampp\tmp"

Eclipse

デバッグの構成

サーバータブ

「PHP Webアプリケーション」をダブルクリック
名前を保存可能

ファイル:デバッグ対象のファイルを選択
URL:CakePHPの場合、URLが実ファイルと変更されるのでブラウザに表示されるURLを入力

サーバー:構成
ベースURL:ポート番号等変更がある場合

デバッガータブ


デバッカー:XDebugを選択

Vi/Vim/GVim使用方法

コマンドモード

モード変更

入力 機能
ESC コマンドモード

カーソル移動

入力 機能
h
j
k
l
^ 行頭へ
$ 行末へ
↑の行頭に移動
+ ↓の行頭に移動
( ↑の文に移動
) ↓の文に移動
{ ↑の段落に移動
} ↓の段落に移動
Ctrl+f ↓のページへ
Ctrl+b ↑のページへ
gg ファイルの先頭へ
G ファイルの末尾へ
w →の単語の先頭へ
b ←の単語の先頭へ
e →の単語の末尾へ
ge ←の単語の末尾へ

終了

入力 機能
:q 保存無し終了
:q! 変更有でも保存無し終了
:w 保存&終了しない
:wq 保存&終了

コピー&ペースト

ヤンク(コピー)

入力 機能
yy 1行全体
yw 単語の末尾まで
y$ 行末まで

カット(削除)

入力 機能
dd 1行全体
dw 単語の末尾まで
d$ カーソルから行末まで
x カーソル位置の1文字
X カーソルの前の1文字
D カーソルから末尾
D カーソル位置の改行

プット(貼付)

入力 機能
p カーソルの後ろへ
P カーソル位置(前)へ

Undo/Redo

入力 機能
u Undo(Ctrl+Z)
Ctrl+u Redo(Ctrl+Y)
. 直前の動作の繰り返し

検索・置換

入力 機能
/(正規表現) 前方検索
?(正規表現) 後方検索
# カーソル位置の単語を検索
n 次の候補
N 前の候補
:%s/(検索文字列)/(置換文字列)/g 全て置換
:%s/(検索文字列)/(置換文字列)/gc 置換を順に確認

画面分割

入力 機能
Ctrl+w+w 分割した画面へ移動
gt → のタブへ移動
gT ← のタブへ移動

入力 機能
:e (パス) ファイルを開く
:set number 行番号を表示
:(行番号) 番号の行へ移動
:!(シェルコマンド) シェルコマンドを実行。例 :!ls
Ctrl+Ins クリップボードにコピー
Shift+Del クリップボードに切取
Shift+Ins クリップボードから貼付

挿入モード

モード変更

入力 機能
i カーソル位置から
a カーソル位置の右から
o ↓ に行挿入してから
O ↑ に行挿入してから
I 行頭から
A 行末から

挿入モードでの操作

Ctrl+h ← の1文字を削除
Ctrl+j 改行
Ctrl+g Ctrl+j ↑ へ移動 ※連続入力
Ctrl+g Ctrl+k ↓ へ移動 ※連続入力

ビジュアルモード

モード変更

入力 機能
v 文字単位で
V 行単位で
Ctrl+v 短形選択で

ビジュアルモードでの操作

I ビジュアルモード中に挿入モードに
y ビジュアルモード中にヤンク
d ビジュアルモード中にカット
p ビジュアルモード中に貼付
Ctrl+0 ビジュアルモード中に矩形選択状態で貼付
レジスタ0から貼り付け

上書モード

入力 機能
R 上書き

書き込み禁止モード

入力 機能
view (ファイル名) 書き込み禁止モードで起動

MySQL バックアップ/リストア

バックアップ

スクリプト形式

mysqldump -x (DB名) -u (ユーザ名) -p > (出力先ファイル名)
mysqldump -x testdb -u testuser -p > test.dump

リストア

スクリプト形式

mysql -x (DB名) -u (ユーザ名) -p < (入力先パス)

MySQL コマンド

接続前

バージョン

mysql --version

接続

mysql -x (DB名) -u (ユーザ名) -p
mysql -x testdb -u testuser -p

接続後

切断

$ \q
$ exit
$ quite

DB一覧

show databases;

ユーザ一覧

select host, user from mysql.user;

Let’s Encrypt 使用方法

Let’s Encryptとは

「インターネットを介した安全な通信を行う際の、経済面・技術面・教育面での障壁を減らす」を使命としている、非営利団体ISRGが開発したサービス
無料、簡単にWEBサイトをSSL化できる

インストール

Pythonインストール

CentOS6.Xの場合
# yum install scl-utils python27 python27-python-tools
# scl enable python27 bash

certbotインストール

certbot=Let’s Encryptが提供する証明書発行・更新ツール

# cd /usr/local
# git clone https://github.com/letsencrypt/letsencrypt

証明書生成

apacheを停止しておく事

# letsencrypt/letsencrypt-auto certonly -a standalone -d ドメイン名
# letsencrypt/letsencrypt-auto certonly -a standalone -d office-yone.com

↓ に証明書、秘密鍵が生成される
/etc/letsencrypt/live/office-yone.com/
└cert.pem
└privkey.pem
└chain.pem

設定

証明書設定

※ /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/office-yone.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/office-yone.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/office-yone.com/chain.pem

設定後、apacheを起動しておく事


Let’s Encryptの証明期限は3カ月

WEBサイトのリンク修正

上記設定によりSSL化は完了。

サイト内で「Http://~」でリンクを張っている場合、
上記画像の様に「保護された通信」とならず、「!」が表示されている場合は、「Https://~」に変更する

HTTP→HTTPSへリダイレクト

.htaccessファイル
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

証明書の自動定期更新

# crontab -e
00 04 01 * * ~/certbot-auto renew ̠--force-renew && service httpd graceful
毎月1日4:00にcertbot-autoを定期実行
Linux CRON」参照

プログラム言語 メール送信

use Cake\Mailer\Email;

設定ファイルにおけるdefault設定を使用
$email = new Email('default');
CakePHP インストール・設定」参照
$email
  ->setFrom(['me@example.com' => 'title'])
  ->setTo('yone@office-yone.com')
  ->setSubject('題名')
  ->send('本文');

reCAPTCHA認証

準備

キー取得

reCAPTCHAのサイト登録のページでキーを取得
https://www.google.com/recaptcha/admin


googleのアドレスでないといけない
xamppで実行する場合のアドレスは「127.0.0.1」
URLもlocalhostでなく127.0.0.1/~でないとエラーとなる
※xamppでもバーチャルホストにてドメインを設定した場合はそのドメインで使用可

実装

クライアント側

<html>
<head>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<script>
 function validateRecaptcha ( code ) {
  if ( !!code ) {
   var form = document.querySelector(".recaptcha");
   form.removeAttribute('disabled');
  }
 }
</script>
</head>
<body>

<form action="server.php" method="post" enctype="multipart/form-data">
  <div
   class="g-recaptcha"
   data-callback="validateRecaptcha"
   キー取得で取得したSiteKeyを設定
   data-sitekey="XXXXXXXXXXXXXXXXXXXX">
  </div>

  <input name="test" value="test" />
  <input type="submit" name="my_submit" value="送信" id="btnSubmit"
   class="recaptcha" disabled />
</form>

</body>
</html>

サーバー側

<?php
クライアント側からのreCAPTCHAパラメータ(SiteKey)を取得
$recaptcha = htmlspecialchars($_POST['g-recaptcha-response'], ENT_QUOTES, 'UTF-8');

if(isset($recaptcha)){
 $captcha = $recaptcha;
}else{
 $captcha = "";
 echo "captchaエラー";
 exit;
}
キー取得で取得したSecretKeyを設定
$secretKey = "XXXXXXXXXXXXXXXXXXXX";

SiteKeyとSecretKeyを照合
$resp = @file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secretKey}&response={$captcha}");
$resp_result = json_decode($resp, true);

if(intval($resp_result['success']) !== 1) {
 echo('NG');
}else{
 echo('OK');
}

PHP Smarty

設定

ライブラリ

https://www.smarty.net/

配置

ライブラリ
smarty-X.X.X
 └demo
 └libs
  └Smarty.class.php
  └他
コンパイルファイル配置場所
compile
テンプレートファイル配置場所
template
 └test.tpl

テンプレート

※test.tpl
<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>~</title>
</head>
<body>
 埋め込み用変数
 <p>{$val1}</p>
 <p>{$val2}</p>
</body>
</html>

テンプレート利用

※~.php
<?php
require_once '~/smarty-X.X.X/libs/Smarty.class.php';

$smarty = new Smarty();
テンプレートファイル配置場所指定
$smarty->template_dir = '~/template';
コンパイルファイル配置場所指定
$smarty->compile_dir = '~/compile';

テンプレートファイルの変数へ値を埋め込み
$smarty->assign('val1', 999);
$smarty->assign('val2', 'aaa');
描画
$smarty->display('test.tpl');

PostgreSQL バックアップ/リストア

バックアップ

スクリプト形式

pg_dump -Fp (オプション) > (出力先パス)

カスタム形式

pg_dump -Fc > (出力先パス)

共通オプション

テーブル名指定
-t (正規表現)
-t "tbl_*"

クリーンアップ(リストア前削除)
-c

リストア

スクリプト形式

psql < (入力先パス)

カスタム形式

pg_restore -d (db名) (入力先パス)

他設定

エラーメッセージの文字コード

C:\Program Files\PostgreSQL\X.X\data\postgresq.conf
インストールディレクトリ

lc_messages = 'Japanese_Japan.932'

lc_messages = 'en_US'

PostgreSQL コマンド

接続前

接続

psql -d (DB名) -U (ユーザ名) -h (ホスト名) -p (ポート番号)
psql -d testdb -U testuser -h localhost -p 5432

DB一覧

psql -l

外部スクリプト実行

psql (接続情報) -f "\~\test.sql"
接続と同時

接続後

切断

# \q

テーブル一覧

# \d
# \dt

標準出力先

show data_directory;

データベース作成

create database test;
create database test owner user;
create database test encoding 'UTF8' /'SJIS'

ユーザー作成

create user test with password 'test';
alter role test with superuser createdb createrole;

ユーザー一覧
\du

外部スクリプト実行

\i test.sql
パスを"では囲まない

OSコマンド実行

\! ls
\! dir