2012年12月19日水曜日

[cakephp 1.3] コンポーネントをViewから使う

こういうコンポーネントをViewからコールする
class UtilsComponent extends Object {
    function pdate($id) {
        $Picture = ClassRegistry::init('Picture');
        $tmp = $Picture->read('modified',$id);
        return $tmp['Picture']['modified'];
    }
}
同じ名前のヘルパーを作成する。このヘルパーを通してコンポーネントをコールする。
App::import('Component','Utils');
class UtilsHelper extends AppHelper {
    function __call($methodName, $args) {
        $utils = new UtilsComponent();
        return call_user_func_array(array($utils, $methodName), $args);
    }

    //もちろんこのヘルパー内に他の関数を書いてもよい。
}
上記により、UtilsHelperに存在しない関数はUtilsComponentの呼び出しに変換される
コントローラで
var $components = array('Utils'... その他のコンポーネント);
var $helpers = array('Utils', ...その他のヘルパー);
と定義しておけば、ビューからは

$this->Utils->共通コンポーネントの関数()

と呼び出すことで、コンポーネントの関数を呼び出すことができる。

[cakephp 1.3] コンポーネント内でモデルを使う

コントローラでusesしているモデルであれば

class UtilsComponent extends Object {
    private $controller;

    public function initialize(&$controller)
    {
        $this->controller = $controller;
    }

    function pdate($id) {
        //コントローラーのusesにあるもの
        $tmp = $this->controller->Picture->read('modified',$id); 
        return $tmp['Picture']['modified'];
    }
}

これでいける。
しかし、呼び出し元のコントローラでusesしていないとエラーになってしまう。
それでもう一つの方法である。controller::loadModel()を使うのだがこれは コントローラーでしか使えないみたいなので同じ動きをする ClassRegistry::init()を使う。
その場合は

class UtilsComponent extends Object {
    function pdate($id) {
        $Picture = ClassRegistry::init('Picture');
        $tmp = $Picture->read('modified',$id);
        return $tmp['Picture']['modified'];
    }
}

2012年12月17日月曜日

[cakephp 1.3] コンポーネント内でヘルパーを使う。

App::import('Helper','Html');
$html = new HtmlHelper();

[cakephp 1.3] ヘルパー内でモデルを使う

$event = ClassRegistry::getObject('Event');
$tmp = $event->read('modified', $id);
echo $tmp['Event']['modified'];

こんな感じでClassRegistry::getObject()を使う。

2012年10月23日火曜日

[cakephp 1.3] SecurityComponentを使うとすぐにblackHoleへ吸い込まれる


DatabaseのTable内に存在しないField名を使っていないか

SecurityComponentではTokenを作成する際、DatabaseのTableのFieldを読み込んでHashを作っているようです。なので、それ以外のInput項目を付け加えてしまうとblackHoleへ吸い込まれてしまいます。
項目を付け加える必要がある場合は、以下のようにControllerに設定しておきましょう。

public function beforeFilter() {
    $this->Security->disabledFields = array('hoge');
}


$this->Form->create() $this->Form->end() をちゃんと使っているか

SecurityComponentを使うとTokenをチェックしてくれますが、ちゃんとFormHelperを使ってTokenを発行しないことにはblackHoleへ吸い込まれてしまいます。

$this->Form->create() $form->end() を使いましょう。

$this->Form->submit() ではダメです!

2012年10月2日火曜日

[contos] ハードディスクの換装

今接続している250G+250Gを250G+500Gに換装する。

新しいHDは/dev/sdb に接続した。

fdisk /dev/sdb
p
1
基本パーティーションの1とした。

シリンダをstart~lastにした。

領域のシステムタイプを8eにする。



物理ボリューム登録
# pvcreate /dev/sdb1
  Writing physical volume data to disk "/dev/sdb1"
  Physical volume "/dev/sdb1" successfully created

# pvscan


  PV /dev/sdc1   VG vg_variable     lvm2 [232.83 GiB / 0    free]
  PV /dev/sda2   VG vg_fujiyama     lvm2 [232.34 GiB / 0    free]
  PV /dev/sdb1                      lvm2 [465.76 GiB]
  Total: 3 [930.93 GiB] / in use: 2 [465.17 GiB] / in no VG: 1 [465.76 GiB]


論理グループの作成
vgextend vg_variable /dev/sdb1
  Volume group "vg_variable" successfully extended

# pvscan
  PV /dev/sdc1   VG vg_variable   lvm2 [232.83 GiB / 0    free]
  PV /dev/sdb1   VG vg_variable   lvm2 [465.76 GiB / 465.76 GiB free]
  PV /dev/sda2   VG vg_fujiyama   lvm2 [232.34 GiB / 0    free]
  Total: 3 [930.93 GiB] / in use: 3 [930.93 GiB] / in no VG: 0 [0   ]

物理ボリュームコピー
# pvmove /dev/sdc1 /dev/sdb1

  /dev/sdc1: Moved: 0.1%
  /dev/sdc1: Moved: 0.2%
  /dev/sdc1: Moved: 0.4%
  /dev/sdc1: Moved: 0.5%
  /dev/sdc1: Moved: 0.6%

OKなので
ディスクを外して再起動
# pvscan
  Couldn't find device with uuid jgBIQD-tOMR-PKr5-jvU1-YftI-vbGU-a3O6h5.
  PV unknown device   VG vg_variable   lvm2 [232.83 GiB / 232.83 GiB free]
  PV /dev/sdb1        VG vg_variable   lvm2 [465.76 GiB / 232.93 GiB free]
  PV /dev/sda2        VG vg_fujiyama   lvm2 [232.34 GiB / 0    free]
  Total: 3 [930.93 GiB] / in use: 3 [930.93 GiB] / in no VG: 0 [0   ]

しまったpvreduce するのを忘れていた。

# vgreduce vg_variable /dev/sdc1
  Couldn't find device with uuid jgBIQD-tOMR-PKr5-jvU1-YftI-vbGU-a3O6h5.
  Cannot change VG vg_variable while PVs are missing.
  Consider vgreduce --removemissing.

やっぱり駄目だ
# vgreduce vg_variable "unknown device"
  Couldn't find device with uuid jgBIQD-tOMR-PKr5-jvU1-YftI-vbGU-a3O6h5.
  Cannot change VG vg_variable while PVs are missing.
  Consider vgreduce --removemissing.

やっぱりダメ

# vgreduce --removemissing vg_variable
  Couldn't find device with uuid jgBIQD-tOMR-PKr5-jvU1-YftI-vbGU-a3O6h5.
  Wrote out consistent volume group vg_variable
# pvscan
  PV /dev/sdb1   VG vg_variable   lvm2 [465.76 GiB / 232.93 GiB free]
  PV /dev/sda2   VG vg_fujiyama   lvm2 [232.34 GiB / 0    free]
  Total: 2 [698.10 GiB] / in use: 2 [698.10 GiB] / in no VG: 0 [0   ]

なおた。

2012年9月28日金曜日

[cakephp] KtaiLibraryを単体で呼び出し

//KtaiLibraryを単体で呼び出し
//
App::import('vendor', 'ecw/lib3gk');
$this->Ktai = Lib3gk::get_instance();

2012年9月21日金曜日

[wp] ワードプレスでページIDをJavascript に渡す。


ワードプレスでページIDをJavascript に渡す。

<script type="text/javascript">
var page_id ="<?php echo $post->ID;?>";
</script>

2012年9月5日水曜日

平米、坪の換算方法

1坪 = 3.3057平米ですから、
(平米) = (坪) × 3.3057

(坪) = (平米) ÷ 3.3057
又は、

1平米 = 0.3025坪ですから、
(平米) = (坪) ÷ 0.3025

(坪) = (平米) × 0.3025

2012年8月3日金曜日

[Google Maps API V3] 情報ウインドウを出すと上が切れる

Google Maps JavaScript API V3で情報ウィンドウをマーカークリック後に表示するのではなく
マーカーと同時に表示すると情報ウィンドウが表示ウィンドウの上に上がってしまい切れてしまう。

google.maps.event.addDomListener(window, 'load', function() {
  var map = new google.maps.Map(document.getElementById('map_canvas'), {
    zoom: 12,
    center: new google.maps.LatLng(lat, lng),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });

  var infoWindow = new google.maps.InfoWindow({
    maxWidth: 300,
    content:'<p>メッセージ</p><p>メッセージ</p><p>メッセージ</p>'
  });

  var marker1 = new google.maps.Marker({
    map: map,
    position: new google.maps.LatLng(lat, lng)
  });

  google.maps.event.addListener(marker1, 'click', function(){
    infoWindow.open(map, marker1);
  });

  google.maps.event.trigger(marker1, 'click');

});

最初上記のようにしていたのだが、

このように情報ウィンドウの上が切れてしまっている。
しかし、マウスでマーカーをクリックするとちゃんと情報ウィンドウが欠けずに表示される。
ならば、ちょっとまってからクリックすればいいのかなと思って

pid = setTimeout(function(){
google.maps.event.trigger(marker1, 'click');
clearTimeout(pid);
},600);

setTimeoutを使って見たら上手く行った。

Pタグを外しても上手く行ったのだが、それはそれで困ってしまうので。

2012年8月2日木曜日

[cakephp] さくらのレンタルサーバーへcakephp 1.3のインストール

さくらのレンタルサーバーにcakephp1.3をインストールする方法

http://ユーザー名.sakura.ne.jp/cake に設置する場合。

wwwと同じ位置にcakephp1.3をcakephpという名前で展開します。

cakephp/app/webrootのhtaccessのRewriteEngine Onの次の行に

RewriteBase /cakeを追加します。

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

windowsならばputty等を使い

ユーザー名とコントロールパネルのパスワードでログインできる。

ログインしたら次のコマンドを打ち込んでエンターを押して下さい。

ln -s `pwd`/cakephp/app/webroot `pwd`/www/cake

pwdを囲んでいるのは、バッククォートですのでお間違いなく
(ln -s /home/ユーザー名/cakephp/app/webroot /home/ユーザー名/www/cake)と同じ

www/cakeを独自ドメインのルートに割り当てればRewriteBase行の追加は必要ありません。

2012年7月18日水曜日

qdmail 何度も使う場合は

qdmail を何度も使う場合は$this->Qdmail->reset();を実行して内部変数を初期化する

2012年7月17日火曜日

[cakephp 1.3] 複数あるサブミットボタンのどれが押されたか調査する。

コントローラーに以下のファンクションを追加する。
ビューには
とかを用意して置いて

コントローラーで次のように_getSubmitButtonName()を呼ぶ

返値をnameでチェックして処理を分ければよい。

2012年7月9日月曜日

[cakephp] Formヘルパー


$this->Form->chckbox()のオプション

echo $this->Form->checkbox('hoge',array('label'=>'hoge'));
と書いた時以下のように出力される。





この時チェックされなかった時に値が"0"となるようにする仕掛けhiddenが要らない時

optionsに'hiddenField'=>false入れておくとこれが表示されない。

2012年6月29日金曜日

[apache] さくらのレンタルサーバーとmod_rewrite

さくらのレンタルサーバーはRewriteEngine OnしてもRewriteBase の記述がないとうまく動かない。
↓↓これでは動かない↓↓
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

↓↓こうしないとダメ↓↓
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

サーバーのスペックは
FreeBSD 7.1-RELEASE-p16 i386
Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e
PHP 5.2.17
です。

2012年6月5日火曜日

[Mercurial][win] マーキュリアル分散型バージョン管理システムの導入 for Win

Windowsなので迷わずTortoiseHgを導入します。MacのようにGitもMercurialのどちらでも使えるようなものがあればいいのですが・・・。Mercurialの公式サイトにTortoiseHg with Mercurial というのがありますのでこれをダウンロードしてインストールします。

  • TortoiseHg Workbenchを実行します。
  • ファイルメニューの設定をクリックします
  • 左のメニューリストTortoiseHgをクリックし、マージツール、差分表示ツールをWinmergeuに、エディタをお使いのエディタに設定します
  • コミットをクリック、ユーザー名にご自分のメールアドレスを入力します
  • マスターリポジトリのサーバーが自己証明書を使っている場合は証明書を登録します。ファイルを開くボタンをクリックして以下を追加します。
    [web]
    cacerts=C:\Users\username\cacert-root.crt
    
  • OKをクリックして設定を閉じます。
  • マスターリポジトリがあるならファイルメニューのリポジトリのクローンを実行します
  • ソースに URL(https://example.com/hg/testdemo等、任意)を入力します。
  • ターゲットに (/Users/username/hg/testdemo)を入力し、「クローン」ボタンをクリックします。
  • ユーザーIDパスワードを入力ししばらく待ちます。完了が表示されたら、ウインドウを閉じます。
以上です。

2012年6月4日月曜日

[cakephp] 画像ディレクトリ等の変更


app/webroot/index.phpの
"if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) {"の前に
以下を挿入するとimgをimagesに変更できるが、スタイルシート等に記述した
background-image:url("../img/background.gif"); は手で変更しなくてはいけないので注意が必要。

if (!defined('IMAGES_URL')) {
define('IMAGES_URL', 'images/');
}

[Mercurial][Mac] マーキュリアル分散型バージョン管理システムの導入 for Mac

windowsならば迷わずTortoiseシリーズを使うところだが、MacならばAppストアーで扱っているSourceTreeというが凄いらしいのでこれを使ってみます。
まず、mercurialがインストールされていない場合は、Mercurialの公式サイト でダウンロードしてきます。公式サイトの右上のボタンを押すとダウンロードが始まります。ダウンロードしているOSに併せてファイルが違うので、snow leopard ならMercurial-2.2.2-py2.6-macosx10.6.zipが Lion ならMercurial-2.2.2-py2.7-macosx10.7.zipがダウンロードされますので間違えのないようにお願いします。mercurial-2.2.2+20120602-py2.7-macosx10.7.mpkgを実行してインストールします。

次にAPPストアーからSourceTreeをインストールします。今なら(2012.06.03現在)無料ですのでお早めに!!。

これで準備はできました。

  • SourceTreeを実行します。
  • 初めて実行すると、ようこそウィンドウが表示されるのでユーザー名とメールアドレスを入力、「・・設定ファイルを更新することを許可する」にチェックを入れて、次へをクリックします
  • オンラインサービスにアカウントがあれば入力、なければそのまま次へ
  • ローカルリポジトリがあれば検索して登録、なければそのまま仕上げ
  • ブックマークというウインドウが立ち上がるのでツールバーの左端のリポジトリの追加ボタンを押します。
  • マスターリポジトリが有るのなら「リポジトリをクローン」タブを新規ならば「リポジトリを作成」タブを選びます。
  • 「クローン」タブを選んだ場合はソースパスにURL(https://example.com/hg/testdemo等、任意)を入力します。
  • 認証ウインドウが開きますのでユーザー名とパスワードを入力します。
  • 保存先のパス(/Users/username/hg/testdemo)を入力し、「クローン」ボタンもしくは「作成」ボタンをクリックします。
たったこれだけです。

2012年6月1日金曜日

[javascript] JSONの使い方

まず、http://www.json.org/ のJavaScript json2.js を取得する。

github から ZIPボタンを押してダウンロード、解凍して適当に設置する。

<script type="text/javascript" src="../js/json2.js"></script>

これで準備は整った。
オブジェクトや配列からJSON文字列に変換するには

JSON.stringify() を使う

JSON.stringify(value, replacer, space)

value オブジェクトや配列

replacer 

space 入れ子の構造のインデント値、整形して表示するような時に使用する。
通常のJSON文字列にする場合は指定しない。
ここにスペースを入れておくと、phpのvar_dump()ようにインデントする。

JSON文字列からオブジェクトに変換するには 

JSON.parse()を使う

JSON.parse(text, )

text

reviver


2012年5月31日木曜日

[javascript] オブジェクトの表示phpのvar_dumpみたいなもの

 function printProperties(obj) {
     var properties = '';
     for (var prop in obj){
         properties += prop + "=" + obj[prop] + "\n";
     }
     document.write(properties);
 }

[php] JSONと連想配列の相互変換

$arrayData = (array) json_decode($jsonData);

$jsonData = json_encode((object) $arrayData);

2012年5月28日月曜日

[cakephp][jQuery] radioボタンを選択する時は"["と"]"をエスケープする。


<input class="category" type="radio" name="category" value="1" />携帯
<input class="category" type="radio" name="category" value="2" />スマートフォン
<div id="category_select">
</div>

こういうラジオボタンで下の  id="category_select" のdivブロックを下記のjavascriptで
表示したり非表示にしたりしているのは良くある話ですが。

<script>
$(document).ready(function(){

    function displayVals() {
        var singleValues = $('input[name="category"]:checked').val()
        if(singleValues == 2){
            $("#category_select").css("display","block");
        }else{
            $("#category_select").css("display","none");
        }
    }

    $('input[name="category"]:radio').change(displayVals);
    displayVals();
});
</script>

cakephpでデータをやり取りすると少し困ってしまう。

普通のヘルパーを使って

<?php
echo $form->input('category', array(
  'type'=>'radio',
  'legend' => false,
  'label'=> true,
  'class'=>'category',
  'options'=>array('1'=>'携帯', '2'=>'スマートフォン'),
));
?>
このようにViewを書くとname部分が"data[Mobile][category]"になってしまい

<div class="input radio">
<input type="hidden" name="data[Mobile][category]" id="MobileCategory_" value="" />
<input type="radio" name="data[Mobile][category]" id="MobileCategory1" class="category" value="1"  />
<label for="MobileCategory1">携帯</label>
<input type="radio" name="data[Mobile][category]" id="MobileCategory2" class="category" value="2"  />
<label for="MobileCategory2">スマートフォン</label>
</div>

こんなコードが出力される。

javascriptのSelectors部分がダブルクォーテーションで囲まれているから
input[name="category"] を input[name="data[Mobile][category]"] こう書き換えると

良いように思うが、これでは上手く行かない。理由は上手く説明できないので割愛するが
下記のように"["と"]"をエスケープしてやらなくてはいけない。

input[name="data\[Mobile\]\[category\]"]

だから正しいjavascript文は

<script>
$(document).ready(function(){

    function displayVals() {
        var singleValues = $('input[name="data\[Mobile\]\[category\]"]:checked').val()
        var defined = 0;
        if(singleValues == 2){
            $("#category_select").css("display","block");
        }else{
            $("#category_select").css("display","none");
        }
    }

    $('input[name="data\[Mobile\]\[category\]"]:radio').change(displayVals);
    $(window).load(function () { displayVals();});
});
</script>

こうなる。

2012年5月8日火曜日

サーバサイドでタグを動的に複数出力し、
レイアウト1段目に<br />
<br />
<li>をfloatで3つ配置、
2段目にも</li>
<li>を3つ配置・・・といった構成の場合、
テキスト量によっては要素の高さが異なってしまい、
レイアウトが崩れる原因ともなるがそんな時。

jqueryAutoHeight.jsが横一列の高さを揃えてくれる。

http://code.google.com/p/opensocial-jquery/wiki/PluginAutoHeight</li>

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jqueryAutoHeight.js"></script>
<script type="text/javascript">
jQuery(function($){
    $(揃えたいセレクタ).autoHeight();
});
</script>

2012年5月7日月曜日

[wp]予定に基づいたメンテナンスを行っているためしばらくの間ご利用できません。少し間をおいて再度確認してください。

「予定に基づいたメンテナンスを行っているためしばらくの間ご利用できません。少し間をおいて再度確認してください。」が 表示されてサイトが表示しない場合。 WordPress下に、.maintenanceのファイルが作成されてますので、これを削除することで、メンテナンスモードが解除されます。 もしくは、.maintenanceをに書き換える。

2012年4月5日木曜日

[extrem.jp] かんたんインストール


  • WordPress
  • MovableTypeオープンソース版
  • EC-CUBE
  • CS-Cartフリー版
  • Joomla!
  • concret5
  • Sweetcron
  • Zenphoto
  • PukiWiki
  • acmailer

2012年3月22日木曜日

[xcode] code sign error が出て一向に前に進まない件

Code Sign error: The identity 'iPhone Developer' doesn't match any valid certificate/private key pair in the default keychain

なんとかsnow leopardにxcode_3.2.6_and_ios_sdk_4.3をインストールして、hallo world と行こうとしたけど、何度やってもerrorがでて前に進まない。
ちなみに上の文章でググってみるとでるはでるは12000件余。みんな躓いているよ。

では4にするかと思うが、買い求めた入門書が役にたたなくなる。せめて買った入門書をやりきるまではこのままで行こうと思う。

キーチェーンを色々変えて見たり、デベロッパーページから再度ダウンロードしてインストールしてみたりしたが、IOSエミュレーターが出てこない。

試しに再起動してみたらどうなるかと思い再起動して見ると何事も無かったかのようにIOSエミュレーターが動いた。

さて何が良かったのか?

2012年3月21日水曜日

[webmin] vsFtpd のインストール

[Webmin]-[Webmin Configuration]-[Webmin Module] の Third party module from からvsFtp を選んでモジュールをインストールと行きたいところだったのだが、

Failed to install module from This module configures the vsftpd.conf file from your VSFTPD FTP-Server. You can also have nice graphical stats from your ftp visitors. New in v.1.4: SSL CERT Creation and SSL support for your vsftpd-server : Invalid URL
上のようなエラーがでてモジュールのインストールが失敗。


webmin.com から vsftpd.tar.gz をダウンロード。

場所はwwebmin.comCommunity タブをクリック、サイドメニューの Third party modules をクリックFind modules or themes matching: にvsftp と入力 Search を押下するとダウンロードページのリンクが出てくるのでそれを押下してダウンロードのページを開きます。LADENボタンをクリックしてダウンロードします。

再び [Webmin]-[Webmin Configuration]-[Webmin Module]に戻りfrom uploaded file から先ほどダウンロードしたファイルを入力して [install Module] ボタンをクリックします。

vsFtpd がインストールされていなかったらインストールする。

[vsftp] の画面を開き [Module Configuration] をクリックして2箇所を修正

[The path and filename to vsftpd.conf]

* 変更前:[/etc/vsftpd.conf]→変更後:[/etc/vsftpd/vsftpd.conf]。

[Path where the virtual user will be stored]

* 変更前:[/etc/vsftpd/vsftpd_user_conf]→変更後:[/etc/vsftpd/user_list]

[Start Vsftpd Server] をクリックしてFTPサーバーを起動させます。
利用し終わったら [Stop Vsftpd Server] クリックしてしてFTPサーバーを停止させます。
常時起動する場合は chroot や SSL を設定する。


[webmin] mysqlのバックアップ

Backup destination の Backup to directory に
"/任意の場所/mysql_bkup/xxxx"
を設定
Create destination directory? を Yes にする。

Other backup options の Command to run after backup に
date +%m%d | xargs --replace mv -f /任意の場所/mysql_bkup/xxxx /任意の場所/mysql_bkup/{}

を入力する。
 こうすると毎日、日付のフォルダーにバックアップを格納するようにできる。

2012年3月16日金曜日

[centos] wing-net の php52 をインストールする。

リポジトリを取ってくる。
cd /etc/yum.repos.d/
wget http://wing-net.ddo.jp/wing/5/EL5.wing.repo
パッケージのインストール
yum install --enablerepo=wing php52-devel php52-mysql php52-mcrypt php52-ncurses php52-xml php52-gd php-pear php52-mbstring
とするとphp52-gdのところでエラーがでた。

Error: Missing Dependency: libt1.so.5 is needed by package

libt1.so.5 がないらしいのでインストールする。
yum install --enablerepo=rpmforge libt1.so.5

yum install --enablerepo=wing php52-devel php52-mysql php52-mcrypt php52-ncurses php52-xml php52-gd php-pear php52-mbstring
成功したので httpd と mysql もインストールする。
yum install --enablerepo=remi,epel,rpmforge httpd-devel mysql-server

[centos] phpmyadmin のインストール

phpmyadminのインストール
wget http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/3.3.10.5/phpMyAdmin-3.3.10.5-all-languages.tar.gz
tar xzfv phpMyAdmin-3.3.10.5-all-languages.tgz.gz
mv phpMyAdmin-3.3.10.5-all-languages /var/www/phpMyAdmin
vi /etc/httpd/conf.d/phpmyadmin.conf
<Directory "/usr/share/phpmyadmin">
  Order Deny,Allow
  Deny from all
  Allow from 127.0.0.1
</Directory>

Alias /phpmyadmin /var/www/phpMyAdmin
Alias /phpMyAdmin /var/www/phpMyAdmin
Alias /mysqladmin /var/www/phpMyAdmin

[centos] リポジトリ epel と remi と rpmfoege を追加する。


リポジトリ epel と remi と rpmfoege をダウンロードする。
CentOS5
32bitの場合
wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/5/i386/epel-release-5-4.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
リポジトリを追加。
rpm -Uvh epel-release-5-4.noarch.rpm 
rpm -Uvh remi-release-5.rpm 
rpm -Uvh rpmforge-release-0.5.2-2.el5.rf.i386.rpm

64bitの場合
wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/5/x86_64/epel-release-5-4.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
リポジトリを追加。
rpm -Uvh epel-release-5-4.noarch.rpm 
rpm -Uvh remi-release-5.rpm 
rpm -Uvh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

CentOS6
32bitの場合
wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/i386/epel-release-6-7.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
リポジトリを追加。
rpm -Uvh epel-release-6-5.noarch.rpm 
rpm -Uvh remi-release-6.rpm 
rpm -Uvh rpmforge-release-0.5.2-2.el6.rf.i686.rpm

64bitの場合
wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-5.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
リポジトリを追加。
rpm -Uvh epel-release-6-5.noarch.rpm 
rpm -Uvh remi-release-6.rpm 
rpm -Uvh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

リポジトリを無効化する。
vi /etc/yum.repos.d/epel.repo
enabled を 0 にする。
vi /etc/yum.repos.d/rpmforge.repo
enabled を 0 にする。

2012年3月15日木曜日

[centos][php] centos5にphp 5.2.17のインストール

リポジトリキーのインストール
rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
リポジトリの作成
vi /etc/yum.repos.d/utterramblings.repo
[utterramblings]
name=Jason’s Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=0
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
phpのインストール
yum --enablerepo=utterramblings install php-devel php-mysql php-mcrypt php-ncurses php-xml php-gd php-pear php-mbstring
apache と mysql もインストール
yum --enablerepo=utterramblings install httpd-devel mysql-server

[webmin][centos] webminのインストール。

yum -y install perl-Net-SSLeay
wget http://prdownloads.sourceforge.net/webadmin/webmin-1.580-1.noarch.rpm
rpm -ivh webmin-1.580-1.noarch.rpm
vi /etc/webmin/miniserv.conf
allow=127.0.0.1 10.0.0.0/24
/etc/rc.d/init.d/webmin restart 

2012年3月7日水曜日

[centos] logの削除

logを削除する場合はsyslogも再起動する。
例えばmaillogを削除するとすると、
MTAサービスをストップ。
maillogを削除。
syslogを再起動。
MTAサービスをスタート。
# service postfix stop
# rm -f /var/log/maillog
# service syslog restart
# service postfix start
となる。

2012年3月5日月曜日

[centos] Another app is currently holding the yum lock; waiting for it to exit

yumを使っていて
"Another app is currently holding the yum lock; waiting for it to exit"が
何度も表示されて困る場合
/var/run/yum.pid ファイルを削除すると良い場合がある。

rm -f /var/run/yum.pid

2012年2月20日月曜日

RubyGemsのダウングレード

gem update --system 1.6.2
http://rubyforge.org/projects/rubygems/ダウンロード で存在するバージョンを調べて

[cakephp] DebugKitとQdmailを併用するときの注意

$this->Qdmail->cakeText()を使うとエラーが出る。 Fatal error: Class 'DebugKit.Debug' not found in /home/example/cakephp/app/controllers/components/qdmail.php on line 3821 Qdmailを呼ぶ前に$this->view = 'View'; をセットして強制的にQdmail側のエラーを防ぐ。

2012年2月14日火曜日

[centos] iptables 簡単設定

system-config-securitylevel
を使う。
プロトコルとして定義されていない任意のポートを開放する場合は、[その他のポート] にポート番号とプロトコル(tcp or udp)を "PortNumber:Protocol" の書式で設定する。
複数のポートを開放する場合の例は以下の通り。スペースをデリミタとする。
webminは10000:tcp tcpの時は無くてもOK
samba SWAT は 901:tcp
"system-config-securitylevel" ユーティリティーを利用すれば、"iptables" を手動で再起動する必要はない。

centos 6.xからはsystem-config-firewall-tuiに変わったので注意。

2012年2月10日金曜日

スドの設定

sudoers の編集は visudoを使います。
書式は ≪ユーザー≫ ≪ホスト≫ = (権限) ≪コマンド≫
hoge ALL=(root) /sbin/reboot
hoge ALL=(ALL) ALL 
hoge ALL=(ALL) NOPASSWD:ALL 

● コマンドの指定 実行を許可するコマンドはフルパスで指定する。
ディレクトリのみ指定すると、指定したフォルダの直下にあるコマンド全てを許可する。
ディレクトリ名の最後には、必ずスラッシュを付ける。 ただし、/foo/と指定した場合、/foo/bar/・/foo/bar/baz/などのサブディレクトリの下のコマンドは実行されない。

 ● 引数の制限
hoge ALL=(root) /sbin/shutdown 

のようにコマンド名のみを指定すると、shutdownコマンドに渡す引数はユーザーが自由に決められる。
hoge ALL=(root) /sbin/shutdown -r 

と引数を記述した場合は、 -r の後に別の引数を渡すことができない。 後続の引数を許したい場合は、
hoge ALL = (root) /sbin/shutdown -r * 

ワイルドカードを使うとよい。引数を使用させたくない場合は
hoge ALL = (root) /sbin/reboot "" 

"" を指定する ● パスワード入力 パスワード入力なしで実行させたいコマンドは
hoge ALL=NOPASSWD: /sbin/pkg_add

2012年2月6日月曜日

IEだけに表示させる。


<!--[if 条件式]>
(中身)
<![endif]-->

IE6 IE6だけで見える。
gte IE7 IE7以上で見える。
gt IE6 IE6より上のバージョンで見える。
lte IE6 IE6以下で見える。
lt IE7 IE7未満で見える。
!IE6 IE


<!--[if lte IE 6 ]>
<link rel="stylesheet" type="text/css" href="ie6.css">
<![endif]-->
IE6以下に反映される。

これはHTML文法上はエラーであるがこんなものもある。
<![if !IE ]>
   <p>この表示はIE以外のブラウザで見えます。</p>
<![endif]>

リンク画像の枠線を消す

<a><img /></a>とした場合ブラウザによっては画像の周りに青い枠がついてしまう。
これを取り除くには、スタイルシートの上の方に以下のスタイルを追加する。

img { border-style:none; }

a img { border-style:none; }

2012年1月25日水曜日

jquery 印刷ボタン

http://snippet-editor.com/2010/08/2way-print-css.html


$(document).ready(function(){
 $(".printer").click(function(){             // 印刷ボタンが押されたら
  $("body").addClass("print");            // body classに"print"を追加
  window.print();                         // 印刷を実行
  var timeout = setTimeout(function(){
   $("body").removeClass("print");     // body classから"print"を削除
  }, 1000);
  return false;                           // 終了
 });
});
  • 印刷しないパートをdisplay: none;で消す
  • 印刷するパートから不要なfloatなどを解除
  • 白い紙に印刷されることを踏まえて文字や背景などを調整
しておきます。ここまでは普通のprint.cssのやり方です。ここからさらに、
  • print.cssの内容全体を@media print { }でくくる
  • print.cssの各行の先頭にbody.printを追加する
この2点を加えることで、ここで記述した内容は画面表示には一切影響を与えなくなり、且つ、body classに"print"が付いていない場合はスタイルが適応されることもなくなります。

<p class="button"><a href="#null" class="printer scroll-off"><span>印刷ボタンのテスト</span></a></p>

php mysqlのdatetime型をformat

echo date('D, d M Y H:i:s', strtotime('2011-12-06 14:51:12');

>Tue, 06 Dec 2011 14:51:12

echo date('r', strtotime('2011-12-06 14:51:12');

>Tue, 06 Dec 2011 14:51:12 +0900

http://php.net/manual/ja/function.date.php

2012年1月20日金曜日

webmin SSH/Telnet Login のポートを変えるとか

Others
    + SSH Login

Module Configをクリックする
port to connect to を利用しているポートナンバーに変更して保存する。