Apache ディレクトリインデックスを非表示にする

備忘録です。

index.html や index.php がないディレクトリをアクセスしたとき、ファイルリストが表示されて慌ててしまった。たまーにしか設定したことがないので、名称すら忘れてしまい説明書を確認するために時間を食ってしまい、がっかりだよ。

<Directory /var/www/htdocs>
    Options -Indexes FollowSymLinks MultiViews
    :
</Directory>

「-Indexes」の「-」を忘れると、さぁ大変。中身が丸見え。

FollowSymLinks は、シンボリックリンクの追加を許可する。が、セキュリティ上、シンボリックリンクが必要な場合は Alias を利用する方が良い。

Alias /manual/ /var/www/manual/

MultiViewsは、コンテンツネゴシエーションを許可する。って、何だか良く分からないけど、ブラウザとApacheの間でネゴシエーションして、特定のドキュメントを提供するようにする、とかができる。

Apache サブディレクトリの隠ぺい

備忘録です。

サーバー上の公開ディレクトリにPHPプログラムを置いた場合、中のテンプレートファイルなどが外からアクセスされるのは嬉しくない。そこで mod_access モジュールでディレクトリへのアクセスを拒否するように設定する。

<Directory /var/www/htdocs/proc/>
    Order Allow,Deny
    Deny from all
</Directory>

これに特定のIPアドレスからのアクセスだけ許可する方法は、「Deny from all」の次の行に「Allow from xxx.xxx.xxx.xxx」と単一のIPアドレスを指定すれば良い。

この設定は、さくらのレンタルサーバーで「.htaccess」に設定する場合、「<Directory …>」をコメントアウトする必要がある。

PCからのメールを着信拒否する携帯へメールを送る方法

携帯でPCからのメールが、携帯番号@のアドレスで受信できた当初、夜も昼も関係なく鬼のようにメールが着信して辟易したものだ。そのトラウマか、今でも携帯のメールは近親者の間でしか使わないようにしている。

が、情報ツールとしてスマホがメインの人(非常に多いと思われますが)は、スマホのメールしか利用しないし、スパムの多さにPCからのメールを着信拒否する人も出てくるのだろう、と。

こちらが送り手の場合は、「受信できない原因はそちらで、こちらは悪くない」という考えから、受信できないのは仕方のないことだと思っていた。が、そのような人々がターゲット(お客)になるとそうも言ってられないようだ。

そこでPCからスマホに着信拒否されずに送信する方法が、永江氏のブログ

PCから「PCからの着信を拒否している携帯」にメールを送る秘伝!!

に掲載されていた。要約すると

ソフトバンクのiPhoneで利用する「@i.softbank.jp」はPCのメーラーから利用できるので、それを利用すれば各社の携帯にもメールを送ることができる、ということだ。

コンシューマーマーケットをターゲットにする場合、スマホを利用してWebから注文を受けることが多いと思う。そこで自動返信機能ではメールアドレスがキャリアを含むか判断し、店側で用意した「@i.softbank.jp」でも同時にメールを送るようにする。ということで、メールが届かないという問題がクリアできるだろう。

ところで着信拒否された場合、サーバーからその旨返信情報が戻るのが普通のようだが、auでは4次元に消え去ってしまうとか。au のユーザーは何も知らされない、ということか。

Laravel3 テーブルのカラム追加

Code Happy のブログチュートリアルに取り掛かるにあたって、新たに users テーブルをマイグレーションで作成する解説となっているのだが、以前マイグレーションの説明で users テーブルを作成していたので、これを利用しようかと考えた。

チュートリアルで作成するブログ「WordPre…」ではなく「Wordpush」では、以前の users テーブルに新しく「nickname」カラムを追加する必要がある。で、次のSQLとなるよなプログラムはどう書けばいいのか調べた。

ALTER TABLE users ADD COLUMN nickname varchar(128) NOT NULL AFTER username;

が、どうやら綺麗に書く方法はないようだ。そこでフォーラムの「Add column in table and migrate afterwards?」を参考に以下のようにしてみた。

先ず新しく「$ php artisan migrate:make add_users」でマイグレーションのテンプレートを生成して、次のようにプログラムした。

<?php
class Add_Users {
    public function up()
    {
        DB::query('ALTER TABLE users ADD nickname VARCHAR(128) NOT NULL AFTER username');
    }

    public function down()
    {
        Schema::table('users', function($table) {
            $table->drop_column('nickname');
        });
    }
}

見ての通りあまり美しくないけど仕方ないか。

実行は「$ php artisan migrate」、戻すときは「$ php artisan migrate:rollback」。

なお、新しい Laravel 4 ではできそうな感じです。取り付いたら試してみようかと。多分次のように書くのではないかな?と。

Schema::add('users', function($table) {
    $table->string('nickname', 128)->after('username');
});

まだよくわかりませんが。

PHP 開発に重要となる暗黙の了解

PHPに関わらず、プログラミングにおけるソース入力には暗黙の了解がある。それらは先人達が築き上げたコモンセンスに近いもので、守るかどうかは個人に委ねられている。

まぁ、ソースの書き方は人それぞれで、プログラミング言語にもよって異なる。なのでこの話が話題になると、多分、どの言語が優れているのか、のような宗教戦争に似た葛藤が起こる事必至ではないだろうか?

で、この記事の目的は、実は単に slideshare を埋め込んでみるテストで、内容が yando さんの「新標準PSRに学ぶきれいなPHP」だったので、御託を述べただけでした。失礼いたしました。