Home > Tags > PHP
PHP
文字化けが発生しないか調べる時に入力する文字達
- 2009/02/09
- Web開発関連
symfony × MySQL × Shift_JIS: 0×5c関連
symfonyで作成したテスト用アプリケーションで「ソ」一文字を登録。
PHPで名前を扱う場合、文字コード指定に注意が必要 – Affirmative Way
たつさき – Google 検索
髙(はしごたか), 﨑(たつさき)
symfonyでモバイル開発する際に参考になるだろうリンク
- 2009/02/08
- Web開発関連
モバイル開発@symfony :: handsOut.jp がかなり良い感じ。以下コードを引用してみる。
apps/app_name/config/filters.yml
web_debug: ~
security: ~
# generally, you will want to insert your own filters here
mobile:
class: myMobileFilter
cache: ~
common: ~
flash: ~
execution:
apps/app_name/config/autoload.yml
PEAR:
name: PEAR
files:
Net_UserAgent_Mobile: /path/to/Net/UserAgent/Mobile.php
myMobileFilter.class.php (抜粋)
// preFilter
$request = $this->getContext()->getRequest();
$response = $this->getContext()->getResponse();
if ($this->isFirstCall()) {
$agent = @Net_UserAgent_Mobile::singleton();
switch (true) {
case $agent->isDoCoMo():
$carrier = 'docomo';
$response->setContentType('application/xhtml+xml; charset=Shift_JIS'); // 出力ヘッダを指定
$response->addStylesheet('/path/to/docomo.css'); // キャリア別のスタイルシートを指定
break;
case $agent->isEzweb():
$carrier = 'ezweb';
$response->addStylesheet('/path/to/ezweb.css'); // キャリア別のスタイルシートを指定
// 中略
}
$request->setAttribute('agent', $agent);
$request->setAttribute('carrier', $carrier);
// sfPictogramMobilePlugin
$pictogram = sfPictogramMobile::factory($carrier, 'utf8');
$request->setAttribute('pictogram', $pictogram);
}
$filterChain->execute();
// postFilter
$content = $response->getContent();
$content = $request->getAttribute('pictogram')->replace($content);
// 出力前に CSS をインライン展開
if ($request->getAttribute('carrier') == 'docomo') {
$content = HTML_CSS_Mobile::getInstance()->setBaseDir('/path/to/doc_root')->apply($content);
}
$response->setContent($content);
}
apps/app_name/templates/layout.php (抜粋)
<html xmlns="http://www.w3.org/1999 /xhtml" xml:lang="ja" lang="ja">
<head>
apps/app_name/templates/_dtd.php
<?php case 'docomo': ?><?php echo '<'; ?>?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC "//imode group (ja)//DTD XHTML iXHTML(Locale/Ver.=ja/1.1) 1.0//EN" "ixhtml_4ja_10.dtd">
<?php break; ?>
<?php case 'ezweb': ?>
<?php echo '<'; ?>?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC "//OPENWAVE//DTD XHTML 1.0//EN" "http://www.openwave.com/DTD/xhtmlbasic.dtd">
// 以下略
他にも helper を使って、mailto や input 要素の問題などを吸収する方法や、モバイルのセッションを、SessionStorage を使って解決する方法が書いてある。
以下のファイルを作成、編集
apps/app_name/lib/helper/MobileHelper.php
apps/app_name/lib/myMobileFrontController.class.php
apps/app_name/lib/myMobileSessionStorage.class.php
apps/app_name/config/factories.yml
memokami::楽天テクノロジーカンファレンス「PHPで作る携帯サイト」 :: handsOut.jp もすごくいい感じ。
symfony1.2でバッチ処理を作るにはどうすればいいの?
- 2009/01/14
- Web開発関連
symfony1.2 では generate:task コマンドが用意されているのでそれを利用します。
- まず、ジェネレートコマンドでひな形を作る
- execute 関数をカスタマイズする
- バッチ処理を実行する
- 引数を使いたいとき
- 他にも
ジェネレートコマンドを実行すると、
fooSampleTask.class.php というファイルが作成される
<?php
class fooSampleTask extends sfBaseTask
{
protected function configure()
{
// // add your own arguments here
// $this->addArguments(array(
// new sfCommandArgument('my_arg', sfCommandArgument::REQUIRED, 'My argument'),
// ));
$this->addOptions(array(
new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name'),
new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'),
// add your own options here
));
$this->namespace = 'foo';
$this->name = 'sample';
$this->briefDescription = '';
$this->detailedDescription = <<<EOF
The [foo:sample|INFO] task does things.
Call it with:
[php symfony foo:sample|INFO]
EOF;
}
protected function execute($arguments = array(), $options = array())
{
// initialize the database connection
$databaseManager = new sfDatabaseManager($this->configuration);
$connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection();
// add your code here
}
}
『add your code here』の下に実際の処理を記述していきます。
{
// initialize the database connection
$databaseManager = new sfDatabaseManager($this->configuration);
$connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection();
// DB アクセスも普通に使える
$obj = BookPeer::retrieveByPK(3);
var_dump($obj);
// ログも便利
$this->log('処理終了');
}
{
// // add your own arguments here
$this->addArguments(array(
new sfCommandArgument('my_arg', sfCommandArgument::REQUIRED, 'My argument'),
));
configure 関数の先頭のコメントを外すと my_arg 引数が有効になり、execute 関数の引数 $arguments['my_arg'] で利用できるようになります。
symfony/task/project とか
symfony/task/generator とか
symfony のライブラリー内のタスクにサンプルになりそうなファイルがあるので参考にしてください。
symfony のデプロイ方法をためしてみる – jobeet23日目
- 2009/01/12
- Web開発関連
本番アップはいつも FTP でやっているのですが、capistrano とかある程度ツールを使って自動化したいなと前から思っていました。今ちょうど symfony をやっているので symfony のデプロイ方法を試してみました。
- 本番環境チェック
- コアライブラリへのパスを本番に合わせる
- データベースを本番の設定に
- シンボリックリンクなどがあれば固定化する
- エラーページを設定する
- プロジェクトの転送
- 終了。あとこの方法だとサーバ上の不要になったファイルを削除してくれないのでそこは考える必要あり。
実行すると、OK とか Warinig とか表示されるので必要に応じて対応します。APC のインストールとか。これは便利。
php check_configuration.php
require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
本番環境の情報を設定する
[production]
host=www.symfony-project.com
port=22
user=jobeet
dir=/var/www/jobeet/
type=rsync
pass=
転送したくないファイルがあれば設定する
.svn
/web/uploads/*
/cache/*
/log/*
/web/*_dev.php
プレビュー
実際に転送する。rsync が実行される
やっぱり rsync は楽ですね、どのファイルをアップするかとか考えなくてよくて、コマンド一発でデプロイが完了します。注意しないといけないのが設定ファイルを開発用のまま転送すると本番環境が動かなくなることです。この問題も本番反映用のシェルファイルを作れば解決しそうです。
参考
symfony | Web PHP Framework | The Jobeet Tutorial | Day 23: The Deployment
第16章 - アプリケーションの運用ツール
秋元@ずっと雪 » Windows+symfony1.1でproject:deployを動かすためのパッチ
phpフレームワークsymfonyをdreamhostへインストールする方法
- 2009/01/11
- 日記
dreamhost へ symfony をインストールしようと試みました。
- symfony をインストール
- symfony のバージョンを確認(エラーが発生)
- エラーの原因を調査する
symfony 本家から tar.gz のアーカイブを wget で取得して解凍します。
% mkdir -p symfony/vendor
% cd symfony/vendor
% wget http://www.symfony-project.org/get/symfony-1.2.2.tgz
% tar zxvf symfony-1.2.2.tgz
% vendor/symfony-1.2.2/data/bin/symfony -V
Parse error: syntax error, unexpected T_OBJECT_OPERATOR in
dreamhost の wiki を検索すると、symfony についてのページがあるので参考にする。(dreamhost で困ったらとりあえず wiki で検索する。)
原因はパスの設定のようなので対応
これで正常に動く
symfony version 1.2.2
複数バージョンの php の共存
libphp5.so
libphp5.so.with-pdo
libphp5.so.without-pdo
みたいにして、libphp5.so を手動で切り替えて apache 再起動すると pdo なしとありで切り替わる。
と思ったけどなんか切り替わらないこともある。。
symfony Call to undefined function mysql_escape_string
symfony1.1 で symfony propel-build-sql を実行すると以下のエラーが発生。
symfony Call to undefined function mysql_escape_string
php mysql を pdo なしでインストールすると直った。
symfony 1.1 + sfGuardPlugin で You must specify a “moduleName” エラー
sfGuardPlugin をインストールして、security.yml をオンにするとパースエラーが発生する。
Notice: Undefined offset: 1 in /Users/xxx/svn/symfony/vendor/pear/php/symfony/config/sfGeneratorConfigHandler.class.php on line 69
[sfParseException]
You must specify a "moduleName".
#1561 - symfony - Trac
には対応したのでまた別のバグの問題。
仕方がないので symfony をデバッグすると原因を発見!!
上記のように sfGuardAuth の config ディレクトリに空の generator.yml を作ると動くようになった。
本当は他の直し方がある気もするけど、とりあえず今はこれで解決。
こんな現象、日本・海外探しても何の情報もなかった。なぜおれだけ。。。
symfony 1.1 の my first symfony project でバグ
- 2008/11/09
- 日記
My first symfony projectの generator.yml を使って管理画面を生成しようとするところで以下のようなエラーが発生する。
[sfParseException]
You must specify a "moduleName".
調べると symfony のバグだった。
以下のように対応。
===================================================================
--- vendor/pear/php/symfony/config/sfGeneratorConfigHandler.class.php (リビジョン 76)
+++ vendor/pear/php/symfony/config/sfGeneratorConfigHandler.class.php (作業コピー)
@@ -65,7 +65,7 @@
$generatorParam = (isset($config['param']) ? $config['param'] : array());
// hack to find the module name (look for the last /modules/ in path)
- preg_match('#.*/modules/([^/]+)/#', $configFiles[0], $match);
+ preg_match('#.*/modules/([^/]+)/#', $configFiles[1], $match);
$generatorParam['moduleName'] = $match[1];
はじめての symfony
symfonyのインストール手順 : tech.kayac.com - KAYAC engineers' blogを見てはじめての symfony をセットアップ。
Subversion設定の標準化に合わせて、subversion の conf ファイルを修正。
php のコンパイルオプションは以下を参照。xsl と zlib が必要。
symfony - PukiWiki
※xsl がないと symfony propel:build-model などのコマンドが失敗する
※zlib がないと plugin をインストールする際に tgz が展開できない
ホーム > タグ > PHP