タグ別アーカイブ: PHP

HPの相互リンクをラクラクにするサービスが新しくなります

昔、某SEO会社からの依頼で作った相互リンクシステムをリニューアルしてます。

もうね、何ていうか、ほぼ全てのコードを書きなおしてます。
自分で書いたコードなんだけど、数年の月日が経って今見なおしてみると「よくこれで動いてんなー」って気持ちになります。
それと同時に、自分の成長も実感できたりして、ちょっと嬉しかったりw

古いシステム(現在動いてる)の構造はこんな感じ。

index.php ←全てのアクセスはここに(!)

module_***.php ←リクエストに応じて適当なモジュールを読み込み。

functions.php ←全ての関数群(!)ライブラリー的な何かw

当時はMVCが何だとか、いまいち分かってなく、PHPのClassの使い方もあやふやだったので、全てのリクエストをifとswitchで切り替えて動作してました。
そして、まるで根気の塊のようなfunctions.php。全ての動作がこの一つのファイルに詰まってます。

今、考えたらアリエン仕組みです。

新しく書きなおしたらグッとシンプルになったよ。

一度、システムを稼動させているので、どこにウェイトがかかり、どこに無駄があるのか分かってきます。
そういう意味では、プロトタイプとしての役割を現在のシステムは果たしてくれています。

さて、リニューアル手順ですが。
まず、functions.php 内の関数群から、View相当とModel相当の部分を徹底的に分離しました。そして、次に重複するコードを分離&結合して、シンプルに再構成。

さらに、リクエストごとに必要なClass、関数を洗い出し、不要なコードを読み込まないようにControl相当部分を再設計しました。

結果、システム全体を構成するファイル数は増えましたが、リクエストごとのリソースは少なくなりました。

本当はユーザー配布側のスクリプトも新しくしたかったんだけど、現在のユーザーも新システムに引き継ぐということなので、配布側のスクリプトは変更なし。ただし、ホスト側では、スピードアップが計られています。

近々、公開できると思います。
以上、ちょい出しリーク情報でしたw

あなたは、タブ派?スペース派? HTML&CSS

HTMLやCSS、PHPのコーディングをしている時、ソースコードのインデントどうしてます?

(多分、)標準的なソフトでコーディングしていれば、タブでインデントされてると思います。

みなさんはどうですか?
タブ(またはスペース)に統一してますか。それともそのままでしょうか。

問題にしたいは、ネットからソースコードをコピペした時、インデントがスペース4個になってることが多くあります。そして、そのままペーストすると、一つのファイル内に、タブインデントと、スペースインデントが共存しちゃうわけです。

ブラウザの「ソースを見る」とかメモ帳で見る分には、どっちも空白なので、見た目にもほとんど違和感なく見れるし、本当にどっちでもいいって言えばどっちでもいいことなんでしょうけど、エディタで見ると、なんか気持ち悪いんですよね。

あと、タブの方が、1文字で表示されるので、なんとなくタブの方が軽いのかなとか思ってますが、どうなんでしょう。

こんなこと、どっちでもいいよって気にしない人も結構多くいそうですが、気になる人は、もう何ていうか、ざわざわしちゃってしょうがないと思うんですよ。
オープンソースソフトウェアの中身も時々、タブとスペースが混在していることありますしね。
もう、どっちかに統一しようよっ!って思っちゃうんです。

私の場合、Dreamweaverの「ソースフォーマットの適用」を使って、全部タブインデントに変換しちゃうんですけど、場合によっては、ページの半分位までインデントされちゃってさらに難解なコードになっちゃうこともしばしば(笑

さくらのVPS借りてみたので使ってみる【一日目】

さくらインターネットのVPSを借りてみた。

第一回目の今回は、初期状態からウェブサーバーを立ち上げるまで。

久しぶりに、(ほぼ)空のLinuxサーバーをいじるので悪戦苦闘です(笑)
VPSのいいところは、コンパネから簡単にOSの再インストールが出来るところですね。コンパネからrootパスワードを設定したら、ものの数分で初期状態のサーバーが立ち上がります。これは、便利!

ではでは私がやってみた手順をババッと

SSHにrootでアクセスしない

SSHにrootでログインできるようにしておくとセキュリティ上、マズイのでSSHログイン用のユーザーをつくります。

ここから、しばらくは「VPSコントロールパネル」のリモートコンソールから作業します。

# useradd –m USERNAME
# passwd USERNAME

※USERNAME…新しく作るユーザー名に置き換えてください。

そしたら、今作ったユーザー名でSSHログインできるか確認します。問題なくログインが出来れば、次にrootのSSHログインを停止する作業です。

/etc/ssh/sshd_config ファイルを編集します。

PermitRootLogin no

既にコメントアウトされた PermitRootLogin yes の行があると思いますので、その近くに記述しておけばいいでしょう。

さらにSSHで使用するポートの変更もすれば、セキュリティ的には少し安心かもしれません。

Port 10022

例)SSHポートを 10022 にする設定(初期値は 22 )

SSHを再起動!

/etc/init.d/sshd restart

SSHを再起動したら、設定が反映されているか確認します。rootでSSHログインできなくなっているか?(ポートを変更した場合)変更したポートでSSHログインできるか?などなど。

パケットフィルタの設定

さくらのVPSは初期状態で、「全開」状態になってます。
まあ、公開用サーバーとして使うので、そんなに気にしなくてもいいのかもしれませんが、気持ち悪い感じがするかもなので必要なパケット以外はフィルタしちゃいます。

今回は、WWW(80)、FTP(20)、SSH(22)、それとDNS(53)を許可する設定にします。

適当なところに、iptables 設定用のスクリプトを書いておきます。
コマンドラインから、1行ずつ実行しちゃダメですよ。コマンドでやってると最初の INPUT DROP の後から、何もできなくなっちゃいます!

vi /home/USERNAME/IPTABLES_SH

#!/bin/sh
iptables -F
iptables -X

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -p tcp –dport 20 -j ACCEPT

iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p udp -m udp –sport 53 -j ACCEPT
iptables -A INPUT -p udp -m tcp –sport 53 -j ACCEPT

service iptables save
service iptables restart

ip6tables -F
ip6tables -P INPUT DROP
ip6tables -P OUTPUT ACCEPT
ip6tables -P FORWARD DROP

service ip6tables save
service ip6tables restart

スクリプトの説明をブロックごとに簡単に…

  1. 最初のブロックで iptables に関する設定をクリア(初期化)します。
  2. 出力(OUTPUT)を許可(ACCEPT)し、入力(INPUT)とパケット転送(FORWARD)を破棄(DROP)する。
  3. ローカルの出力と入力をともに許可します。
  4. 宛先ポート(–dport)ごとに許可するパケットを指定します。
  5. セッション確立したパケットは許可します。
  6. DNS(53)はudpを使うので、5の許可では通信できないので別途指定します。
  7. ここまでの設定を保存(save)し、iptables を再起動(restart)します。
  8. 8,9番目のブロックは、IPv6に関する設定ですが、今回は特に使用しないで、出力以外は破棄(DROP)にしておきます。

スクリプトの記述ができましたら、パーミッションを変更して実行します。

# chmod 744 /home/USERNAME/IPTABLES_SH

# /home/USERNAME/IPTABLES_SH

ウェブサーバーパッケージのインストール

ウェブサーバーに必要なパッケージは、とりあえず、httpd、php、mysqlくらいでしょうか、必要になったらあとで追加しましょう。

ちゃちゃっとやってしまいたいので yum で簡単にインストールしちゃいます。

# yum install httpd http-devel
# yum install php php-mbstring php-mysql php-gd php-pear
# yum install mysql mysql-devel mysql-server

それぞれ、実行するとインストールするパッケージの一覧と(y/n)表示されますので、 y を押してインストールを完了します。(-y オプションをつけてやっちゃっていいかも)

自動起動スクリプトをつくる

「つくる」とか言っちゃってますが、シンボリックリンクを作成するだけです。

yumでインストールしたパッケージの起動スクリプトが /etc/rc.d/init.d 以下に保存されていますので、そこから必要なパッケージをランレベル3( /etc/rc.d/rc3.d )にシンボリックリンクを作成します。

# cd /etc/rc.d/rc3.d
# ln –s ../init.d/httpd S40httpd
# ln –s ../init.d/mysqld S41mysqld

できたら、おもむろに reboot してみましょう。

そして起動したらブラウザでサーバーにアクセスしてみます。
Apacheのテストページが表示されれば、セットアップ完了です。

とりあえず、今日はここまで。

【次回予告】FTP、バーチャルホストの設定 の予定

XMLの出力コストはどのくらいなんだろう?

ホストサイトでDB管理しておいて、パートナーサイトに情報を提供するカタチのシステムを組んでて、今回ホストからの情報渡しにXMLを使ってみた。

従来のシステムなら、phpにreadfile関数とかで、ホストのphpページを読み込んで、ホスト側で何ちゃらやってたんだけど。

あとは、パートナーサイト側で、受信したXMLをキャッシュさせて、トラフィックの軽減を図ってみたりするけど、システム全体でのパフォーマンスはどうかなあ。

いまだに、どのphp関数がどのくらい負荷かかってるのか、よく分かってないし。
とにかく、コードを短くシンプルにしようとはしてるけど。

ああ!年末がー今年がーー

なんやかんやで、もう11月。

前回のエントリーから1カ月以上も空けてしまった・・

取引先企業様方のおかげさまで、忙しくしてました。

今回は、暴露ネタ。
年内の予定について

  • ケータイポイントラリー企画
    加盟店に掲示されているQRコードを読み取って、ポイントラリーしちゃう企画
    モバイル向けだけど、willcomにもちゃっかり対応。
    QRコード生成、iモードIDの利用、携帯端末情報の利用、とかとか。
    完全スクラッチ開発。12月リリース予定。
  • アクセスカウンター、アクセスランキングASPサービス企画
    忍者ツールズとか、ゼロツールズみたいな企画。
    統合的なサービスを提供する上で、フレームワークはとても大切って感じた。
    時すでに遅し、こちらもフルスクラッチ開発。(一部、旧ソースの使いまわしあり)
  • ウェブサイトリニューアル
    現在改装中であるクライアント様店舗のホームページリニューアル。
    12月1日オープンなのに、いまだ全く情報なし。あせる・・・
  • ウェブサイトリニューアルその2
    以前にWordPressで作ったクライアント企業様のホームページリニューアル。
    特に不満を言われてるわけではないですが、これといって成果が出ていないようなので、システムも合わせてリニューアルする予定。
    着手は、上の開発リリース後の12月中旬ごろからかな?クリスマス前くらいに納品できたらOK。
  • 自社ウェブサイト制作
    ええ、自社ホームページの制作です。
    IT企業でありながら、自社のホームページがindex.htmlの1枚だけなんです。
    過去には、Zen Cart でホームページを作ったり、WordPressにしてみたり、MODxを使ったりして何度かのリニューアルを行っていたのですが、今は、このような有様。
    キチンとつくろう。

一人会社って、気軽だけど、プレッシャーもあって大変。
特に手数の多い作業が詰まってくると、息抜きのタイミングを失う・・

しかし、社員を雇うには、もうちょっと資金繰りに余裕が無いとできないな。

やっぱ、なにかB2Cビジネスを立ち上げないと、今の不安定なキャッシュフローから抜け出せない気がする。