2008年3月アーカイブ

apache+phpを利用している場合、適切な設定をしていないと、それぞれのバージョンが分かってしまう。

レスポンスヘッダに、

Server: Apache/2.0.52 (CentOS)
X-Powered-By: PHP/4.3.9

のように表示される。

ServerのApacheのバージョンを見えなくしたい場合、
httpd.confの
ServerTokens OS

ServerTokens ProductOnly
に変更

X-Powerd-Byを見えなくしたい場合、
php.iniの
expose_php = On

expose_php = Off
に変更

変更後httpdの再起動が必要。

変更後確認すると、

Server: Apache

しか表示されなくなる。

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
を実行すると、

/etc/mail/sendmail.mc:10: m4: Cannot open /usr/share/sendmail-cf/m4/cf.m4: そのようなファイルやディレクトリはありません

と出る場合、sendmail-cfがインストールされていない可能性がある。

yum install sendmail-cf
でインストール後、再度m4で作成する。

CentOSの4.5はデフォルトでインストールされていませんでした。

Leopardでファインダーから、.htmlのファイルの拡張子を.thtmlに変更しようとした時、.thtml.htmlとなってしまい、拡張子が変更出来なかった。

これを回避する為には、Finderの環境設定の詳細から、「すべてのファイル拡張子を表示」のチェックを付ける事によって、拡張子の変更が行えた。

CakePHPにはapp/views/errors
という、エラーファイルを配置するフォルダがある。

ここに、独自のエラーファイルをおく事が可能。

if (条件分)
{
$this->viewPath = 'errors';
$this->render('エラーファイル名');
exit;
}

の様にすると、呼び出される。

正規の方法がこれであっているかは不明・・・

CakePHP(1.1)で多言語対応してみる。

adminルーティングで振り分けも考えたけれど、ちょっと用途が違うみたい。
ページは、ルーティングで切り替える。

/servie/index
で日本語
/en/servie/index
で英語
を表示したい場合。

app/config/routes.php
に、
$Route->connect('/en/:controller/:action/*', array('controller' => ':controller', 'action' => ':action', '*'));

を追加。

これで
en/service/index
にアクセスすると、
serviceアクションのindexが呼ばれる。

次に、読み込む言語ファイルを設定したいので、
app/config/bootstrap.php
に、
$bits = explode('/', $_GET['url'], 2);
$GLOBALS['lang'] = ($bits[0] == 'en')? 'en' : 'ja';

とグローバル変数に言語変数を入れる。

その言語変数により、各設定ファイルを読み込む。

コントローラーのリダイレクト($this->redirect)を修正

app/app_controller.php
で、redirect関数をオーバーライドする。

function redirect($url, $status = null)
{
if ($GLOBALS['lang'] != 'ja')
{
$url = "/" . $GLOBALS['lang'] . $url;
}

parent::redirect($url, $status);
}


また、テンプレートの各リンクは、htmlヘルパーで、
$html->url()で記述。

app/view/helper/html.phpの、
url()関数の、
if (isset($this->plugin)) {
$base = strip_plugin($this->base, $this->plugin);
} else {
$base = $this->base;
}

の下に、

if ($GLOBALS['lang'] != 'ja')
{
$base .= '/'.$GLOBALS['lang'];
}

を追加。

また、各言語毎にレイアウト/テンプレートファイルがある場合、render関数をオーバーライドする必要がある。

画面のレンダリング時に、適切な言語のテンプレートを読んでくれないので、

app/app_controller
にrender()関数を追加。

function render($action = null, $layout = null, $file = null)
{
if (!$action)
{
$action = $this->action;
}

if (!$layout)
{
$layout = $this->layout;
}

if ($GLOBALS['lang'] != 'ja')
{
$action = sprintf('%s/%s', $GLOBALS['lang'], $action);
$layout = sprintf('%s/%s', $GLOBALS['lang'], $layout);
}
parent::render($action, $layout, $file);
}

これでひとまずは、日本語版と英語版が同じコントローラーで切り替え出来た。

※補足
CakePHPで現在の実行中のアクションの取得は、$this->action
beforeRender()関数で、var_dump($this)を実行すると、色々と出て来た。

Mantisの1.0.7での日本語utf対応は、

config_inc.phpに
$g_default_language = 'japanese_utf8';
を追加。viewやテキストがutf8で表示される。

DB接続部分が設定されていないので、
core/adodb/drivers/adodb-mysql.inc.php
の347行目位の
if ($this->_connectionID === false) return false;
の下に、
mysql_query("SET NAMES utf8", $this->_connectionID);
を追加する。

OSXのMAMPのMySQLのmy.cnfファイルは、
/Applications/MAMP/Library/share/mysql/my-large.cnf
/Applications/MAMP/Library/share/mysql/my-midium.cnf
/Applications/MAMP/Library/share/mysql/my-small.cnf
としてサンプルが3つ配置されているので、

どれかを
/Applications/MAMP/db/mysql
に、my.cnfとリネームして配置する。

who コマンドで可能。

サーバをシャットダウンする時や、何か確認をする時、他の人が操作していないかをチェック出来る。

コマンドラインから、sshで外部サーバに接続し、レポジトリよりデータをエクスポートする場合。

環境変数を設定
export CVS_RSH=ssh

接続
cvs -d ユーザ名@サーバ:CVSレポジトリ export -r タグ名 レポジトリ名

例)
cvs -d user@example.com:/home/cvsroot export -r project_start project

mod_rewriteの設定方法
RewriteCond %{REQUEST_FILENAME} !-f
は、RewriteRuleのファイルが無かった場合。(!が否定 -fがファイルがあった場合)

RewriteRule /test/([0-9a-z]+)\.html index.php?url=$1

は/test/aaa.html
にアクセスがあった場合、 index.php?url=
にaaaを渡す。

.htaccessを利用するため、デフォルトの

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>


AllowOverride ALL
としたが上手く動作しない。

すぐ下に、
<Directory "/var/www/html">
Options FollowSymLinks
AllowOverride None
</Directory>

となっていたから。

http://httpd.apache.org/docs/2.0/ja/mod/core.html#directory

設定は、順番に上から(パス的に)読み込んで行き、一番近いDirectoryの値に上書きされていく。

このアーカイブについて

このページには、2008年3月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2008年2月です。

次のアーカイブは2008年4月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。