DVDや動画、サーバー構築やプログラムを扱っています

漢(おとこ)が書く、DVDや動画、サーバー構築からプログラムのテクニックマガジン

DVDからサイト構築まで

カテゴリー

RSS

25番ポートブロック

自宅サーバーで、メールサーバーをたてている場合、加入しているプロバイダーによって25番ポートブロックによる制限がかかっている場合があります。Postfixの設定

今までADSL(8Mbpsプラン。実質3Mbps)で続けてきたのですが、ようやく(?)光ファイバーにしました。
先ほど速度を測ってみたら、34Mbpsでした。

25番ポートブロックとは

25番ポートブロックとは、私のようにサーバーをたてている場合、他の外部のメールサーバーの25番ポートにアクセス出来なくする制限です。
たとえば、自鯖でメールサーバーを立ち上げている場合、スパムメールを大量に発送したり、またサーバーが乗っ取られたりして、別のメールサーバーの25番へアクセスしようとするような接続を拒否する制限です。
これは何もサーバーを立ち上げている人だけでなく、ウィルスに感染した場合も同じです。
ウィルスやワームの中には、メールサーバーのような振る舞いをするようなものもあるため、知らないうちにスパムメールをばらまく可能性もあります。

自鯖のメールサーバーに25番ポートブロック

ADSLの時に加入していたプロバイダーも、25番ポートブロック制限はありました。
ただし、用意されたメールサーバーを経由させるだけであとはすんなり。
設定も簡単でした。

プロバイダーのメールサーバーを経由させるためのPostfixの設定

/etc/posffix/main.cf

# プロバイダーから指定されたメールサーバー(mail.example.ne.jp)を記述
relayhost = [mail.example.ne.jp]

認証が必要な場合

ところが、新しいプロバイダーは、この設定でもメールを送信出来ません。
色々調べてみると、指定されたメールサーバーを経由させる前にSMTP認証が必要のようです。

SMTP認証が必要な場合のmain.cf

SMPT認証が必要な制限を加えているプロバイダーは多いようです。
以下は、Postfixの設定です。

#biglobe 25版ポートブロック用relayhost = [mail.example.ne.jp]:25
smtp_sasl_type = cyrus
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous

「smtp_sasl_type」から「smtp_sasl_security_options」の4行が加わりました。
なお、mail.example.ne.jpは、プロバイダーの方で指定されるため適当に変更してください。

これだけではうまく動作しません。
認証用のIDとパスワードファイルが必要です。
/etc/postfix/sasl_passwd
がパスワードファイルを指定する設定です。
この「 sasl_passwd 」の内容は、以下のような感じになります。

[mail.example.ne.jp]:25 aaaaa@bbb.example.ne.jp:password
[mail.example.ne.jp]:25

は、先ほどのプロバイダーから指定されたメールサーバーのドメインと、接続用のポート番号です。
プロバイダーによっては25番ポートではなく、587番ポートを指定するように指示するところもあるようです。

aaaaa@bbb.example.ne.jp

ここは、たいていプロバイダーから与えられたメールアドレスが入ります。

password

ここは、プロバイダーから与えられたメールアドレス用のパスワードになります。

Vine Linuxだとメールを送信出来ない!?

ところが、このような設定にしてもうまく送信出来ません。
メールアドレスやパスワードを色々変えてみても、いっこうに自鯖から外部に向かってメールが送信出来ません。
ファイアーウォール等も調べてみましたが、どうやら指定されたメールサーバーの25番ポートにはアクセス出来ているものの、認証が拒否されてしまうようです。
ログを見てみると、以下のようなエラーが残っていました。

localhost postfix/smtp[26901]: 026CF53835F: to=, relay=none, delay=776, status=deferred
 (connect to mail.example.ne.jp[123.123.123.123]: server dropped connection without sending
 the initial SMTP greeting)

どうも認証がうまくいってないようです。

パケットを調べてみた

色々設定を変えてもうまくいかないので、Vine LinuxにEtherealをインストールしてパケットを調べてみることにしました。
なお、Vine LinuxにEtherealをインストールするのは簡単。

# apt-get install Ethereal 

すると、どうもEHLOコマンドを送信したあと、QUITコマンドで終了している様子。
■色は、自鯖のPostfixが送信している。

220 mail.example.ne.jp SMTP-Gateway Version 2.05 at Sun, 12 Aug 2007 22:17:23 +0900 (JST)
EHLO local
250-mail.example.ne.jp Hello local [222.222.222.222], pleased to meet you
250-AUTH CRAM-MD5 LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE 104857600
250-DSN
250-DELIVERBY
250 HELP
QUIT
221 2.0.0 mail.example.ne.jp closing connection

そもそも、Vine Linux4.0のPostfixがAUTH認証に対応していないのでは??

AUTH認証対応にさせる

結局のところ、デフォルトのVine Linux4.0のPostfixではこの認証に対応していないようなので、以下の方法で対応してあげる必要があります。

# rpm -qa|grep sasl
cyrus-sasl-2.1.18-0vl6
↑ cyrus-sasl-plain , cyrus-sasl-devel , cyrus-sasl-md5 が足りない
[root@localhost postfix]# apt-get install cyrus-sasl-plain 
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了    
以下のパッケージが新たにインストールされます:
  cyrus-sasl-plain
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 0 個
22.1kB のアーカイブを取得する必要があります。
展開後に 41.1kB のディスク容量が追加消費されます。
取得:1 http://updates.vinelinux.org 4.1/i386/main cyrus-sasl-plain 2.1.18-0vl6 [22.1kB]
22.1kB を 0s 秒で取得しました (98.6kB/s)
変更を適用しています...
準備中...                   #################################### [100%]
   1:cyrus-sasl-plain       #################################### [100%]
完了
[root@localhost postfix]# apt-get install cyrus-sasl-devel 
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了    
以下のパッケージが新たにインストールされます:
  cyrus-sasl-devel
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 0 個
550kB のアーカイブを取得する必要があります。
展開後に 1572kB のディスク容量が追加消費されます。
取得:1 http://updates.vinelinux.org 4.1/i386/main cyrus-sasl-devel 2.1.18-0vl6 [550kB]
550kB を 0s 秒で取得しました (1421kB/s)
変更を適用しています...
準備中...                   #################################### [100%]
   1:cyrus-sasl-devel       #################################### [100%]
完了
[root@localhost postfix]# apt-get install cyrus-sasl-md5 
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了    
以下のパッケージが新たにインストールされます:
  cyrus-sasl-md5
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 0 個
49.9kB のアーカイブを取得する必要があります。
展開後に 93.1kB のディスク容量が追加消費されます。
取得:1 http://updates.vinelinux.org 4.1/i386/main cyrus-sasl-md5 2.1.18-0vl6 [49.9kB]
49.9kB を 0s 秒で取得しました (119kB/s)
変更を適用しています...
準備中...                   #################################### [100%]
   1:cyrus-sasl-md5         #################################### [100%]
完了
[root@localhost postfix]# 

つまり「cyrus-sasl-plain」「cyrus-sasl-devel」「 cyrus-sasl-md5」がインストールされてなかったためのようです。
うまくインストール出来たら、saslauthdを起動させます。

# saslauthd start 
saslauthdを起動中:                                         [  OK  ]

次回、Linuxを再起動させたときに自動的に起動させるようにします。

# ランレベル3と5にシンボリックリンクを作成
# ln -s /etc/rc.d/init.d/saslauthd /etc/rc3.d/S99saslauthd
# ln -s /etc/rc.d/init.d/saslauthd /etc/rc5.d/S99saslauthd

あとは、メールキューに貯まったメールを送信してうまく配達出来ていればOKです。

参考サイト

MIME::Base64
Postfix+saslでOP25B対策

2007/08/13 01:03 【 25番ポートブロック 】 | コメント |

トップへ

ナンバーポータビリティで勝ち組

ナンバーポータビリティがはじまってすでに半年以上が過ぎました。さて、キャリアを移籍して、ほんとに得だったんでしょうか?携帯の料金の比較

ナンバーポータビリティがはじまったのが、2006年の11月。
去年の今頃は、携帯の料金が変わる!なんてそろそろ騒ぎはじめていた頃だったと思います。
私は元々PHSを使用していて、次にドコモの1.5GHzの携帯、そしてJ-Phoneに乗り換えてきました。
乗り換えた理由は、よりメジャーな携帯へ・・・という感じでしたが、料金の安さもその一つでした。
ドコモの1.5GHzの携帯は、800MHzのメジャーなプランと比べて通話可能エリアが多少狭い割に、料金が安いプランでした。
当時は、メールもiモードもなかったので充分だったのですが、そろそろ携帯の液晶がカラー化する時期で、この1.5GHzの端末は豊富なメジャーな800MHzにくらべ2~3種類しかなかったと思います。
で、カラーが欲しくなり、かといってドコモのメジャープランにすると高そうだ。じゃぁ、比べてみよう。って事でカタログを取り寄せて比較検討したところ、どうもJ-Phoneが安いと。

当時のJ-Phoneは、ドコモ・IDO(現AU)がデジタル化を進めていたのに対し、まだアナログでした。
デジタル=高音質
と思いがちですが、実際は逆でデジタル化することによって音声を圧縮するので聞き取りにくくなります。
また、デジタル化ではアナログの3回線分ぐらいを1回線で使うらしく、
デジタル=低音質でかつ繋がりにくい
という状況でした。
なので、当時のJ-Phoneは、「J-Phoneって、音もイイしとぎれない」というのがよく言われていました。

ナンバーポータビリティはお得か

さて、ナンバーポータビリティがはじまって半年が過ぎ、結局のところこの制度を利用してキャリアを変えた人は、成功したのか。を見てみたいと思います。
まず、ニュースで盛んに言われていましたが、「AUの一人勝ち」について。

なぜAUに移動したんでしょうかね。
私がAUに移籍するなら理由は二つ。
・音楽携帯が充実している
・繋がりやすいしとぎれにくい
です。
ただ、私はそれほど頻繁に携帯で音楽を聴くというわけではない(どういうわけか、イヤフォンをするとすぐに耳が痛くなる)ので、仮にiPod並の携帯が登場しても移籍理由にはならないですね。
ただ、ウォークマン代わりにしたい人にとっては充分移籍理由になるかもしれません。
もちろん、ドコモでもソフトバンクでも音楽は充分聴けますが。

次に繋がりやすい・とぎれにくいですが、これはAUは次世代(3G)方式で唯一800MHzを使用しているキャリアで、ドコモもソフトバンクも3Gには、2000MHzを使用しているため、どうあがいてもAUの方が繋がりやすい仕切れにくいわけです。
音波というのは、周波数が低い程建物の影や隙間まで届きます。
たとえば、光と音。
光は非常に高周波数なので、紙一枚隔てられると、向こう側が見えなくなります。
ところが音は光に比べて低周波なので、紙で隔てられても充分聞こえます。
となりの部屋の様子は見ることが出来なくても、となりから漏れてくる音は聞こえるのも、音が光に比べて低周波な為です。

同じ理由で、携帯のアンテナから発せられる電波も、800MHzという低周波なAUの方が断然有利です。
もちろん近くにアンテナが立っていないと意味がありませんが・・・。
なので、仕事として使う分に関しては、AUを使う選択はあながち間違っていないかもしれません。
ただし、私の場合ソフトバンクの2Gから、3Gに変えたのですが、2Gの時は私の部屋だと圏外になる確率が非常に高く、また通話していてもとぎれることが多かったのですが、3Gにしてからはほとんど切れなくなったし、私の部屋でもばっちり受信出来ます。
なので、私自身は特に今住んでいる地域で使う分には、別のキャリアに移籍する理由にはなりません。

料金について

今回の移籍で、最も多く理由を挙げたのが「料金」だったようです。

infoseekニュース
調査では、乗り換えで重視したのは「料金」との回答が55.4%を占めた。しかし、変更後の料金について「予想より安くなった」と答えたのは17.7%にとどまり、「予想通り」が38.8%、「予想より高くなった」が29.8%だった。

たぶん、AUに移籍した人達も、ほとんどが
ドコモ = 高い
というイメージを抱いていて、また、
ソフトバンク = 繋がりにくい
というどちらも間違った情報を信じていて、結果AUにドッと流れ込んだんじゃないかな。と。

私のように緻密に計算して、納得してから実行する人間であればすぐにわかることだと思いますが、比べてみると(使い方にもよりますが)ドコモの方が安いです。
また、AUに入り直すと、今までのポイントも加入期間もすべて0から始まるので、基本料自体が跳ね上がります。
ソフトバンクは、他のキャリアで加入していた年数をそのまま持ち越すことができるというとんでもないお得なシステムがあって、この場合、料金を安くしたいという理由で「ドコモ → AU」は負け組、わかりやすく言えば損した組になると思います。
「ドコモ → ソフトバンク」は、ホワイトプランにするか標準プランにするかで違ってきますが、標準プランのまま(ソフトバンクで言うブループラン)にするのであれば、「ドコモ → ソフトバンク」は損も得もしない組になるでしょう。
ただし、ソフトバンクの方が若干安いのでちょっとだけ得した組になるかもしれません。
※実際には、携帯を買い換えなきゃいけないので、どちらにしろ料金が安くなりそう・・・という理由でキャリアを変えた人は、その時点で損をしていることになります。

infoseekニュース
会社別ではソフトバンクモバイルに乗り換えた利用者の74.6%が「安くなった」と答えたのに対し、NTTドコモは34.9%、KDDIのauは40.6%。
金額ベースでも、ソフトバンクが月額平均1539円減少したのに対し、ドコモが92円、auが148円の減少にとどまった。

上の記事を見てもわかる通り、ソフトバンクのホワイトプラン、さらにダブルホワイトは使えば使う人にとってはほぼ無敵のプランです。
私のまわりには何人かソフトバンクの友達がいるんですけれど、月9時間通話したことがありますが、請求は4000円程。
話し放題はまさに最強です。
ただし、話し放題ならPHS、ウィルコムがあるじゃないか。と。
ところが、ウィルコムは話し放題の基本料金が2800円です。
最近ソフトバンクに対抗して、夜中の1時からよるの9時までだけ話し放題というプランが1900円で登場しましたが、ソフトバンクのホワイトプランは月々980円です。
さらに、ダブルホワイトにすると1960円になりますが、24時間話し放題で、他社携帯にかけた場合も1分20円という通話料金になり、基本料金も安いのに通話料も安いという恐ろしいプランに変貌します。

いいとこばかりで悪いところはないのか。と勘ぐりたくなりますが、強いて言うのであれば、地方によってはまだアンテナが整備されていない地域もあるようで、電波次第ってとこでしょうか。
あとは、980円という料金ですが、パケ放題やらスーパーボーナスやらで実際には980円のみで済むと言うことはないと思います。
ただ、それでも月々の電話代は一気に下がるでしょう。
私は、ソフトバンクになる前のボーダフォン時代は、1ヶ月2万円のプランに入っていました。
話しても話さなくても、毎月2万かかっていたわけですが、今では4000円程度ですね。
通話料自体はもっと安いです。
ただ、3G携帯に変えたので、携帯でインターネットを見ることが多くなってパケット代が多くなりましたね。

ファイルのバックアップ

サーバーを立ち上げていると、誰しもが頭を悩ますもの。それがバックアップじゃないかと思います。RAIDも普及してきましたが

先日、とうとう取り返しのつかないミスをしてしまいました・・・。
そう、誤った操作のせいで3~4日かけて作成したPHPの掲示板を含む、とあるサイトのファイルを削除してしまったのです。
故意に削除したのではなく、バックアップをとろうとエクスプローラーで別のHDDへファイルをコピーしていたら、「すでに○○というフォルダは存在します。」とか「○○というフォルダを削除できません。フォルダの中身が空でありません」というようなおかしな?エラーが出るのです。
別にファイルやフォルダを削除したつもりはないし、むしろバックアップをとっているので、出てはいけないエラーでもあります。

もう少しこのときの状況を説明すると、このときはサーバーマシン上から操作したのではなく、別のWindowsマシン上から操作しました。
私の場合、サーバーマシン上で、SAMBAを立ち上げているので、エクスプローラーを使ってあたかもWindowsマシン上のファイルとしてサーバー上のファイルを操作することが出来ます。
このときも、Windowsのフォルダをバックアップするかのように、Webで公開しているフォルダ全部を、別のHDDへマウスを使ってコピーしました。
大量にファイルがあるため、時間がかかるだろうと思い、そのまま放置。
しばらくすると、Windowsマシンからエラー音が。
何だろうと思ってのぞいてみると、上のようなエラーが表示されていました。

おかしな事もあるものだな。と、気にせず、もう一度実行してみました。
今度は別のフォルダをコピーしようとしたときに、同じようにエラーが表示されます。
このままではにっちもさっちもいかないので、結局はサーバーにSSHで接続し、「cpコマンド」を使用してコピーしました。

最初から「cpコマンド」を使っていればよかったのですが、普段コマンドを駆使しているもののあまり使わないようなコマンドは、どうも使うのにおっくうになってしまう。

ようやくコピーが終わり、先日完成したサイトをブラウザで表示させてみると、404エラーを返す。
ちょうどWindowsを再インストールしたばかりだったので、このときはWindowsの問題かと思ってたのですが・・・。
私の顔が青ざめるのにもそれほど時間がかかりませんでした。

そう、サイト内のファイルが存在しないのです。
で、はっと気がつきました。そういえば、「○○のフォルダ」は、確かこのサイトの公開フォルダだった・・・。

バックアップの必要性

バックアップの必要性は、誰しもがわかっちゃいるものの、ほとんどの人が実行していないというのが本音じゃないでしょうか。
そういう意味では、Windowsの「システムの復元」は、非常に画期的なシステムだなぁ。と。
ま、システムの復元では削除してしまったファイルは元に戻せませんが、たいていの深刻なエラーからは復帰できます。

私も今回実感しました。
しかも私の場合は、バックアップを実行したらこんな結果になってしまったわけで・・・。
しばらくは立ち直れませんでした。
ただし、
1.まだ公開してほとんど日にちがたっていないサイトだったので、ページ自体が少なかったこと。
2.ページのキャッシュがgoogleにキャッシュされていたこと。(最新ページは保存されてませんでしたが・・)
事が救いといえば救いだったかもしれません。
が、3~4日かけて作成した掲示板は、全くバックアップをとっておかなかったので、ものの見事に幻と化しましたが。

自宅サーバーを運営してしまうと、レンタルサーバーのようにFTPを使ってアップロードしなければならないようなシステムには戻れません。
まるで自分のWindowsに保存する感覚で、サーバーに保存できます。
そもそもアップロードという概念自体がありません。
今回は、このことが仇となりました。
アップロードするような手続きを経ていれば、ローカル側とサーバー側で同じファイルが存在します。

まぁ、今更何を言っても無駄ですね。
いちおうはまだ頭の中に掲示板プログラムの仕様がかすかに残っているので、それを頼りにまた作り直すしかなさそうです。

バックアップ

さて、肝心のバックアップですが、最近はHDDの大容量化とマザーボードのRAID対応化により、RAIDシステムがかなり浸透した気配があります。
が、まだまだマニアックな人たちの一部で組まれているにすぎないでしょう。
実際に私の周りで、RAIDを組んでいる人なんていませんし。

なぜ普及しないのかというと、やはり値段の問題もあると思います。
大容量化したとはいえ、まだまだHDDは5,000~15,000円ほどします。
また、小容量のものを二つ買うよりは、大容量のHDDを1つ買った方がオトクのような気もしますし。
さらに、先ほどのバックアップの例ではありませんが、誰しもバックアップの必要性はわかってはいるものの、まさか自分が・・・と思いこんでしまっているためでしょう。

そして次の理由として、RAIDシステムを組むには技術的にまだ難しいという面があるんじゃないでしょうか。
私もRAIDを組んだことがないので、実際どうやってやるのか。また、Vine Linuxでもできるのか。など、わからない面が多くあります。

RAIDのメリット

RAIDのメリットといえば、なんと言っても信頼性の高さでしょうか。
他のバックアップシステムは、
1.バックアップをとる作業が必要
2.復元させる作業が必要
という2段階のステップが必ずあります。
ところがRAIDの場合は、リアルタイムに2つ以上のHDDに記録するため、こうした作業を全く意識する必要はありません。
そういった意味での信頼性の高さは、このRAIDに勝るものはありません。

ところが、実際にどちらかのHDDがいかれてしまった場合、本当にきちんとそのまま運営し続けてくれるかどうかと言うのは、神のみぞ知るといったところかもしれません。

そういう面からすると、RAIDで組んでいたとしても、バックアップという作業は必要なんじゃないかな。と。

cpコマンド

そこで私がおすすめするLinuxにおける、バックアップがこの「cpコマンド」によるバックアップです。
まず、RAIDでもそうですが、なるべくトラブルがあったときに損害が大きくならないような構成は必要だと思います。
私の場合は、公開しているWebページが非常に膨大なのと、PHPを使って動的にデータを更新している事が非常に多いので、システムがインストールされているHDDとWeb公開ファイルが格納されているHDDを完全に切り分けてしまっています。

おそらく、24時間立ち上げているとはいえ、システムが詰まっているHDDはそれほどファイルを読み込んだりしないであろうため、寿命も長いでしょう。
逆に、頻繁にファイルにアクセスしたり、ファイルを書き換えたりしているHDDは、寿命が短いだろうと。

また、プログラムを書けるレベルの方ならわかると思うのですが、ファイルにアクセスしたりする処理というのは非常に時間がかかります。
なので、なるべくならシステムとWebコンテンツは別々のHDDに納めておいた方がいいんじゃないだろうかと。

で、肝心な「cpコマンド」ですが・・・。
この「cpコマンド」色々なオプションをつけることが出来、「-u」オプションをつけると、コピー先がコピーもとと同じタイムスタンプかコピー先の方が新しい場合、そのファイルに関してはコピーが行われません。
ただ単にコピーが行われないだけではなく、このオプションをつけることによって1度バックアップしてしまえば、あとは高速に終わります。

今回、10万ページほどのファイルが詰まったファイルで実験してみました。
以下は、「 /home/httpd/html 」以下のファイルやディレクトリを「 /home/backup 」以下にファイル属性(ファイルの更新日やパーミッション、所有者情報)はそのままにコピーします。
実行すると「 /home/backup/html 」というディレクトリが作成作成されその下にファイルがコピーされます。

# cp -au /home/httpd/html /home/backup
#

ファイル数にもよりますが、10万ページ程度あるとさすがに初回のバックアップに5~10分ほどかかります。
で、次に、全く同じコマンド

# cp -au /home/httpd/html /home/backup

を実行します。
もし、全くファイルの更新がなければ、コンマウン秒で処理が終わるはずです。
つまり、初回のバックアップは非常に時間がかかりますが、更新されていないファイルが少なければ少ないほど、2回目以降はあっという間に処理が終わってしまうのです。

これなら1日に1回、いや、1時間に1回でも十分サーバー運営に負担のないバックアップが出来ると思います。
cronあたりで登録しておけば、RAIDに匹敵するシステムが簡単に構築できるかもしれません。

上書きするか確認してこないようにする

ところが実際にこの「cpコマンド」を実行してみると、更新ファイルがあるといちいち「○○というファイルを上書きしてもよろしいですか。」というようなことを訪ねてくると思います。
「cpコマンド」の「-f」オプションは、強制的に上書きさせるコマンドですが、このオプションをつけても毎回尋ねてきます。

Linuxは、コマンドを独自なものに変更することが出来ます。
詳しくは「オリジナルコマンドの作成 .bashrc」を参考にしてもらうとして、じつはこの「cpコマンド」も変更が加えられています。
この「.bashrc」ファイルは、各ユーザーのディレクトリに納められています。
たとえば、「root」であれば「 /root/.bashrc 」になります。

2007/03/15 22:51 【 ファイルのバックアップ 】 | コメント |

トップへ

ファイルサイズを取得する際の注意 FileSize関数

ファイルサイズを取得する際に使用するFileSize関数の注意点を紹介します。

ファイルサイズを取得する際に使用するFileSize関数
CGI/Perlを使ってきた人であれば、あまり使用する機会がないかもしれませんが、実は、ファイルを読み込むという作業は、どんな言語を使おうと非常に時間がかかります
どういう事かというと、以下のスクリプトを見てください。

$file = "./data.dat";
if (FALSE == ($fp = @FOpen($file , "r+")){
  print "ファイルのオープンに失敗しました";
  exit(1);
}
FLock($fp);
$array = array();
// ファイル内のデータを1行1行読み込み、配列に格納
for($i = 0; !FEof($fp); $i++){
  $array[$i] = FGets($fp , 8192);
}
FClose($fp);

どこもおかしいとこはないかもしれませんが、では、次の例を見てみてください。

$file = "./data.dat";
if (FALSE == ($fp = @FOpen($file , "r+")){
  print "ファイルのオープンに失敗しました";
  exit(1);
}
FLock($fp);
// ファイル内のデータを1回で全て読み込み・・・
$size = FileSize($file);
$all   = Fread($fp);
FClose($fp);
// 改行で分割する
$array = array();
$array = split("\r?\n" , $all);

取得できるデータはどちらも同じですが、後者の方が圧倒的に速く終わると思います。
というのも、以下のように

$tmp = FGets($fp , 1024);

ファイルからデータを読み込むという作業は非常に時間がかかります。
それを、ForやWhileを使ってファイルの最後まで繰り返し読み込むと、さらに時間がかかります。
つまり、ファイルからデータを読み込むという作業を1回で済ませば、最も速いわけです。
1万行程度のデータファイルからデータを読み込む動作を、この2つの方法で100回ぐらいループさせると、その差が歴然と現れると思います。

FRead関数

FGets関数は、指定されたサイズか、改行が見つかるとそこまでしか読み込んでくれませんが、FRead関数は指定サイズ内に改行があろうと、指定されたサイズまでデータを読み込んでくれます。
なので、FileSize関数でファイルサイズを計測し、Fread関数でファイルの全データを読み込んでしまおうというわけです。
私の場合は、最近はこのパターンで読み込むことが多いです。

ファイルのステイタスがキャッシュされる?

ところで、FileSize関数等で取得するファイルサイズというのは、実は、高速化のためにキャッシュされます。
以下の例を見てください。

$file = "./data.dat";
if (FALSE == ($fp = @FOpen($file , "r+")){
  print "ファイルのオープンに失敗しました";
  exit(1);
}
FLock($fp);
// ファイル内のデータを1回で全て読み込み・・・
$size = FileSize($file);
// ここで一回ファイルサイズを出力
print $size . "\n";
$all   = Fread($fp);
// 新しいデータを加える
$new = "あああああああああああああああ\n";
$all   = $new . $all; 
// ファイルポインタを巻き戻す
ReWind($fp);
// ファイルサイズを0にする
FTruncate($fp , 0);
FPuts($fp , $all);
FClose($fp);
// 保存したあとにもファイルサイズを出力してみる
print FileSize($file);

環境にもよりますが、新しいデータを加えて保存したので、違うサイズが出力されるはずです・・・が。
実は、先ほど言ったとおり、ファイルのステイタス情報というのはキャッシュされるため、なんと同じ値が出力されてしまいます

ClearStatCach関数

この厄介な現象(?)は、ClearStatCash関数を使えば一掃されます。
先ほどの例は、以下のように修正すればきちんと出力されるでしょう。

$file = "./data.dat";
if (FALSE == ($fp = @FOpen($file , "r+")){
  print "ファイルのオープンに失敗しました";
  exit(1);
}
FLock($fp);
// ファイル内のデータを1回で全て読み込み・・・
$size = FileSize($file);
// ここで一回ファイルサイズを出力
print $size . "\n";
$all   = Fread($fp);
// 新しいデータを加える
$new = "あああああああああああああああ\n";
$all   = $new . $all; 
// ファイルポインタを巻き戻す
ReWind($fp);
// ファイルサイズを0にする
FTruncate($fp , 0);
FPuts($fp , $all);
FClose($fp);
// キャッシュをクリア
ClearStatCash();
// これで正常にファイルサイズを出力できる
print FileSize($file);

Flashや外部テキストをキャッシュさせない

Flashの開発で最も困るのが、ブラウザがファイルをキャッシュしてしまうということ。今回はこれを防ぐ方法を紹介します。

フラッシュの開発で、最もやっかいな問題は、ブラウザがFlashのファイル「SWF」をキャッシュしてしまうことです。
これはブラウザの仕様らしくて、Adobeのページでもうまい解決方法が載っていません。

これを解決するには、毎回Flashを更新するたびに、ブラウザの一時ファイルの削除(「ツール」→「インターネット オプション」→「閲覧の履歴」→「削除」→「インターネット一時ファイルの削除」をクリック)をしなくてはなりません。
ところが、毎回毎回こんなことをしていたらめんどくさくてしょうがない。
そこで、HTMLではなくてPHPでページを作成してやります。たとえば、Flashのファイルが「aaa.swf」だとしたら、

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8 />
<title>quest1</title>
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<META HTTP-EQUIV="Expires" CONTENT="Mon, 04 Dec 1999 21:29:02 GMT">
</head>
<body bgcolor="#ffffff">
<!--ムービーで使用されている URL-->
<!--ムービーで使用されているテキスト-->
<object classid="clsid:aaaaaa-aaaa-11cf-aaaaaa" codebase=
"http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="468" height="300" id="quest1" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="aaa.swf?<?=date("YmdHhs");?>" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="quest1.swf" quality="high" bgcolor="#ffffff" width="468" height="300" name="quest1" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</body>
</html>


の部分で「年月日時分秒」を繋げた値になります。
つまり、1秒ごとに全く別の値になるため、ブラウザも毎回読み込みに行くようになります。

外部ファイル・CGI/PHPから変数を読み込む場合

LoadVarsを使って外部からテキストデータを取り込むで、外部テキストファイルやCGI/PHPから変数を読み込むときの注意を書きましたが、実は、このデータもキャッシュしてしまうようです。
なので、ランダムなデータをCGIやPHPから出力するような仕様にしていても、毎回同じ値が出力されているような挙動をしてしまうと思います。
これを防ぐには、「loadメソッド」ではなく「sendAndLoadメソッド」を使用してPOSTでアクセスします。

myData = new LoadVars();
myData.onLoad = function() {
  _root.q.str = myData.re_data; //_rootに配置してある「q」の中のダイナミックテキスト「str」に表示
};
myData.sendAndLoad("aaa.php", myData, "POST");

これで毎回外部PHPファイル「aaa.php」にアクセスしてくれます。

LoadVarsを使って外部からテキストデータを取り込む

LoadVarsオブジェを使って外部CGI/PHPやテキストファイルからデータを取得するときの注意点。

どこのサイトや書籍、ヘルプにも書かれていないLoadVarsオブジェについてメモしておきます。

外部からテキストデータを読み込めない?

まず、最初に記述したのは、_rootのフレームへ以下のActionScriptを記述しました。

myData = new LoadVars(); // LoadVarsオブジェの作成
myData.load("./bbb.txt");
/* 以下を実行させたい */
myData.onLoad = function(){
  trace("myData.vars");
  this.q.str = myData.vars; // _rootに配置したインスタンス名「q」にある
                                 //  ダイナミックテキストの変数「str」に読み込んだデータを表示させたい
};
/* 読み込みエラーだとこちらが実行される?? */
myData.onData = function(){
  trace("データの読み込みに失敗");
};

また外部テキストファイル「bbb.txt」の中身は「UTF-8」の文字コードで、

vars=aaaaaaaaaaaaaaa

だとします。
これだと「myData.onLoad」が実行されません。
いくつか注意点が。

  • 「myData.onData」を定義してしまうと、「myData.onLoad」より優先して実行されてしまい、そのあと「myData.onLoad」が実行されない。
  • 「myData.load("./bbb.txt");」は、「myData.onLoad」の定義したあとに記述。
  • functionの中ではパスが変わる。この場合「this」ではなくて「_root」で記述しないといけない。

修正後

きちんと動作させるには、以下のように修正する必要があります。

myData = new LoadVars(); // LoadVarsオブジェの作成
/* 以下を実行させたい */
myData.onLoad = function(){
  trace("myData.vars");
  _root.q.str = myData.vars; // _rootに配置したインスタンス名「q」にある
                                  //  ダイナミックテキストの変数「str」に読み込んだデータを表示させたい
};
myData.load("./bbb.txt"); // onLoadを定義したあとに記述した方が確実

半無限にメールアドレスをもつには

自宅サーバーにメールサーバーを立ち上げていれば、複数のメールアドレスを持つことが出来ます。Postfix編

時としてメールアドレスを複数持ちたいことはよくあることです。
高額なレンタルサーバーを利用している場合は、ほぼ無限にメールアドレスが所有できるようですが、自宅サーバーを利用している場合でも、同じように半無限的にメールアドレスを持つことが出来ます。
ただし、あくまで「@」より前の部分を無限に作ることが出来るだけであって、ドメイン(@より後の文字列)は変更できないので、悪用に使う目的で複数持つことは避けましょう。

さて、いくらメールアドレスを複数持てるとはいっても、いちいちそのメールアドレスごとに受信するのは効率的によくありません。
ここでは、新しく作ったメールアドレスを今まで使っているメールアドレスに転送する設定も含めた方法でのメールアドレスの作成方法です。

Postfixでの設定

今回紹介する方法は、Vine LinuxでデフォルトでインストールされるPostfixについてです。
条件としては、「aaa@example-a.co.jp」というメールアドレス宛に来たメールを、「my@bbbbb.co.jp」というメールアドレスに転送する・・・というものとします。
aaa@example-a.co.jp」が新しく作るメールアドレスですね。

まずは、「/etc/postfix/aliases」を開きます。
で、最後の行以降でかまわないので、

aaa: my@bbbbb.co.jp

と付け加えて保存し、Postfixを再起動します。
保存するとき、一応文字コードを「EUC」にし、改行を「LF」で保存してください。

バーチャルドメインを使用している場合

デフォルトのPostfixの設定では、バーチャルドメインを使用している場合、他のドメインでは受信できないと思います。
この場合は、Webminで設定します。

Webminの「サーバ」→「Postfix」→「一般オプション」をクリックWebminの「サーバ」を開き「Postfixの設定」をクリック。
左上にある「一般オプション」をクリックします。

「メールを受信するドメイン」に受信したいドメインを入力メールを受信するドメイン」にバーチャルドメインで使用しているドメインを「,(コンマ)」区切りで入力していきます。
したの「保存して適用」をクリックすれば完了です。

あとは、25番ポートを開放させてあるか確認すれば、実際にメールを出してみて受信できるか確認してみてください。

今回のYSTの変動について

今回のYSTの変動について考えてみました。

今回はここ最近の仲で一番私のサイトに影響を与えたYahooショックでしたね。
ずっと去年の10月ぐらいからYahooショックがあるごとに増えてきたんですけれど、いよいよというか、ついにというか、下落しましたね。
去年は、7月に1月から半年ほどにわたって増え続けたアクセス数が壊滅状態。
10月頃に復活したものの、あーやっぱりYSTの場合はSEOって小手先だけのSEOって関係ないんだなぁ。っていうのがようやく気がつかされたというか。
そう、YSTの場合は、何もやらなくても数ヶ月単位ごとに上がったり下がったりを繰り返します。
特に、アフィリエイトサイトみたいなサイトはもろに影響を受けるでしょうね。

今回フォーラムを覗くと、結構アクセス数が激増した!なんて喜んでいる人がいますが、数ヶ月後真っ逆さまに落ちるのにねぇ。

Yahooショックに影響がないサイト

ところで、こうしたYSTのアルゴリズムの変更にもビクともしないようなサイトがあるのはどうしてか。
とあるキーワードで検索すると、多少の順位の変動はあるものの常に上位をキープしているサイトってありません?
なんででしょうねぇ~。(笑
私もだいたい、この理由がわかってきました。
と、同時に、やっぱサイトを充実させるって必要だなぁ。とつくづく思う次第で。
逆に、アフィリエイトサイトと一目でわかるようなサイトは、いつまでたってもこのYSTの気まぐれに悩まされるんだろうなぁ。と。

私なんかも、ようやく真の意味でのサイト充実というのがわかりはじめてきた次第で。
たとえば、私のこのサイトとか、素材配布サイトなんていうのは、無料でツールを公開していたり、素材を配布しているんで、割とリンクを張ってくれている人が多いんですけれど、それでもまだまだって感じみたいですね。
もっと充実したサイトを作れば、もっともっと向こうからリンクを張ってくれるようになるだろうし。

次回あたり、この辺のサイトを充実させることと、不動の地位になれることの関係を考察してみようと思います。

今回落ちたサイト

今回は、アフィリエイトモロ出しのコンテンツが激減していますね。
1つのサイトだけじゃなくて、複数のサイトほぼ壊滅です。
私の場合、アフィリエイトサイトは全体の1/3。
アフィリエイトサイトではないサイトは、影響を受けなかったか1つだけ激増しています。
いずれにしろ、元々Yahooで上位にいたサイトが何らかの影響を受けているようです。

ただ、1つだけアフィリエイトサイトでもアクセス数が倍になったサイトもありました。
あと、SEOフォーラムや掲示板で、アフィリエイトサイトのオーナー達が歓喜しているところを見ると、今回のYSTの変動は、アフィリエイトサイトを振り落とす・・・というアルゴリズムでもなかったんだと思います。

2007/02/11 21:49 【 今回のYSTの変動について 】 | コメント |

トップへ

YSTのアルゴリズム変更か?2007年02月版

あまり騒ぎになっていないようですが、いつものYSTの変動があったようです。Yahooからの訪問者数が激減しています。

先日の2月8日あたりから、YSTのアルゴリズムの変更があったようです。
あまり騒がれていませんが、一部のサイトのみ動きが出ているのかもしれません。
私のサイトのうち、Yahooからの訪問者が1サイトで5000人規模のサイトがあるんですけれど、そのサイトが一気にアクセス数が激減。
特にサイトをいじったわけでもなく、どのコンテンツもアクセス数が激減していることから、おそらくYSTでアルゴリズムの変更があったんじゃないかなぁと。

確定申告のことで事業をしている友人と話していたんですけれど、やっぱりアクセス数を検索サイトに頼るようなサイトは、一時的な物なんだなぁ。と痛感。
また、オリジナルジュエリーを販売しているサイトのサイト作成の一部を手伝っているんですけれど、どう見ても検索サイトには強くない作り。
でも、固定客がついているので、検索サイトからの訪問がなくても十分売り上げがあるんだとか。
アフィリエイトではあくまで紹介にすぎないので、やっぱり生業にはできないよなぁ。
作ったら放置でも十分。っていう気楽さがあるから、まぁ、そういう部分ではお互いメリットデメリットがあるんでしょうけれど。

さて、そろそろ確定申告の時期が迫ってきました。
アフィリエイトみたいな、ほとんど帳簿をつけるのがそれほど難しくない取引しかないような場合でも、会計ソフトは必須ですね。
友達で、商品を販売している人がいるんですけれど、もう私なんかより全然帳簿については詳しいんですけれど、やっぱり会計ソフトがないと全くわからないそうです。
私も、お試し版から卒業して「やよいの青色申告」を購入しました。
お試し版をアンインストールしてからインストールする手順になるんですけれど、お試し版で作成したデータはそのまま残るので、1からやり直し・・・なんてことはありません。
ただ、データのバックアップはしておいた方がいいですね。

ゴールドプランからホワイトプランへ変更

私のようにほとんど携帯を使わないような状態であれば、無料通話がない方がずっとお得。

私のように、普段メッセンジャーのボイス機能で話しているような人間は、はっきりいってあんまり携帯を使わない。
そんな環境の場合は、無料通話がどれくらいだとか、1分あたりいくらだとかっていうよりも、基本料金自体が安いプランが最もお得。
どこの携帯会社でも、何年か同じ携帯会社を使っていて、家族割りなどの割引サービスに加入していれば、ほとんど基本料金は0円に近くなるはずです。
が、全く電話を使わないような人にとっては、無料通話分の料金が負担になるわけで・・・。
となると、無料通話がどれくらいついているかっていうのではなくて、全部ひっくるめて月々いくら?が、重要なわけです。

ホワイトプランの登場

そこへソフトバンクのホワイトプランというとんでもないプランが登場しまして。
とはいっても、周りのソフトバンクの友達に聞いてみたんだけれど、このホワイトプランを理解していない人が多すぎる。w
みんな一様に「ゴールドプランの方がお得でしょ?」
違う違う・・・。

ホワイトプランとゴールドプランの違い

ホワイトプランとゴールドプランの違いは、まず基本料の差。
ゴールドプランが1ヶ月9,600円に対して、ホワイトプランは、980円。
約10分の1。
これだけの料金差なのに「ゴールドプランの方がお得なんじゃないの?」なんていう意見が出たのは、2007年1月15日までにゴールドプランにすれば、70%オフの2880円だったため。
70%オフでもまだ3倍ほどの料金。
2880円の基本料というと、今まででも最安値に近い金額でしたが、ホワイトプランが登場してからは高く見えますね~。
980円でもその分「使えば」高くなる・・・っていうんじゃ、どうしても及び腰になってしまいますが、このホワイトプラン、ゴールドプランと同じで1時から21時まではソフトバンク携帯にかければ、通話料は無料。
しかもソフトバンク宛へのメールは24時間無料と、単に安いだけじゃない。
また他社携帯や21~1時までのソフトバンクへかけた場合は、1分42円となっていますが、いっけん高そうに見えるこの通話料。
ドコモやAUで1分40円を実現させるには、ウン千円支払わないことを考えると、基本料金980円を考えれば安いぐらい。
私は別にソフトバンクに肩を持つとかはないんですけれど、やっぱり安いかどうかで選んでしまいますね。

ホワイトプランに変更

さて、私がゴールドプランにしたのが2006年の12月の頭。
予想外割引適用期間に申し込んだため、2ヶ月間パケット代が無料というサービスがついてきました。
が、2ヶ月経ってそうしたサービス期間が終了したので、ホワイトプランに変更しました。
変更するには、ソフトバンクのサイトへ行き、My Softbankにログインしなきゃならないわけなんですけれど、ちょっとわかりにくい。
そこで今回このページで、ホワイトプランへ変更するための手順を画像付きで公開します。

My Softbankの中の「利用状況の確認・各種変更手続き」をクリックしますMy Softbankへログインしたら、「利用状況の確認・各種変更手続き」をクリック。

登録してある暗証番号を入力します4桁の暗証番号を入力。
この暗証番号は、携帯電話を購入したときに決めた4桁の暗証番号です。

「料金プラン変更」にある「ENTER」をクリック料金プランの変更」にある「ENTER」をクリックします。

変更したいプランを選択赤い文字で注意書きが書いてありますね。
画像をクリックすると拡大するので、よく読んでみてください。
私の場合は特に問題なしなので、このまま変更に。

うん?ホワイトプランしか選べない!?料金プランの選択項目には「ホワイトプラン」しかありませんでした。
選択したら「次へ」をクリック。

うお!注意事項が増えた!なんか注意事項がすごい増えてますが・・・。
ただ、私のように無料サービス期間が増えた人には無関係な内容ばかり。

「申込」をクリック「申込」をクリック。

2月11日に変更になるようです2月11日に変更になるようです。
ちなみに今日は2月3日。

パケットし放題

ゴールドプランだと、標準で「パケ放題」が付属してくるようです左の画像はゴールドプランの時の契約内容です。
よく見ると「パケットし放題」という割引サービスに加入していますね。
ゴールドプラン契約時には特にこのサービスを選択したわけではなかったので、どうもゴールドプランにすると自動的にこの「パケットし放題」がつけられるようですね。
ちなみにパケットし放題、月々の料金が最低1,029円(税込み)なので、ゴールドプラン2,880円!なんていっても、実際にはウン千円になるわけですね。

PCサイトブラウザ

パケットし放題を読んでいくと、「PCサイト」と「携帯サイト」で、料金の上限が違う??
PCサイト??
よく読むと、PCサイトブラウザの場合が上限が5,985円(税込み)、PCサイトダイレクトの場合が10,290円。
んで、携帯サイトだけの場合は、4,410円。
うーん。この3つの違いは?
と、思っていたらこんなページを見つけました。
ソフトバンク PCサイトブラウザ とPCサイトダイレクト パケ放題に入ってるから安心?

PCサイトブラウザ:
 パソコン用のサイトを見ることができるブラウザー。型番の十の位が『1』になっている機種に搭載されています。(例:SoftBank 811SH)
 それ以外の機種は、基本的にはソフトバンク携帯用のサイトしか見られないブラウザーが入っています。
 この『PCサイトブラウザ』を使ってパソコン用サイトを見た場合、『パケットし放題』の上限額が5700+消費税=5985円になります。
 『PCサイトブラウザ』が搭載されている機種でも、それを使わずソフトバンク携帯用のサイトだけを利用していれば、4200円+消費税=4410円が上限です。
 
PCサイトダイレクト:
 現状では、スマートフォン『X01HT』だけです。この機種のブラウザーは、ソフトバンク携帯用のサイトが見られません。パソコン用のサイトだけが使えます。
 この場合、通信量が多いPC用サイトを使うためでしょうか、上限額が9800円+消費税=10290円になってしまいます。

スマートフォンというのは、パソコンのようなキーボードがついている携帯端末のことですね。
私の場合911SHなので、この場合「PCサイトブラウザ」の料金になると。
んで、(たぶん)「Y!ボタン」を押した後のYahooカテゴリーに登録されているようなサイトが、それ以外のサイトっていうことになる・・・ンでしょうね。