<?xml version="1.0" encoding="EUC-JP"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja">
<title>STUDIO WING .lib</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/" />
<modified>2007-11-10T16:23:52Z</modified>
<tagline>PHP/Perl/FLASH/SQL/JavaScriptなどプログラムの構築方法サンプル</tagline>
<id>tag:lib.stwing.jp,2011://2</id>
<generator url="http://www.movabletype.org/" version="3.171-ja">Movable Type</generator>
<copyright>Copyright (c) 2007, wing</copyright>
<entry>
<title>Apache：Windows VistaにApache+PHP+PostgreSQL+phpPgAdminをインストールする方法</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2007/11/apachewindows_v.html" />
<modified>2007-11-10T16:23:52Z</modified>
<issued>2007-11-10T15:00:01Z</issued>
<id>tag:lib.stwing.jp,2007://2.398</id>
<created>2007-11-10T15:00:01Z</created>
<summary type="text/plain">Windows VistaにApache+PHP+PostgreSQLをインスト...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0601)・インストール</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>Windows VistaにApache+PHP+PostgreSQLをインストールすることは可能ですが、VistaになってからUAC（ユーザーアカウント制御）という機能が追加されて、設定が厄介です。</p>

<p>あくまで一例ですが、インストール方法を記述しておきます。</p>]]>
<![CDATA[<p>■ <b>STEP1 VistaのUAC機能を解除</b></p>

<p>1. [コントロールパネル] → [ユーザーアカウント] をクリック</p>

<p>2. [再度 ユーザーアカウント] をクリック</p>

<p>3. [ユーザーアカウント制御の有効化または無効化] をクリックし、[ユーザーアカウント制御（UAC）を使ってコンピュータの保護に役立たせる] のチェックを外す</p>

<p>4. PCを再起動</p>

<p><br />
■ <b>STEP2 PostgreSQL用にアカウントを作成・設定</b></p>

<p>1. [コントロールパネル] → [ユーザーアカウント] をクリック</p>

<p>2. [ユーザーアカウントの追加または削除] をクリックし、[新しいアカウントの作成] をクリック</p>

<p>3. [新しいアカウント名] の入力フォームに「postgres」と入力し、[標準ユーザー] にチェックを入れ、[アカウントの作成] ボタンをクリック</p>

<p>4. 再度 [ユーザーアカウントの追加または削除] をクリックし、[パスワードの変更] から任意のパスワードを設定（パスワードはメモしておく）</p>

<p>5. [スタート] → [すべてのプログラム] → [アクセサリ] → [ファイル名を指定して実行] をクリックし、「secpol.msc」と入力してOKをクリック</p>

<p>6. [ローカルポリシー] → [ユーザー権利の割り当て] → 「サービスとしてログオン」 をクリックし、ボックス内に「postgres」と入力してOKをクリック</p>

<p><br />
■ <b>STEP3 Apacheのインストール</b></p>

<p>1. <a href="http://ftp.kddilabs.jp/infosystems/apache/httpd/binaries/win32/" target="_blank">apache.org</a> のサイトより、インストーラーをダウンロード（apache_2.2.6-win32-x86-openssl-0.9.8e.msi）、デスクトップに保存</p>

<p>2. デスクトップ上のアイコンをダブルクリック</p>

<p>3. インストール開始。Nextをクリックしていく。</p>

<p>4. Server Informationの項目では、特に指定がない場合には</p>

<p>[Network Domain] ：　somenet.com<br />
[Server Name] ：　www.somenet.com<br />
[Administrator's Email Address] ：　webmaster@somenet.com</p>

<p>と入力（後で変更可能）</p>

<p>5. setup typeはTypicalを選択（必要に応じて変更）</p>

<p>6. インストール先もデフォルトのまま（必要に応じて変更）</p>

<p>7. [Install] をクリック</p>

<p>8. インストールが完了した後、ブラウザから「http://localhost/」を表示させてみる。「It works!」と表示されたらインストール成功</p>

<p><br />
■ <b>STEP4 PHP5のインストール</b></p>

<p>1. <a href="http://www.php.net/downloads.php" target="_blank">http://www.php.net/downloads.php</a> のサイトより、「PHP 5.2.5 zip package」をダウンロード</p>

<p>2. ローカルのCドライブ直下に「php」ディレクトリを作成し、そこに先ほどダウンロードしたzipファイルを解凍し、中身をすべて入れる</p>

<p>3. Apacheからphpモジュールを呼び出すため、C:\php\php5ts.dll を C:\windows\system32\ にコピー</p>

<p>4. 次に、Apacheのhttpd.confを編集。<br />
C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf をテキストエディタで開く。</p>

<p>5. 以下の各行を追加・編集<br />
「LoadModule php5_module "C:/php/php5apache2_2.dll"」<br />
「AddType application/x-httpd-php .php」<br />
「PHPIniDir "C:/php"」</p>

<p>&lt;IfModule dir_module&gt;<br />
    DirectoryIndex index.html<br />
&lt;/IfModule&gt;<br />
　↓<br />
&lt;IfModule dir_module&gt;<br />
    DirectoryIndex index.html index.php<br />
&lt;/IfModule&gt;</p>

<p>に変更</p>

<p>6. 環境編集を設定。[コントロールパネル] → [システムとメンテナンス] → [システム] → [システムの詳細設定] → [環境変数]をクリック。</p>

<p>7. 下部の[Path] をクリックし、[編集] をクリック。末尾に「;C:\php」と追加し、OKをクリック。</p>

<p>8. Apacheを再起動して、PHPの設定完了</p>

<p><br />
■ <b>STEP5 PostgreSQLのインストール</b></p>

<p>1. C:\Proram Files内に、「PostgreSQL」ディレクトリを作成</p>

<p>2. 「PostgreSQL」ディレクトリを右クリック → [プロパティ]  → [セキュリティ] → [編集] をクリックし、[Users] のアクセス許可内「フルコントロール」の許可にチェックを入れ、OK</p>

<p>3. <a href="http://ftp2.jp.postgresql.org/pub/postgresql/win32/" target="_blank">http://ftp2.jp.postgresql.org/pub/postgresql/win32/</a> よりpostgresql-8.2.5-1-ja.zipをデスクトップにダウンロード</p>

<p>4. zipファイルを解凍し、インストーラーをダブルクリック</p>

<p>5. 「サービス構成」の項目では、アカウント名にSTEP2で設定した「postgres」、パスワードにSTEP2で設定したパスワードを入れる。</p>

<p>6. 「データベースクラスタの初期化」の項目では、スーパーユーザー名には「postgres」、パスワードは5で設定したものとは別なパスワードを設定</p>

<p>7. インストール完了</p>

<p>8. pnp.iniの設定を変更</p>

<p>・C:\php/php.ini-distファイルをphp.iniとして保存<br />
・php.iniをテキストエディタで開き、</p>

<p>;extension=php_pgsql.dll → extension=php_pgsql.dll に変更<br />
;extension_dir = "./" → extension_dir = "C:/php/ext/" に変更</p>

<p><br />
■ <b>STEP6 phpPgAdminのインストール</b></p>

<p>1. <a href="http://phppgadmin.sourceforge.net/?page=download" target="_blank">http://phppgadmin.sourceforge.net/?page=download</a> より、「phpPgAdmin-4.1.3.zip」 をデスクトップにダウンロード</p>

<p>2. 解凍し、中身をすべて「C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\phpPgAdmin」内に入れる</p>

<p>3. 「C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\phpPgAdmin\conf\config.inc」をテキストエディタで開き、</p>

<p>$conf['extra_login_security'] = true;<br />
　↓<br />
$conf['extra_login_security'] = false;　に変更</p>

<p><br />
以上で、すべての設定が完了します。</p>

<p>htdocs内に</p>

<p>&lt;?php</p>

<p>phpinfo();</p>

<p>?&gt;</p>

<p>という内容のphpinfo.phpを保存し、ブラウザから「http://localhost/phpinfo.php」と入力することにより、各種設定を確認することが可能です。</p>]]>
</content>
</entry>
<entry>
<title>PHP：tmpfile()関数</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2007/01/phptmpfile.html" />
<modified>2007-05-27T13:25:36Z</modified>
<issued>2007-01-24T14:04:43Z</issued>
<id>tag:lib.stwing.jp,2007://2.392</id>
<created>2007-01-24T14:04:43Z</created>
<summary type="text/plain">tmpfile()関数は、一時ファイルを生成します。 戻り値としてfopen()...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0104)・関数(P〜T)</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>tmpfile()関数は、一時ファイルを生成します。<br />
戻り値としてfopen()関数実行時と同様のファイルポインタを返します。</p>

<p>※スクリプト中で一時的に作業用ファイルが必要な場合に使用します。<br />
※一時ファイルはfclose()関数実行時、またはスクリプト終了時に自動的に削除されます。</p>]]>
<![CDATA[<p><b>$fp = tmpfile();</b><br />
//一時ファイルを生成します。</p>]]>
</content>
</entry>
<entry>
<title>PHP：is_uploaded_file()関数・move_uploaded_file()関数</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2007/01/phpis_uploaded.html" />
<modified>2007-05-27T13:26:07Z</modified>
<issued>2007-01-09T14:33:52Z</issued>
<id>tag:lib.stwing.jp,2007://2.391</id>
<created>2007-01-09T14:33:52Z</created>
<summary type="text/plain">is_uploaded_file()関数 アップロードファイルかどうかをチェック...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0102)・関数(F〜J)</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p><b>is_uploaded_file()関数</b><br />
アップロードファイルかどうかをチェックします。</p>

<p><b>move_uploaded_file()関数</b><br />
アップロードされたファイルを指定したパスに移動します。</p>

<p>※指定したファイルが有効なアップロードファイルでない場合、または上書き許可されていない重複したファイル名でアップした場合、移動先のディレクトリのパーミッションが書き込み許可されていない場合など、何らかの理由で移動できない場合にはFALSEを返します。</p>]]>
<![CDATA[<p>■ PHPでファイルをアップロードする方法のサンプル<br />
※ファイルの文字コードはEUCで保存してください。</p>

<p>&lt;?php</p>

<p>//アップロードした場合の処理<br />
if($_POST['mode'] == 'upload'){</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;<b>if(!is_uploaded_file($_FILES['img1']['tmp_name'])){</b><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die("エラー：アップロードされたデータがファイルではありません。");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;if($_FILES['img1']['error']){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die("エラー：{$_FILES['img1']['error']}");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;$filePath = '/var/www/htdocs/images/'.$_FILES['img1']['name'];&nbsp;&nbsp;//ファイルの移動先を指定</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;<b>$res = move_uploaded_file($_FILES['img1']['tmp_name'], $filePath);</b></p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;if(!$res){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die("エラー：ファイルの移動に失敗しました。");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;$result = "アップロードが正常に完了しました。";<br />
}</p>

<p>print &lt;&lt;&lt;EOF<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;ファイルアップロード&lt;/title&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"&gt;<br />
&lt;/head&gt;</p>

<p>&lt;body&gt;<br />
$result<br />
&lt;form name="uploadForm" enctype="multipart/form-data" action="{$_SERVER['PHP_SELF']}" method="post"&gt;<br />
&lt;input name="img1" type="file"&gt;&lt;br&gt;<br />
&lt;br&gt;<br />
&lt;input type="hidden" name="mode" value="upload"&gt;<br />
&lt;input type="submit" name="submit" value="アップロード"&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
EOF;</p>

<p>?&gt;</p>]]>
</content>
</entry>
<entry>
<title>PHP：ftruncate()関数</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2007/01/phpftruncate.html" />
<modified>2007-01-08T12:55:35Z</modified>
<issued>2007-01-08T12:51:03Z</issued>
<id>tag:lib.stwing.jp,2007://2.390</id>
<created>2007-01-08T12:51:03Z</created>
<summary type="text/plain">ftruncate()関数は、ファイルサイズを指定したサイズに丸めます。 成功し...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0102)・関数(F〜J)</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>ftruncate()関数は、ファイルサイズを指定したサイズに丸めます。<br />
成功した場合にはTRUE、失敗した場合にはFALSEを返します。</p>]]>
<![CDATA[<p>$fp = fopen("test.dat", "a");&nbsp;&nbsp;//追加書き込みモードでオープン</p>

<p><b>ftruncate($fp, 100);</b>&nbsp;&nbsp;//test.datの101バイト目以降を削除</p>

<p>※追記モード以外でファイルを開いた場合、ftruncate()関数はファイルの中身を指定バイト数のブランクで埋めます。<br />
</p>]]>
</content>
</entry>
<entry>
<title>PHP：glob()関数</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2007/01/phpglob.html" />
<modified>2007-01-07T15:16:48Z</modified>
<issued>2007-01-07T15:03:09Z</issued>
<id>tag:lib.stwing.jp,2007://2.389</id>
<created>2007-01-07T15:03:09Z</created>
<summary type="text/plain">glob()関数は、現在のディレクトリ上から指定したパターンにマッチするファイル...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0102)・関数(F〜J)</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>glob()関数は、現在のディレクトリ上から指定したパターンにマッチするファイル名を検索し、配列として返します。<br />
エラーの場合にはFALSEを返します。</p>]]>
<![CDATA[<p><b>glob(pattern, option);</b></p>

<p>pattern：検索パターン<br />
option：検索オプション</p>

<p>■optionの種類</p>

<p>GLOB_MARK：戻り値にスラッシュを追加<br />
GLOB_NOSORT：ファイル名配列を返す際にソートをしない<br />
GLOB_NOCHECK：マッチングしない場合に検索パターン自身を返す<br />
GLOB_NOESCAPE：メタ文字をバックスラッシュでエスケープしない<br />
GLOB_BRACE：{ a, b, c } を 'a' , 'b' , 'c' に展開<br />
GLOB_ONLYDIR：ディレクトリのみを返す（Windows版では利用不可）</p>

<p><br />
<b>print_r(glob("test.*"));</b></p>

<p>上記の結果、現在のディレクトリから｢test.｣がつくファイル名を配列で出力します。</p>

<p>（Array( [0] => test.html [1] => test.xml ) のように出力します。）<br />
</p>]]>
</content>
</entry>
<entry>
<title>PHP：rmdir()関数</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2007/01/phprmdir.html" />
<modified>2007-01-06T15:54:38Z</modified>
<issued>2007-01-06T15:51:19Z</issued>
<id>tag:lib.stwing.jp,2007://2.388</id>
<created>2007-01-06T15:51:19Z</created>
<summary type="text/plain">rmdir()関数はディレクトリを削除します。 ディレクトリ削除に失敗した場合に...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0104)・関数(P〜T)</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>rmdir()関数はディレクトリを削除します。<br />
ディレクトリ削除に失敗した場合には0を返します。</p>]]>
<![CDATA[<p>$dir = "/var/www/htdocs/test";</p>

<p>if(file_exists($dir)){&nbsp;&nbsp;//testディレクトリが存在する場合<br />
&nbsp;&nbsp;&nbsp;&nbsp;<b>rmdir($dir);</b><br />
}</p>

<p><br />
※上記の結果、testディレクトリが存在する場合には削除します。<br />
</p>]]>
</content>
</entry>
<entry>
<title>PHP：mkdir()関数</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2007/01/phpmkdir.html" />
<modified>2007-01-05T14:05:25Z</modified>
<issued>2007-01-05T14:01:06Z</issued>
<id>tag:lib.stwing.jp,2007://2.387</id>
<created>2007-01-05T14:01:06Z</created>
<summary type="text/plain">mkdir()関数は、ディレクトリを作成します。 ディレクトリ作成に成功した場合...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0103)・関数(K〜O)</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>mkdir()関数は、ディレクトリを作成します。<br />
ディレクトリ作成に成功した場合にはTRUE、失敗した場合にはFALSEを返します。</p>]]>
<![CDATA[<p>$dir = "/var/www/htdocs/test";</p>

<p><b>$res = mkdir($dir, 0777);</b>&nbsp;&nbsp;//testディレクトリをパーミッション777で作成</p>

<p>if($res){<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "testディレクトリの作成に成功しました。";<br />
}else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "testディレクトリの作成に失敗しました。";<br />
}</p>

<p>※上記の結果、testディレクトリ作成成功時には｢ディレクトリの作成に成功しました。｣を、失敗時には｢testディレクトリの作成に失敗しました。｣を出力します。</p>]]>
</content>
</entry>
<entry>
<title>PostgreSQL：フィールドタイプ（データ型）一覧</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2006/12/postgresql.html" />
<modified>2006-12-21T14:01:10Z</modified>
<issued>2006-12-21T13:54:51Z</issued>
<id>tag:lib.stwing.jp,2006://2.386</id>
<created>2006-12-21T13:54:51Z</created>
<summary type="text/plain">smailint / int2                     2バイト...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0410)・基礎</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>smailint / int2                     2バイト整数<br />
integer / int / int4                4バイト整数<br />
bigint / int8                       8バイト整数<br />
decimal(a, a) / numeric(a, s)       10進型<br />
real / float4                       6桁単精度浮動小数点<br />
double precision / float8           15桁倍精度浮動小数点<br />
serial                              4バイト順序<br />
bigserial                           8バイト順序<br />
date                                日付<br />
time (without time zone)            時間<br />
time with time zone                 時間(時間帯付き)<br />
timestamp (without time zone)       日付時刻<br />
timestamp with time zone            日付時刻(時間帯付き)<br />
interval                            時間間隔<br />
char(文字数) / character            固定長文字列(最大 4096 文字)<br />
varchar(文字数) / charcter varying  可変長文字列(最大 4096 文字)<br />
text                                テキスト<br />
boolean / bool                      true / false<br />
ラージオブジェクト                  oid 型</p>]]>

</content>
</entry>
<entry>
<title>PostgreSQL：テーブルを削除　DROP TABLE</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2006/12/postgresqldrop.html" />
<modified>2006-12-21T13:52:00Z</modified>
<issued>2006-12-21T13:50:49Z</issued>
<id>tag:lib.stwing.jp,2006://2.385</id>
<created>2006-12-21T13:50:49Z</created>
<summary type="text/plain">テーブルを削除する場合には、DROP TABLEを使用します。 DROP TAB...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0470)・SQL</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>テーブルを削除する場合には、DROP TABLEを使用します。</p>

<p>DROP TABLE shopinfo;</p>]]>

</content>
</entry>
<entry>
<title>PostgreSQL：テーブルを作成　CREATE TABLE</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2006/12/postgresqlcreat.html" />
<modified>2006-12-20T14:27:56Z</modified>
<issued>2006-12-20T14:13:10Z</issued>
<id>tag:lib.stwing.jp,2006://2.384</id>
<created>2006-12-20T14:13:10Z</created>
<summary type="text/plain">テーブルを作成する場合には、CREATE TABLEを使用します。 ・テーブル作...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0470)・SQL</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>テーブルを作成する場合には、CREATE TABLEを使用します。</p>

<p>・テーブル作成時にNOT NULL制約、UNIQUE制約、DEFAULT初期値設定などを指定可能です。<br />
・複合主キー（プライマリーキー）はテーブル作成時にのみ付与することができます。</p>]]>
<![CDATA[<p>■<b>通常のテーブル作成</b></p>

<p>create table sglog(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"shop_id" integer,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"fullname" varchar(100) not null,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"ip" varchar(100) not null,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"log_date" timestamp DEFAULT "timestamp"('now'::text) not null<br />
);</p>

<p>■<b>プライマリーキー、ユニーク制約などを付ける</b></p>

<p>create table area(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"area_id" integer primary key,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"area_name" varchar(100) not null,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"ordernum" integer UNIQUE not null,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"registday" timestamp DEFAULT "timestamp"('now'::text) not null,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"parent_areaid" integer,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"rank" integer<br />
);</p>

<p>■<b>複合主キーを付ける</b></p>

<p>create table rcmenu(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"rcmenuid" integer DEFAULT nextval('"rcmenu_rcmenuid_seq"'::text) not null,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"title" varchar(100) not null,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"list" text,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"must" boolean DEFAULT 'f' not null,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"ordernum" integer UNIQUE not null,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Constraint "rcmenu_pkey" Primary Key (rcmenuid, title)<br />
);</p>

<p>■<b>複数のキーでユニークにする</b></p>

<p>create table r_access_i(<br />
&nbsp;&nbsp;&nbsp;&nbsp;"shop_id" integer not null references sginfo(shop_id) on update cascade on delete cascade,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"inout" varchar(10) not null,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"ym" varchar(10) not null,<br />
&nbsp;&nbsp;&nbsp;&nbsp;"count" integer not null,<br />
&nbsp;&nbsp;&nbsp;&nbsp;Constraint "raccess_i_ukey" UNIQUE (shop_id, inout, ym)<br />
);</p>

<p>※IDのようなユニークな値を持ったテーブルの場合、出来るだけプライマリーキーの設定をしたほうがいいです。プライマリーキーを設定することにより索引（インデックス）が作成され、SELECT文実行時などのレスポンスの速さに格段に差が出ます。</p>]]>
</content>
</entry>
<entry>
<title>PostgreSQL：既存のテーブルの定義を変更　ALTER TABLE</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2006/12/postgresqlalter.html" />
<modified>2006-12-19T14:20:09Z</modified>
<issued>2006-12-19T14:04:02Z</issued>
<id>tag:lib.stwing.jp,2006://2.383</id>
<created>2006-12-19T14:04:02Z</created>
<summary type="text/plain">ALTER TABLE は列の追加や削除、名前の変更、プライマリキー制約の追加な...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0470)・SQL</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>ALTER TABLE は列の追加や削除、名前の変更、プライマリキー制約の追加など、既存のテーブルの定義を変更します。</p>]]>
<![CDATA[<p><b>integer型の列をテーブルに追加します。 </b></p>

<p>ALTER TABLE shopinfo ADD COLUMN shop_name integer;</p>

<p>※not null制約は一度に加えることができません。</b></p>

<p><b>テーブルから列を削除します。 </b></p>

<p>ALTER TABLE shopinfo DROP COLUMN address RESTRICT;</p>

<p><b>既存の列の名前を変更します。 </b></p>

<p>ALTER TABLE shopinfo RENAME COLUMN address TO city;</p>

<p><b>既存のテーブルの名前を変更します。</b></p>

<p>ALTER TABLE shopinfo RENAME TO shopdata;</p>

<p><b>列に非NULL制約を付与します。</b></p>

<p>ALTER TABLE shopinfo ALTER COLUMN tel SET NOT NULL;<br />
列から非NULL制約を削除します。 </p>

<p>ALTER TABLE shopinfo ALTER COLUMN tel DROP NOT NULL;</p>

<p><b>テーブルにCHECK制約を付与します。</b></p>

<p>ALTER TABLE shopinfo ADD CONSTRAINT zipcheck CHECK (char_length(zipcode) = 5);</p>

<p><b>テーブルとその子テーブルからCHECK制約を削除します。 </b></p>

<p>ALTER TABLE shopinfo DROP CONSTRAINT zipcheck;</p>

<p><b>テーブルに外部キー制約を付与します。</b></p>

<p>ALTER TABLE shopinfo ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses (address) MATCH FULL;</p>

<p><b>テーブルに(複数列の)一意性制約を付与します。</b></p>

<p>ALTER TABLE shopinfo ADD CONSTRAINT shop_id_zipcode_key UNIQUE (shop_id, zipcode);</p>

<p><b>自動的に命名されるプライマリキー制約をテーブルに付与します。</b><br />
※テーブルは1つのみのプライマリキーしか持つことができません。 </p>

<p>ALTER TABLE shopinfo ADD PRIMARY KEY (shop_id);</p>]]>
</content>
</entry>
<entry>
<title>PHP：is_writable()関数</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2006/12/phpis_writable.html" />
<modified>2006-12-18T15:34:16Z</modified>
<issued>2006-12-18T15:32:04Z</issued>
<id>tag:lib.stwing.jp,2006://2.382</id>
<created>2006-12-18T15:32:04Z</created>
<summary type="text/plain">is_writable()関数は、引数に指定したパスの対象が書き込み可能かどうか...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0102)・関数(F〜J)</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>is_writable()関数は、引数に指定したパスの対象が書き込み可能かどうかを調べます。<br />
書き込み可能な場合にはTRUE、それ以外の場合にはFALSEを返します。</p>]]>
<![CDATA[<p><b>if(is_writable("data.dat")){</b><br />
&nbsp;&nbsp;&nbsp;&nbsp;print "data.datは書き込み可能です。";<br />
}</p>

<p>※上記の結果、data.datが書き込み可能な場合｢data.datは書き込み可能です。｣を出力します。</p>]]>
</content>
</entry>
<entry>
<title>Apache：動的URLを静的に置換・mod_rewrite</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2006/12/apacheurlmod_re.html" />
<modified>2006-12-17T15:18:24Z</modified>
<issued>2006-12-17T15:04:50Z</issued>
<id>tag:lib.stwing.jp,2006://2.381</id>
<created>2006-12-17T15:04:50Z</created>
<summary type="text/plain">http://lib.stwing.jp/item.php?item_id=25...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0602)・htaccess</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>http://lib.stwing.jp/item.php?item_id=25<br />
　↓<br />
http://lib.stwing.jp/item/25</p>

<p>といった感じに動的なURLを静的なURLに置き換えたい場合、htaccessのmod_rewriteを使うと便利です。</p>]]>
<![CDATA[<p>■<b>上記の例の場合、以下を.htaccessに記述します。</b></p>

<p>RewriteEngine on<br />
RewriteBase /</p>

<p>RewriteRule item/([0-9]+)$ /item.php?item_id=$1</p>

<p>※.htaccessが使用でき、mod_rewriteモジュールが許可されているサーバ環境でのみ使用できます。<br />
※上記のように静的なURLに置換することにより、一般にSEO効果が高まると言われています。</p>

<p>■<b>複数の引数を置換することも可能です。</b></p>

<p>http://lib.stwing.jp/item.php?category=PHP&item_id=25<br />
　↓<br />
http://lib.stwing.jp/PHP/25</p>

<p>のように置換する場合、以下を.htaccessに記述します。</p>

<p>RewriteEngine on<br />
RewriteBase /</p>

<p>RewriteRule ([a-zA-Z0-9]+)/([a-zA-Z0-9]+)$ /item.php?category=$1&item_id=$2</p>]]>
</content>
</entry>
<entry>
<title>PHP：is_readable()関数</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2006/12/phpis_readable.html" />
<modified>2006-12-16T14:15:04Z</modified>
<issued>2006-12-16T14:12:36Z</issued>
<id>tag:lib.stwing.jp,2006://2.380</id>
<created>2006-12-16T14:12:36Z</created>
<summary type="text/plain">is_readable()関数は、引数に指定したパスの対象が読み取り可能かどうか...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0102)・関数(F〜J)</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>is_readable()関数は、引数に指定したパスの対象が読み取り可能かどうかを調べます。<br />
読み取り可能な場合にはTRUE、それ以外の場合にはFALSEを返します。</p>]]>
<![CDATA[<p><b>if(is_readable("index.html")){</b><br />
&nbsp;&nbsp;&nbsp;&nbsp;print "index.htmlは読み取り可能です。";<br />
}</p>

<p>※上記の結果、index.htmlが読み取り可能な場合｢index.htmlは読み取り可能です。｣を出力します。</p>]]>
</content>
</entry>
<entry>
<title>PHP：is_link()関数</title>
<link rel="alternate" type="text/html" href="http://lib.stwing.jp/archives/2006/12/phpis_link.html" />
<modified>2006-12-14T14:14:42Z</modified>
<issued>2006-12-14T14:11:57Z</issued>
<id>tag:lib.stwing.jp,2006://2.379</id>
<created>2006-12-14T14:11:57Z</created>
<summary type="text/plain">is_link()関数は、引数に指定したパスの対象がシンボリックリンクかどうかを...</summary>
<author>
<name>wing</name>


</author>
<dc:subject>0102)・関数(F〜J)</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://lib.stwing.jp/">
<![CDATA[<p>is_link()関数は、引数に指定したパスの対象がシンボリックリンクかどうかを調べます。<br />
シンボリックリンクの場合にはTRUE、それ以外の場合にはFALSEを返します。</p>]]>
<![CDATA[<p><b>if(is_link("index.html")){</b><br />
    print "index.htmlはシンボリックリンクです。";<br />
}</p>

<p>※上記の結果、index.htmlがシンボリックリンクの場合｢index.htmlはシンボリックリンクです。｣を出力します。<br />
</p>]]>
</content>
</entry>

</feed>
