Monthly Archives: 10月 2008

MySQLでテーブルをコピー&リネーム

1
Filed under MySQL, SQL
Tagged as ,

MySQLを利用していて、テーブルをリネームしてみたくなったり、
コピーしてみたくなったりすることがありますよね。

なので、一応まとめときます。

【テーブルリネーム】

RENAME TABLE before_table_name TO after_table_name;

例:
  変更前のテーブル名が 「tec」 で
  変更後のテーブル名を 「log」 にしたい場合には、

RENAME TABLE tec to log;

次に特定のテーブルをコピーしたい場合です。

【テーブルコピー】

CREATE TABLE new_table AS SELECT * FROM old_table;

例1:
  コピー元のテーブル名が 「apple」 で
  コピー先「新規作成」のテーブル名が 「melon」の場合には、

CREATE TABLE melon AS SELECT * FROM apple;

例2:
特定の条件のもののみコピーしたい場合には WHERE句で指定して
  コピーすることもできます。

  コピー元のテーブル名が 「all」 で
  コピー先「新規作成」のテーブル名が 「now」で
  「Year」カラムが「2008」のもののみ抜き出す場合には、

  CREATE TABLE now AS SELECT * FROM all WHERE Year = ’2008′;

というような形になりますね。

ということで、久々の更新はこんな感じで。

MySQLのおすすめ書籍


ZendFrameworkでViewがないとエラーになりますよ。

3
Filed under php, Zend Framework
Tagged as

Hello Worldみたいな単純な表示すらでなかったら、ショックをうけますね。

ということで、ZendFrameworkで以下のエラーがでたので、
一応コメントを残しておく。

エラーは、Apacheのerror_logに出力されてました。
標準出力的には、まっ白い画面でした。

PHP Fatal error: Uncaught exception ‘Zend_Controller_Dispatcher_Exception’ with message ‘Invalid controller specified (error)’ in /usr/share/pear/Zend/Controller/Dispatcher/Standard.php:249\nStack trace:\n#0 /usr/share/pear/Zend/Controller/Front.php(914): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))\n#1 /public_htmlまでのPATH/index.php(14): Zend_Controller_Front->dispatch()\n#2 {main}\n thrown in /usr/share/pear/Zend/Controller/Dispatcher/Standard.php on line 249

【原因】
該当のControllerに対応したViewが存在しない場合などに表示されるようです。
他にも要因はあるんだろうけど、今回はこれでした。

/(APP用フォルダ)/controllers/IndexController.php (indexActionだったら)

が利用されている場合には、以下のViewを呼びにいくわけです。

/(APP用フォルダ)/views/scripts/index/index.phtml

要するに、
/(APP用フォルダ)/views/scripts までは固定で
index が Controllerの名前と紐づき、
index.phtml がActionの名前と紐づくわけですね。

まあ、僕のは、scriptsフォルダがなかったわけですが・・・・
初歩の初歩。 間違いとしては、下の下ですね。

※自動でレンダリング?しないようにしている場合には、大丈夫だと思う。

ZendFrameworkのおすすめ書籍


pearでSmarty & ZendFrameworkインストールする。

10
Filed under php, Smarty, Zend Framework
Tagged as , , ,

もともとSmartyは使ってたんですが、
Zend Frameworkも勉強を始めました。

ということで、面倒なくインストールする方法を書いておきます。
やっぱりphpまわりは、pearでインストールできると楽ですよね。

ということで、SmartyとZend Frameworkのpearでの設置方法です。

## Smarty

pear list
pear list-channels
pear channel-discover pearified.com
pear install pearified/Smarty
pear list-channels
pear list

## Zend Framework

pear list-channels
pear channel-discover zend.googlecode.com/svn
pear install zend/zend
pear list-channels

ただ、これをやっても、pear list で一覧に出てきません。。
どうしたらいいんでしょうね。。

この辺は、また何かわかったら、追記することにします。

ZendFrameworkのおすすめ書籍


perlとかシェルスクリプトとかでメールを送る

0
Filed under perl, シェルスクリプト
Tagged as , ,

ちょっとしたことでメールをしたいときに、
シェルスクリプト(shellscript) とかパール(perl)とかで
メール配信・送信をする訳ですが、以下のような感じでできるのでメモ。

【シェルスクリプト】

#!/bin/sh

wToAddress=”test@test.com”

f_SendMail(){
wToAddress=$1
wSubject=$2
wMsg=$3

echo $wMsg | mail -s “${wSubject}” “${wToAddress}”
}

f_SendMail “${wToAddress}” “Test Subject.” “Test Mail Message.”

exit

【perl】

#!/usr/bin/perl

my $sendmail = ‘/usr/sbin/sendmail’;
my $nkf = ‘/usr/bin/nkf’;

open(SENDMAIL,”| $nkf -j | $sendmail -t -i”);

print SENDMAIL <<'END';
From: test@test.com
To: test_to@test.com
Subject: テストサブジェクト

テストメッセージ

END

close(SENDMAIL);

みたいな感じですね。
シェルスクリプトのほうも、たぶんnkfかませば、日本語いけると思う。
前にやってたような気がするけど、記憶がないので。。

SambaでUnixユーザ認証のファイルサーバを。

0
Filed under Samba
Tagged as ,

Samba(今回はyumで入れた3.0.28-0.el4.9)を利用して、
各Unixアカウントのファイルサーバを作ろうと思ったわけですが、
かるくはまったので、メモしとく。

作りたい要件としては、
 ・Unixユーザ(/etc/passwd)のデータを利用する。
 ・IPでアクセス制限を行う。(自分のPCからのみ自分の領域に入れる)
 ・接続したら、自分のUnixユーザでファイル作成等ができる。
というあたりを考えてました。

で、最初にためして、ダメだったのが、以下のような書き方。

[test]
path = /home/test
guest account = test
writeable = Yes
guest ok = Yes
hosts allow = 192.168.0.200
hosts deny = ALL
security = SHARE

192.168.0.200からのみアクセスできて、
ゲストアカウントで入らせるけど、
ゲストアカウントは、testユーザですよ。
みたいにしたかったわけですが、
これでは、書き込みができませんでした。

なぜかというとglobal側で設定している(もしくはdefaultのnobody)で
処理を行おうとしてしまう為。

そこで、以下のような方法に切り替えました。

[test]
path = /home/test
force user = test
writeable = Yes
read only = No
guest ok = Yes
hosts allow = 192.168.0.200
hosts deny = ALL
security = SHARE

これでうまく成功したわけです。
簡単に説明しておくと、

[test]

これはWindowsのExplorerとかでアクセスしたときに表示される
TOPのフォルダ名になります。

path = /home/test

これは、SambaでアクセスできるTopディレクトリの指定になります。

force user = test

これは、この設定の領域にアクセスする際には、絶対testユーザでアクセスされる
という指定になります。

writeable = Yes
read only = No

この辺は、書き込み権限についてです。
書き込みを許可して、読み込みのみではない。と指定してます。

guest ok = Yes
hosts allow = 192.168.0.200
hosts deny = ALL
security = SHARE

あとは、接続元の制限・アカウントの制限になります。
ゲストユーザで接続でき、パスワードなしでいけます。
かつ、IP制限がかかってます。

という感じで、やりたいことを実装できたのでした。

おしまい。

CGI版PHPについて

0
Filed under php
Tagged as , , , ,

モジュール版ではなく、CGI版のPhpを使う場合、
(レンタルサーバを利用中でCGI版になってる場合)には、
特に何も設定をしなかった場合には、
phpの環境変数(php.iniで設定されてるもの)を変更できない。

モジュール版の場合には、.htaccessに「php_value」を書いてみたり
phpのソース(たとえばtest.phpみたいな)ものの中で「ini_set」をして
設定を上書きすることができる(1部の設定を除く)わけですが、
CGI版ではできないようですね。

phpinfoでみても「local」の部分が書き変わってないので、
効いてないってことですね。

実際に試してみましたが、できませんでした。

これを回避する一般的な方法としては、suPHPを利用する形っぽいですね。

詳細は以下のサイトにのってるようですぜ。

FlatEight.com >> FreeBSD/suPHP

MySQLの更新系SQLを省略する(autoExecute)

3
Filed under MySQL, SQL
Tagged as , ,

MySQLでinsertとかUpdateとかするときに、
SQLをかかずにサクサクやる方法があるそうな。
その名も「autoExecute」なり。

Insertしたい場合には、以下のような書き方になるようです。

$test1 = “test”;
$table = “mysql_test_table”

$Connect = DB::connect($Dsn);
if (DB::iserror($Connect)){
die($Connect->getMessage());
}

$Value = array(
‘name’ => ‘hattara’,
‘domain’ => ‘teclog.hattara.info’,
‘col1′ => $test1,
‘col2′ => ‘test2′
);

$Result = $Connect->autoExecute($table, $Value, DB_AUTOQUERY_INSERT);

if (PEAR::isError($Result)) {
die($res->getMessage());
}

$Connect->disconnect();

Updateしたい場合には、以下のような書き方になるようです。

$test1 = “test”;
$table = “mysql_test_table”
$xxxx = “xxxxx”

$Connect = DB::connect($Dsn);
if (DB::iserror($Connect)){
die($Connect->getMessage());
}

$Value = array(
‘name’ => ‘hattara’,
‘domain’ => ‘teclog.hattara.info’,
‘col1′ => $test1,
‘col2′ => ‘test2′
);

$Where = “col1 = ‘abcde’ AND col2 = ‘” . $xxxx . “‘”;

$Result = $db->autoExecute($table, $Value, DB_AUTOQUERY_UPDATE, $Where);

if (PEAR::isError($Result)) {
die($res->getMessage());
}

$Connect->disconnect();

まあ、要するに、

autoExecute(
<テーブル名>,
<変更カラム名と値の連想配列>,
<処理指定>,
< updateならwhereがあれば>
);

となりますね。<処理指定>の場所には、

  insertなら「DB_AUTOQUERY_INSERT」
  updateなら「DB_AUTOQUERY_UPDATE」

が入るわけです。

ただし、残念でならないのが、updateをする場合に、where句を指定できるのですが、
これがプレースホルダに対応していない。
なので、上記のwhereの部分で、変数部分にはエスケープ処理を入れないといけない。
なんか、あと一味足りない感じですね。

参考元:
「實松アウトプット」さん >> autoPrepareとautoExecuteのwhere句

Cent4&PHP5&Trac&Pythonの甘い罠

0
Filed under Apache, Cent, Linux, php, python, Trac
Tagged as , , , , ,

Cent4(CentOS4)系でTrac(Python&Sqlite)を使う場合に、
PHP5を利用していると、(pdo_sqlite)がconflict?するようで、
TracかPhpかどちらかしか動作しなくなる。

具体的には、yum版のApache2とかだと、
/etc/httpd/conf.d/php.conf とかで以下の記述がある場合、
Tracが動かなくなる。

LoadModule php5_module modules/libphp5.so

具体的には、ブラウザ上では、500エラーになり、
エラーログでは、以下のような出力がたくさんでる。

PythonHandler trac.web.modpython_frontend: DatabaseError: unsupported file format

で、上記のLoadModuleをコメントアウトすると、Phpは動かなくなるが、
Tracは動くようになる。

ということで、PhpでSqliteを使う予定がなければ、
以下のようにpdo_sqlite.iniを適当な名前にリネームしてあげればよし。

mv -i /etc/php.d/pdo_sqlite.ini /etc/php.d/pdo_sqlite.ini_org

その後、Apacheの再起動をお忘れなく。
yum版(rpm)のApacheの場合には、

/usr/sbin/apachectl restart

とかでいいですね。

で、以下のサイトを参考にさせてもらいました。

Ryuzee.com >> CentOS4でPHP4から5にするとTracが動かなくなる

言語ごとの真偽値について

0
Filed under perl, php, シェルスクリプト
Tagged as

ちょっと以前から困惑しているのが、
スクリプト実行後の「返り値」といいますか「ステータスコード」といいますか
「戻り値」といいますか、、 「真偽値」といえばいいですかね。

これが、言語によって違うわけですよ。
単純に脳みその中でおかしなことになります。

今まで自分がやってきたものでいえば、以下の3つしかないわけですけど、
3つでも脳みそがおかしくなります。

 シェルスクリプト : 0:真 1:偽
 perlスクリプト  : 0:偽 1:真
 phpスクリプト   : 0:偽 1:真

となっているわけですよ。

まあ、シェルスクリプトだけ違うと思えばいいのですが、
シェルとかコマンドライン操作を多くしていた為に、
ちょくちょく間違えます。 こまりものですね。
全部揃えてくれたらいいのに・・・

pythonとかrubyとかはどうなってるんだろ。
気が向いたら調べて追記しようと思う。

レンタル E-Mobile ありました!!

0
Filed under Network
Tagged as , ,

ちょっと重宝するので、コメント。
まあ以前から周りでチラホラとE-Mobileの良さについて
色々聞いてるわけですが、2年契約はしたくないわけですよ。

今現時点で2年契約に至る決定打がないからです。
利用可能範囲的に、カバーしきれていない。
携帯にしても、機種が多くない。

できればWindows&PCキー配列&ワンセグ&カメラがほしい。
今のところ、どこにもない。

ということで、短期的にE-Mobileを利用したいと思ったら、
こんなんありました。

biglobe提供のレンタルE-Mobile「BIGLOBE高速モバイル」です。
今なら、契約手数料とられるけど、初月無料で、
その後8ヶ月間は2段階プランだったら990円/月からでいけます。



まあこれくらいなら、とりあえず持っててもいいなと思って
契約してみました。

まあ、使えますね。
ちょっと出先で調べものしたいときとかいいっすね。
これまではMacBookだったけど、これから軽いU100でサクサクです。

たぶん前職の影響が大きかったんでしょうね。
外でもネットできる環境がほしいと思うのは。。

これで年末年始に自分の不始末で何かあっても、外からリカバれるかも。
まあ、不始末がないようにキッチリ仕事するつもりですけどね。