忍者ブログ
私のコンピュータTips集 というかメモです。プログラムやコンピュータの知識、技術全般です。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHPで、ページがリクエストされ、PHPスクリプトが動作してから、応答を返すまでの処理時間を計算する。(ミリ秒単位で計算。)サーバまでの到達時間やクライアントまでの到達時間は除く。
全てのページに共通して埋め込んでおけば、どのページが遅いか簡単にわかるので、大変役に立つ。

概略:
 開始時に microtime(TRUE)で float値 (sec.msec)を保持。
 終了時も同様に取得し、差を計算。これだけ。
 【注意】PHPマニュアル見ればわかるけど、「microtime関数は、gettimeofday() システムコールをサポートする オペレーティングシステムでのみ使用できる」です。

//----------
<?php
//開始
$time_start = microtime(TRUE);

//
//何かの処理
//

//終了
$time_end = microtime(TRUE);
//終了-開始
$time = $time_end - $time_start;

//表示してみる
printf("%040.25f</br>", $time_start);
printf("%040.25f</br>", $time_end);
printf("%040.25f</br>", $time);
?>
//----------

 

PR


やりたいことは以下。
・メール受信→メール内容をPHPで処理

(1) .forward の登録
 メールを転送するのに使うものだが、パイプによりプログラムとかに内容を渡せる。
 (例)
  "|/usr/bin/php /www/html/hoge.php"

 これでメール受信したとき、phpコマンドにより、hoge.phpが実行される。

(2) hoge.php の先頭に #!/usr/bin/php -q と書く
 (例)
  #!/usr/bin/php -q
  <?php
  ...
  ?>

 これでPHPコマンドラインインターフェースで実行される。"-q" でHTTPヘッダを抑制。
 
(3) PHPで受信メール内容を読み取る方法
 標準入力で渡されるので、標準入力の読取と同じ。
 (例)
  if(($stdin=fopen("php://stdin",'r') )!==FALSE ) {
    while( !feof($stdin) ) {
      $line = fgets($stdin, 4096);
    }
    fclose($stdin);
  }

※メールを送りつけて動作を確認するも、動く形跡なし。。
調べたところ、.forwardのパイプ渡しで実行できるコマンドが "smrsh"という
やつで制限されているようだ。
環境によって設定場所はことなるようだが、うちは、以下でできた
/etc/smrsh のディレクトリにphpのコマンドを置く(シンボリックリンクで良い)
(例)
#cd /etc/smrsh
#ln -s /usr/bin/php

 

scpコマンド ファイルをSSHで暗号化した上で転送してくれるコマンド

【オプション】
-r ディレクトリを再帰的にコピー
-p ファイルの属性(パーミッションやタイムスタンプ)を保つ

【使用例】
# ./hoge をリモートホスト hoge.com の /home/username/ に転送
scp -pr ./hoge username@hoge.com:/home/username

# リモートホスト hoge.comの /home/username/hoge を .に転送
scp -pr username@hoge.com:/home/username/hoge .
 

【Subversion のインストール】

Subversion のインストールと設定をメモしておく。

条件:
 ・Linux (Red Hat) …Subversion サーバ
 ・ソースからインストール
 ・Berkeley DB は使用しない
 ・Apacheと連携しない
 ・サーバ機能はinetd経由とする

■インストール

(1)Subversion のソースを取得する
 公式サイト(http://subversion.tigris.org/)
 ソース置き場
 http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=260&expandFolder=74
 
 現時点の最新 1.5.3 以下2つをダウンロード
 ・subversion-1.5.3.tar.gz
 ・subversion-deps-1.5.3.tar.gz
 
(2)ダウンロードしたソースを配置する
 /usr/local/src/subversion-1.5.3.tar.gz
 /usr/local/src/subversion-deps-1.5.3.tar.gz
 
 (以降、root権限で処理 # root権限、$ 普通の人)
 
(3)解凍する
 # cd /usr/local/src/
 # tar xzvf subversion-1.x.x.tar.gz
 # xzvf subversion-deps-1.x.x.tar.gz
 # cd subversion-1.x.x
 
(4)インストールする
 # ./configure
 # make
 # make install
 

■svnserveの稼働(xinetd)

(1)svnserve用のユーザ svn を作成する
 # useradd svn

(2)レポジトリのルート(/svn)を作成する
 # mkdir /svn
 # chown svn:svn /svn

(3) xinetd(inetd経由)の設定をする
・設定ファイルを作る(環境に応じて適宜変更)
 # vi /etc/xinetd.d/svn
----ここから
{
        disable         = no
        socket_type     = stream
        wait            = no
        user            = svn
        server          = /usr/local/bin/svnserve
        server_args     = -i -r /svn
        log_on_failure  += USERID
        only_from       = 192.168.0.0/24 127.0.0.1
}
----ここまで
・接続許可設定 /etc/hosts.allowに追加(内部ネットワークと自分を許可)
svn: 192.168.0. 127.0.0.1
・サービス名と使用ポート番号の設定 /etc/services に追加
svn    3690/tcp   # Subversion
svn    3690/udp   # Subversion
・ファイヤーウォールの設定は次項
・設定の確認と再起動
 # chkconfig --list svn
 svn             on
 
 # service xinetd restart
 xinetd を停止中:      [  OK  ]
 xinetd を起動中:      [  OK  ]

・telnet を使って接続確認
 #telnet localhost 3690
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
( success ...

(4)ファイヤーウォールの設定
  デフォルトの3690ポートtcp/udpを許可する。
・設定
 #iptables -A RH-Firewall-1-INPUT -s 192.168.0.0/24 -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
 #iptables -A RH-Firewall-1-INPUT -s 192.168.0.0/24 -m state --state NEW -m udp -p udp --dport 3690 -j ACCEPT
・確認
 #iptables -L
 ACCEPT     tcp  --  192.168.0.0/24       anywhere            state NEW tcp dpt:svn
 ACCEPT     udp  --  192.168.0.0/24       anywhere            state NEW udp dpt:svn
・initスクリプトに保存
 #/etc/init.d/iptables save
・リスタート
 #service iptables restart


■リポジトリの設定

(1)リポジトリの作成
 # su svn
 $ svnadmin create /svn/projectA

(2)リポジトリのアクセス権の設定
 $ cd /svn/projectA/conf
 $ vi svnserve.conf
 
[general]
anon-access = read
auth-access = write

password-db = passwd

(認証ユーザは読み書き、匿名ユーザは読み込み)

(3)ユーザとパスワード passwdファイルの編集
 $ vi passwd
[users]
hogea=hogeaaa
hogeb=hogebbb
 
 
■クライアントからの接続確認

(1)サーバ(192.168.0.1とする)と同じマシンで確認
・新しいディレクトリを作る
 $svn mkdir -m "comment" svn://192.168.0.1/projectA/trunk
 $svn mkdir -m "comment" svn://192.168.0.1/projectA/branches
 $svn mkdir -m "comment" svn://192.168.0.1/projectA/tags
・ディレクトリエントリを一覧表示する
 $svn list svn://192.168.0.1/projectA
branches/
tags/
trunk/

(2)Windowsマシンから TortoiseSVN を使用
・TortoiseSVN をインストールする
公式サイト(http://tortoisesvn.tigris.org/
Language packsで日本語表示になる。
現時点
 ・TortoiseSVN-1.5.4.14259-win32-svn-1.5.3.msi
 ・LanguagePack_1.5.4.14259-win32-ja.msi
・インストーラの指示に従えば簡単にインストールできる

・接続確認
 ・エクスプローラの任意のフォルダで
 右クリック「TortoiseSVN」「リポジトリブラウザ」
 ・URLに svn://192.168.0.1/projectA として「OK」
 ・表示されればOK

★外部から接続する場合は、svnサーバの3690ポート(デフォルト)をあける必要がある。
pingは通るが、クライアントからホスト(svnサーバ)に到達できない場合は
ファイヤーウォールではじかれている可能性がある。
一時的にファイヤーウォールを無効にして、接続可能か試してみよう。
(当然無効にしている間は危険なので可能な環境であれば試してみよう)
 #service iptables stop
これで通れば、ファイヤーウォールの設定が正しくないということ。


 

「\u30ea\u30af\u30a8\u30b9\u30c8」
このようなにUnicodeエスケープされた文字列を
読める文字に戻します。この場合、「リクエスト」となる。

java の native2ascii -reverse と同じようにできないかと、
ごりっとロジック組んでみました。
こんなんでも動くから、まぁいいでしょう!

Function convFromUnicodeEscape(ByVal strTarget As String) As String

    Dim str As String
    Dim strRet As String
    Dim lngPos As Long
    Dim lngStart As Long
    Dim strTmp As String
   
   
    str = strTarget
       
    lngPos = 0
    Do
        lngStart = lngPos
        lngPos = InStr(1, str, "\u")
         
       
        If lngPos > 0 Then
            strRet = strRet & Mid(str, 1, lngPos - 1)
            strTmp = Mid(str, lngPos, 6)
           
            strTmp = Replace(strTmp, "\u", "&H")
            strRet = strRet & ChrW(strTmp)
           
            str = Mid(str, lngPos + 6)
           
        Else
            strRet = strRet & str
       
            Exit Do
        End If
   
    Loop

    Debug.Print strRet
   
    convFromUnicodeEscape = strRet
   
End Function

カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
フリーエリア
最新CM
最新TB
プロフィール
HN:
T.K
性別:
非公開
バーコード
ブログ内検索
アクセス解析
アクセス解析
忍者ブログ [PR]