ブログ

  • 【Linux】複数ディレクトリ内のファイル拡張子の変更

    現在、WEBサーバーとして、CORESERVERを利用しているのですが、将来的にはコストパフォーマンスにより他のサーバーに移転することも考えています。

    移転先有力候補には、さくらインターネットがあるのですが、さくらでは、原則として.htmlファイルを.phpファイルとして動作させることができないことを、最近知りました。

    標準では、以下の一文を.htaccessに記述すれば.htmlファイルでも.phpとして動かすことができます。

    AddType application/x-httpd-php .html

    さくらインターネットでは、この方法が使えないということです。

    それならば、現在、開発中のサイトについては、すべて.phpファイルとして作成した方がよいかと思い開発サイトの拡張子の変更作業を行いました。

    ■拡張子変更の初歩

    あるディレクトリ内のファイルの拡張子を変更(html→php)するには以下のコマンドを使います。

    for i in *.html ; do mv $i ${i/\.html/\.php}; done

    (なお、後半のドットの前はエスケープ(半角¥)しています。しなくてもよいかもしれませんが。)

    ただし、これだとディレクトリが複数有る場合には対応が面倒です。

    一括で複数ディレクトリ内のファイル拡張子を変更するには以下のコマンドを使います。

    find . -type f -name "*.html" -print0 | 
    while read -r -d '' file; 
    do mv "$file" "${file%%.html}.php"; done

    上記コマンドは実質一行で行います。

    これで、ファイルの拡張子の変更はできたのですが、次に、ファイル内のリンクパスやアクション先の文字列の変更を行います。

    つまり、ファイルテキスト内の、.htmlという文字列を.phpに変更します。

    変更するには以下のコマンドを使います。

    find */* | xargs perl -pi -e "s/\.html/\.php/g"

    上記コマンドの注意点は、ドットをエスケープしてやることです。.はメタ文字なので、バックスラッシュでエスケープしてやります。半角の¥でエスケープします。

    これでファイル内のテキストも変更できました。

    ただし、確認するとなぜか.htaccess内の文字列が変更されていませんでした。仕方ないのでここは手作業で置換しました。

    なお、お約束ですが、実行は自己責任で。作業前にはバックアップを取って置く事おをオススメします。

    cp -r hogedir backdir

    上記コマンドでhogedirのバックアップをbackdirとして作成できます。作業前にどうぞ。

    以上です。

  • 【CORESERVER】SSHでMySQLに接続する方法の覚書【XREA】

    SSHでMySQLに接続する方法の覚書です。

    SSH接続するために、予め管理画面のホスト情報登録から、SSH登録を済ませておきます。

    5分ほどで登録が反映されるので、しばらく待ち、Tera Termなどを使い、SSHログインをします。

    ログインした時点でのカレントディレクトリは、ユーザーのホームなので、ルートまでカレントディレクトリを変更します。

    cd /

    ルートに移動したら、MySQLにログインするため次のコマンドを入力します。

    mysql -u your_db -p

    すると

    Enter password:

    とデータベースのパスワードを聞いてくるので入力します。

    パスワードのコピペが出来ない場合には手で入力します。
    また、手で入力しても●●●●とは表示されず、入力できていない感覚になりますが、入力できているので、パスワードを最後まで打ち込みエンターを押します。

    上手くいくとMySQLクライアントが立ち上がり、プロンプトが、自己のアカウントから

    mysql >

    に変更されます。(終了は、exit でOK)

    それでは、まずは、データベースを表示してみましょう。

    mysql > show databases;

    上記コマンドで、データベースが表示されます。

    mysql > use your_db;

    上記コマンドで、データベースを選択します。

    mysql > show tables;

    上記コマンドで、テーブルを表示します。

    あとは、各種SQLコマンドで操作していくことになります。

  • 複数ディレクトリ内の検索(grep)・置換(find+perl)

    WEBサーバーのファイル(htmlやPHPファイル)が多くなってくると、ファイル内の文字列の置換えが面倒になってきます。

    そこで、Linux/Unixコマンドを使い直接ファイルを検索・置換し保存します。

    まず、sshでサーバーにログインします。

    複数ディレクトリ内のファイル内の文字列の検索

    grep "hoge" */*

    検索だけなら上記のようにgrepでよいのですが、置換は少しややこしいです。sedでも置換はできるのですが、保存まで出来ない(?)ので、findとperlを組み合わせます。

    find */* | xargs perl -pi -e 's/old/new/g'

    あるいは、

    find . -type f -exec perl -pi -e 's/old/new/g' {} \;

    あくまで実行は自己責任で。操作の前にバックアップを取っておくことをオススメします。

  • RSIをPHPで計算・算出する方法

    RSIをPHPにて計算・算出します。

    計算式は、

    RSI = n日間の値上がり幅合計 ÷ (n日間の値上がり幅合計 + n日間の値下がり幅合計) × 100

    一般にnには、14日が使われています。松井証券のQUICK情報やヤフーファイナンスでも14日となっています。

    以下がそのスクリプトです。
    global宣言した変数・配列には、関数外で値を設定してください。$stocks_endには、データベースから終値を引っ張る処理を事前にしています。

    //RSI算出  
    function get_rsi($offset) {
        global $rsi_term ; //rsi算出期間  
        global $stocks_end ; //終値配列データ(直近の添え字が0) 
        //開始地点から要素を切り出し     
        $array = array_slice($stocks_end, $offset);
        $plus  = 0 ;
        $minus = 0 ;
        $diff  = 0 ;
        for ($i = $rsi_term ; $i > 0; $i--) {
            $j = $i - 1 ; //jが本日、iが昨日         
            //本日終値から昨日終値を引いて差を求める         
            $diff = $array[$j] - $array[$i] ;
            if ($diff > 0) {
                $plus += $diff ;
            } else {
                $minus += -($diff) ;
            }
        }
        return round($plus / ($plus + $minus) * 100) ;
    }
    
    //RSI取得 
    for ($i=0; $i < 3; $i++) { //3日分取得     
        $rsi[$i] = get_rsi($i) ;
    }
  • 【phpMyAdmin】特定のレコードを部分的にエクスポートする方法

    MySQLを扱う場合に便利なのが、phpMyAdminです。

    ここでは、phpMyAdminで、特定のレコードを部分的にエクスポートする方法について覚書しておきます。

    前提知識として、データベースのエクスポートは、データベースを選択して、エクスポートタブをクリックし、SQLを選択、そして、zip形式、または、gzip形式でエクスポートします。

    テーブルのエクスポートについても、同様に、テーブルを選択して、エクスポートタブをクリックし、SQLを選択、そして、zip形式、または、gzip形式でエクスポートします。

    エクスポートについて

    さて、特定のレコードを部分的にエクスポートする方法ですが、まず、テーブルを選択して、エクスポートしたい特定のレコードをセレクトし表示させます。

    次に、その画面下部にある、すべてチェックするを選択し、「チェックしたものを」の「エクスポートアイコン」をクリックします。×印アイコンの隣が、エクスポートアイコンです。

    すると、エクスポートページが表示されます。ただ、この段階では、まだエクスポートはされていません。

    通常の場合と同様に、SQLを選択し、zip形式、または、gzip形式でエクスポートします。

    この際に、エクスポート形式を、INSERT、UPDATE、REPLACEの3つから選択することができます。

    エクスポートしたデータを、どのように利用するかで選択が分かれます。挿入するならINSERT、更新するならUPDATEを選択します。

    ちなみに、自分の場合では、ローカルに置いたDBを一部更新した後、そのデータを本番サーバーに反映させる目的で使用するので、UPDATEを選択するようにしています。

    このように特定のレコードを部分的にエクスポートすると、DB全体の入れ替えをする必要がないので、使いようによっては便利なものと言えます。

    インポートについて

    最後に、インポートの方法ですが、まず、該当テーブルを選択して、インポートタブをクリックします。

    すると、インポート画面が表示されるので、そこで、ローカルのファイルを選択し、SQLを選択、そして、実行するだけです。