shintaro.info c-cgi-book / examples

c-cgi-book examples

このディレクトリには、本文のコード片を実際にビルドして試すためのサンプルを置いています。

構成

examples/
  Makefile
  public/
    login.html
  sql/
    schema.sql
  src/
    cgi.c / cgi.h
    form.c / form.h
    html.c / html.h
    json.c / json.h
    session.c / session.h
    db.c / db.h
    hello.c
    form_echo.c
    dev_login.c
    diary_form.c
    diary_submit.c
    diary_list.c
    diary_api.c

ビルド

ODBCを使わない基本サンプルだけをビルドします。

make core

ODBCを使う日記CMS/APIもビルドします。

make diary

diary ターゲットには unixodbc-dev が必要です。

sudo apt install unixodbc unixodbc-dev libmariadb-dev

配置例

sudo cp build/*.cgi /usr/lib/cgi-bin/
sudo cp public/login.html /var/www/html/login.html

セッション保存先を作成します。

sudo mkdir -p /var/lib/c-cgi-book/sessions
sudo chown www-data:www-data /var/lib/c-cgi-book/sessions
sudo chmod 700 /var/lib/c-cgi-book/sessions

データベース

sql/schema.sql をMariaDBに投入します。

mariadb -u root -p < sql/schema.sql

接続文字列は環境変数 CGI_DB_CONN で上書きできます。

export CGI_DB_CONN='DRIVER={MariaDB};SERVER=localhost;DATABASE=sample;UID=user;PWD=pass;'

Apache CGI上で環境変数を渡す方法は環境により異なります。学習用の最初の確認では、src/db.c の既定値をローカル環境に合わせて変更しても構いません。

注意

dev_login.cgi はローカル学習用の簡易ログインです。パスワード認証を実装していません。本番公開には使わず、第8章の説明に沿ってDB上のパスワードハッシュ検証へ置き換えてください。