MySQL:auto_incrementが最大値まで達したとき

auto_incrementにしたカラムの型がintなら2147483647、bigintなら9223372036854775807がautoincrementの最大になる。

実際に最大値までauto_incrementを進めてみる。

 ALTER TABLE table1 AUTO_INCREMENT= 2147483647;

auto_incrementが最大値に達するともうそのテーブルには行を追加することはできなくなります。

oracleのシーケンスならCYCLEオプションがあるけどmysqlのauto_incrementにはそのような機能は無いらしい。

ではauto_incrementが最大値に達したとき、どうすればよいのか?

単純に

 ALTER TABLE table1 AUTO_INCREMENT= 1;

としても、table1に1より大きいキーが存在する限りauto_incrementは1に戻らない。

 DELETE FROM table1; --データを全部消す。
 ALTER TABLE table1 AUTO_INCREMENT= 1;

ならばauto_incrementは1に戻るので、循環シーケンスと似たような動きにするにはINSERTトリガーで

1. 対象テーブルのauto_increment値が最大に達しているかチェック。最大なら2.へ
2. 対象テーブルのデータを別テーブルに退避
3. 対象テーブルのデータをDELETE
4. ALTER TABLE~でauto_incrementを初期値に設定

という流れになるけど、INSERTの度に1.のチェックを走らせるのはちょっと嫌(1/2147483647の為に余計な処理を入れたくない)。また、退避後のデータをどう扱うかも微妙(UNIONするにしても別のキーが要るし・・・)だから
int autoincrementでキーの枯渇が心配ならbigint型にしたほうがよいと思う。
bigintの最大値は9223372036854775807。intの約42億倍もある。
これは1日に1億個のキーを消費しても2億年持つという計算になる。

php: Smartyのdate_formatで前のゼロを表示しない方法

Smartyのdate_formatで先頭に0をつけない月と日を出力するには、引数の書式指定部分にそれぞれ”-“(マイナス)を付ける。

{$mydate|date_format:'%-m:%-d'}

‘%m%d’なら’07/05’になる。
-をつけて’%-m:%-d’なら’7/5’になる。

linux:yumレポジトリを一時的に追加する

普段は公式のレポジトリだけチェックしたいけどphpだけは最新にアップグレードしたい。そんなときに。
目的のパッケージがあるレポジトリに対しての設定ファイルを追加する方法。
RPM-GPG-KEYをインストール。

# rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

/etc/yum.repos.d/の下にrepoファイル追加

/etc/yum.repos.d/utterramblings.repo
[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

目的のパッケージをアップデートしたらenabledを0に設定し、普段は参照しないようにしておく。

Apache:エラーと対応方法

とりあえず、エラーログを確認すること。全てはそれから。

ドキュメントルートへのアクセスがforbiddenになるとき

こんなエラーのとき
Directory index forbidden by Options directive: /var/www/html/
→Option Indexesが設定されていないため、/でindex.html等にアクセスできていない。

Permission deniedのエラーが出るとき

こんなエラーのとき
(13)Permission denied: access to / denied
ディレクトリのパーミッションを確認する
ユーザディレクトリにドキュメントルートを置いたときはユーザディレクトリも実行可能でないといけない。

 chmod +x /home/ユーザ

seLinuxの設定が怪しいとき

seLinuxが原因かどうかは一時的にseLinuxを切ってみれば解る。
/etc/selinux/configを変更する。

/etc/selinux/config
 SELINUX=disabled

設定後はサーバ再起動が必要

 # reboot

php:Windows環境でphp.exe+apache+MySQLの環境を作る

php

php.netからバイナリをダウンロードする。
インストーラでもいいけど、とりあえずzipにしとく。

解凍したらフォルダごと適当なところに移動する。(以降、仮にC:php-5.2.6-Win32に置いたと仮定して読んでください。)
フォルダの中にあるphp.ini-recommendedをコピーしてphp.iniに名前を変える

apache

apache.orgから現在の最新版Apache2.2のWindows用インストーラをダウンロード&実行する。
オプションは適当に選ぶ。

httpd.confに設定を追加する。
標準のパスでインストールしたなら、C:Program FilesApache Software FoundationApache2.2confに設定ファイルhttpd.confがある。
以下の設定を追記する。

LoadModule php5_module "C:php-5.2.6-Win32php5apache2_2.dll"
PHPIniDir "C:php-5.2.6-Win32"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

linux環境の”httpd configtest”に変わるコマンドは

httpd.exe -t

このコマンドを実行して”Syntax OK”が表示されることを確認する。
OKならapacheを再起動する。

httpd.exe -k restart

公開ディレクトリにtest用のphpファイルを置いて、phpが実行されていればOKです。

XdebugをWindows環境で使うには
http://pecl4win.php.net/ext.php/php_xdebug.dll
からphp_xdebug.dllをダウンロードしてエクステンションDirに保存する。

エクステンションとPEARを使う&開発環境用にphp.iniを編集する

php.ini
#pearディレクトリをinlude_pathに入れる
include_path = ".:C:php-5.2.6-Win32pear"

#開発用にdisplay_errorsをOnにする
display_errors = On

#extension_dirを設定する
extension_dir = "C:php-5.2.6-Win32ext"

#エラーログを出力する
error_log = php_error.log

拡張を有効にする。php_xdebug.dllも追記する。
extension=php_mbstring.dll
extension=php_pdo.dll
extension=php_pdo_mysql.dll

PEARを使えるようにする

1.go-pear.batを実行して適当に進める。
2.PEAR_ENV.regをダブルクリックしてレジストリに登録する。
3.環境変数pathにpear.batがあるディレクトリを追加する。
4.コマンドプロンプトで “pear list”コマンドが通ればOK。
5.プロクシ環境ならpear configにプロクシ設定を行う。
pear config-set http_proxy プロクシサーバ名:ポート番号

MySQL

mysql.comからMySQL Community ServerのWindouws用Setup.exeをダウンロードします。
ウィザードに従ってインストールします。
インストールが終わるとそのまま設定ウィザードに続くので適当に。