2010年8月 9日 (月)

PHPでクラスを使うとき、コンストラクタ宣言は一つだけ!

引数の違いでObject作成の処理を分けようと
Java的に考えて以下のような処理を書いたところエラー発生

    public function __construct(){
    }
    public function __construct($raw_data){
            $this->id        = $raw_data['id'];
            $this->times    = strtotime($raw_data['times']);
            $this->title    = $raw_data['title'];
            $this->body        = $raw_data['body'];
            $this->pass        = $raw_data['pass'];
    }

[Mon Aug 09 15:38:09 2010] [error] [client 114.182.***.***] PHP Fatal error:  Cannot redeclare BordText::__construct() in /******/php/common/BordText.php on line 11

関数の再定義はできないよと・・・
え~引数の数違うじゃん!!とも思ったのですが


    public function __construct(){}
    public function __construct($raw_data = "nodata"){}

となっていた場合識別が不能だからエラーになるのか、
と冷静に考えて納得、引数の数でコンストラクタの初期処理を変える場合
こんな感じでデフォルト値を使って処理を分けるとよいかも…
※PHP初心者のためセオリーは知らん

public function __construct($raw_data = null){
if($raw_data != null){
$this->id = $raw_data['id'];
$this->times = strtotime($raw_data['times']);
$this->title = $raw_data['title'];
$this->body = $raw_data['body'];
$this->pass = $raw_data['pass'];
}
}

2010/08/09 18:55 コメント指摘により印数→引数に修正、ひきすうッて読むらしいよ!みんな知ってた?

| | コメント (2) | トラックバック (0)

2010年8月 5日 (木)

mb_convert_encoding が使えない!?→パッケージインストールが必要

mb_convert_encoding を使ったサンプルコードを実行しようとしたら動かない・・・なんで??
いろいろと検証しているとApacheのエラーログに以下の行を発見

[Wed Aug 04 16:37:37 2010] [error] [client 114.182.254.***] PHP Fatal error:  Call to undefined function mb_detect_encoding() in /********/public_html/php/db.php on line 27, referer: http://*****.com/php/db.php

※この時はmb_detect_encodingを使って文字コードを確かめようとしていた。

関数が[undefined]とな??
あれ??コレ標準の関数じゃないのか??
どうやらPHPでは標準的に使われている関数でもoptional的に
RPMなどのパッケージが分かれているようだ

※ちなみにこの時点でのPHPは yum install php で簡単にインストールしただけ

php-mbstring をインストールしたところ問題なく動作するようになった

| | コメント (0) | トラックバック (0)

2010年8月 4日 (水)

PHP勉強計画

さてはてどんな順序で勉強したものか…
※既に勉強は始めているので時系列は前後しています。

取りあえずServerSideJavaの基礎勉強を後輩にさせたカリキュラムを
そのままPHPでなぞることとする

・環境構築(Windows & Linux)
・Hello World表示
・基礎構文を身につける(roop処理など)
・class作成、継承などを身につける
・フォーム処理
・session 処理
・file データベース I/O
・ファイルアップロード
・メール送信
・メール送信(マルチパート)

・掲示板作成
・BLOG作成
・外部APIの利用-OpenIDあたりが最近は面白いか?
            Twitter APIも捨てがたい

取りあえずココまでやれば基礎の基礎は大丈夫かな??
O/RマッピングってPHPでも一般的なのかな?
Velocityみたいなテンプレート処理はどうなんだろう??
そのあたりは実務始まってからの方が実際に沿った学習ができそう

| | コメント (0) | トラックバック (0)

PHP-SESSIONが使えない!?

あれ??
Windows環境では問題なく使えたSESSION処理がLINUX環境で全く使えない

【詳しい環境】
CentOS5.4
Apache2.2 (yumインストール)
PHP(yumインストール)

phpのrpmパッケージを検査した結果インストールファイルの中に
[/var/lib/php/session/]というディレクトリがあったのだが何故か
apache groupになっていた
※apache (httpd)の実行グループは daemon:daemon

yumで手抜きしてインストールしたのがちゃんと動かない原因(=_=;
ソースインストールしないと何してるか分かんないもんだね
このディレクトリのユーザーgroupを現状の daemonに合わせることで
SESSIONがうまく動くようになった。

| | コメント (0) | トラックバック (0)

PHPの配列はJavaのHashMapに近いかも

PHPの配列は基本 KEY と VALUE の組み合わせとなるようだ

$list = array('AAA','BBB','CCC','DDD');
とすると
$list[0] == AAA
$list[1] == BBB
$list[2] == CCC
$list[3] == DDD
となるがこのとき 配列のINDEXがそのまま KEYになる
KEY:VALUE
0:AAA
1:BBB
2:CCC
3:DDD
ということ、面白いのはHashMapと同じようなINDEX以外のKEYも追加できる

$list = array('AAA','BBB','CCC','DDD');
$list["foo"] = "baa";
だと
0:AAA
1:BBB
2:CCC
3:DDD
foo:baa

確認するにはこんなコード

foreach($list as $key => $val){
echo $key . ":" . $val . "\n" ;
}

| | コメント (0) | トラックバック (0)

2010年8月 3日 (火)

PHPの勉強雑感

PHPメインを宣言されている会社に転職が決まったので
PHPのお勉強をしています。
…orz

結構大変だよコレ
デフォルトの関数が多いんだよなぁ
使っているウチにおぼえるんだろうけど、
目的のない勉強でコレをおぼえるのは結構ホネ
ブツブツいいながらやっております。

| | コメント (0) | トラックバック (0)

2010年6月23日 (水)

IE-Apacheで急にSSLクライアント認証ができなくなった

Apacheを再起動したら急にIEでクライアント認証ができなくなった
Firefoxでは問題なく認証が通る
全く心当たりがない…何で????

いろいろメッセージを拾ってみると
ssl error ログに怪しいログを発見

[Wed Jun 23 13:09:10 2010] [error] SSL Library Error: 336068931 error:14080143:SSL routines:SSL3_ACCEPT:unsafe legacy renegotiation disabled
[Wed Jun 23 13:09:11 2010] [error] Re-negotiation request failed

再交渉リクエストが拒絶??
検索していたところOpenSSLのコミュに解決方法発見

http://www.mail-archive.com/openssl-users@openssl.org/msg60634.html

アップデートでセキュリティー関連の変更があったみたいですね。
コミュにあったとおりApacheの ssl.conf に

SSLInsecureRenegotiation on

の設定を足したところIEでのクライアント認証が通るようになりました。
自動アップデートアクティブにしておくのも考え物だな

| | コメント (0) | トラックバック (0)

2010年6月17日 (木)

JavaScriptで安定したTwitterバッジ(BLOGパーツ)を作る

クライアントにツイメディみたいにTwitterまとめをやりたいと言われた
ツイメディ http://www.ddtpro.com/twimedi/

取りあえず、見積もりを取ってみたが予算オーバーとのこと…
視覚効果はともかくTwitterまとめくらい簡単にできるよ!
とやったことのまとめ

【戦略】
・WEBデザイナがCSSでデザインをいじれるようにJavaScriptで汎用的な出力をする
・Twitterが不安定なので google feed api を使ってキャッシュデータを使う
※最悪Twitterが落ちていても表示可能

<head>に記載する内容

    <script type="text/javascript" src="http://www.google.com/jsapi?key=【取得したGOOGLE API KEY】"></script>
    <script type="text/javascript">
    google.load("feeds", "1");
    function twString(timeline,owner){
        timeline = timeline.replace(/(http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?)/g,"<a href=\"$1\">$1</a>");
        timeline = timeline.replace(/@([\w-]+)/g,"@<a href=\"http://twitter.com/$1\">$1</a>");
        timeline = timeline.replace(/#([\w-]+)/g,"<a href=\"http://twitter.com/search?q=%23$1\">#$1</a>");
        timeline = timeline.substr(owner.length + 1);
        return timeline;
    }
    </script>

表示エリアに記述する内容

    <ul id="feed"></ul>
    <script type="text/javascript">
    function initialize() {
      var feed = new google.feeds.Feed("【TwitterのRSSの URL】");
      feed.setNumEntries(10);
      feed.load(function(result) {
        if (!result.error) {
          var container = document.getElementById("feed");
          for (var i = 0; i < result.feed.entries.length; i++) {
            var entry = result.feed.entries[i];
            var div = document.createElement("li");
            //div.appendChild(document.createTextNode(entry.title));
        var edate = new Date(entry.publishedDate);
        div.innerHTML = twString(entry.title,"sakuraemi") +" at "+ edate.getHours() + ":" + edate.getMinutes() + " " + edate.getMonth() + "/"+edate.getDate()+"/"+(edate.getYear()+1900);

            container.appendChild(div);
          }
        }
      });
    }
    google.setOnLoadCallback(initialize);
    </script>

どうでしょ?
google feed api は更新頻度が低いのが難点ですが、googleにキャッシュされた
RSSデータを利用するためTwitterがどんな状態でもサクサク表示することができます。
解説は…いるかな??
あんまり書くこともない気がしますが、解説欲しい人はコメントください。

| | コメント (0) | トラックバック (0)

2010年4月29日 (木)

openid4javaでax(Attribute Exchange)の日本語の値をとるとエラー

openid4java で ax の値をとると認証ができなくなった。
yahoo も mixi も面白い値がとれるのに…。
どうやら値に日本語があるとダメらしい。

<経過中略>

結論:request.setCharacterEncoding("utf-8");を入れると認証できるようになる。

オリジナルのサンプルコード
http://code.google.com/p/openid4java/wiki/SampleConsumer
↑でいうと

 public Identifier verifyResponse(HttpServletRequest httpReq)
   
{
       
try
       
{
    
httpReq.setCharacterEncoding("utf-8");
    
    ↑↑この位置↑↑

| | コメント (0) | トラックバック (0)

2010年4月22日 (木)

AWStatsのwebminモジュールのACLS(アクセス許可)がうまくいかない

AWStats付属のwebminモジュール awstats-1.8.wbm をインストール
通常なら awstats の権限をACLSでいくつか追加するとこのモジュールが使える
のだけど何故か編集ができない。
編集すると、全ての項目が無効になってしまう・・・。

【環境】
特殊条件:VPS
OS:RHEL5
webmin:1.5

色々調べたのだけどはっきりってよく分からなかったので awstats-1.8.wbm を
テキストエディタで無理矢理開いてみて設定ファイルの位置を特定
設定ファイルを直接 vi で編集した。

アクセス制御の設定ファイルの位置はコチラ
/usr/libexc/webmin/awstats/defaultacl

※言うまでもなく不作法で危険な方法ですので自己責任で編集してください。

| | コメント (0) | トラックバック (0)

«Flashの開発を無料でするときのIDE評価