PHPの最近のブログ記事

【5月15日開催】セミナー情報

PHP & Windows コラボレーションセミナー Vol.2

○開催日時
2010 
年 5 月 15 日(土曜日)

○開催場所

マイクロソフト 新宿オフィス 5階セミナールームD

151-8583 東京都 渋谷区 代々木 2-2-1 小田急サザンタワー


○開催概要

本セミナーシリーズではマイクロソフト株式会社のエバンジェリスト奥主さまと弊社柏岡よりPHP を利用しようと思っていらっしゃる皆様に PHP と Windows のコラボレーションによる様々な技術情報の共有を行っていきます。


第二回である今回は、スペシャルゲストとして株式会社クリスク中島 奉文様 をお迎えします。今回のテーマは SEO です。


○セッション予定

12:30- 13:00 開場

13:00- 13:10 本日の進行ご紹介  

13:10- 14:00 Windows + IIS で便利に使える SEO Toolkit 概説(マイクロソフト株式会社奥主洋)

14:00- 14:10 休憩  

14:10- 15:10 WordPressでSEOに有効なサイト構築 (有限会社アリウープ 柏岡 秀男 様)

15:10- 15:20 休憩  

15:20- 16:20 仮)(SEO と検索サイト)(株式会社クリスク 中島 奉文様)

16:30- 17:00 Q&A、まとめ、今後について

17:00- 18:00 懇親会


■ 主催:

マイクロソフト株式会社


■ 共催 および 開催協力:

有限会社アリウープ

株式会社 クリスク


■ 参加費用:

無料


■ 受講対象者:

PHP初心者でお持ちのWindows環境を活用されたい方、WordPressなどのCMSに興味をお持ちの方、PHPを多く利用なさっている方


■ 定員 40 名(定員になり次第、登録締切となります)

・会場規模の確認のための事前登録となりますので、登録ボタンをクリックし、必要事項をご記入ください。

・登録済みイベントの確認/キャンセルは、下記「マイ イベント」サイトからご自身で行ってください。

http://msevents.microsoft.com/CUI/default.aspx?culture=ja-JP

登録・詳細

o2010年3月2日 13:00 TKP 代々木ビジネスセンターにて
PHPxWordPressxWindows/Azureセミナー行います。

LAMPが代表的なPHPですが、近年Windows環境でも安定して稼働できるようになっています
また人気のブログシステムWordpressもPHPで作成されているということで
マイクロソフト株式会社様とコラボレーションセミナーを開催いたします

開催要項を以下に引用いたします

2010年3月2日 13:00 - 2010年3月2日 18:00
受付開始時間: 12:30

TKP 代々木ビジネスセンター

日本
東京都 渋谷区代々木1-28-25

イベントの概要

【PHP & Windows コラボレーションセミナー Vol.1】

開催場所

TKP 代々木ビジネスセンター 1号館 2階 12A
〒151-0053 東京都渋谷区代々木1-28-25

開催概要

PHP が Windows に搭載されている IIS Webサーバーで動作するのを皆さんご存知でしょうか? マイクロソフトでは様々な取組みを PHP コミュニティともグローバルに行い始めています。本セミナーシリーズでは PHP を利用しようと思っていらっしゃる皆様に PHP と Windows のコラボレーションによる様々な技術情報の共有を行っていきます。

第一回である今回は、PHPコミュニティから 柏岡 秀男様、WordPressのコミュニティからマクラケン直子様 にご参加いただき、PHP・WordPress・Windows の最新状況をお話いただきます。また、PHP と Windows の近況に関して 通常の Windows 上でのPHP 利用に関してエバンジェリスト 奥主、Windows Azure上でのPHP 利用に関してエバンジェリスト井上がお話させていただきます。

セッション予定

12:30- 13:00 開場
13:00- 13:10 本日の進行ご紹介 
13:10- 14:00 仮題)PHP on Windowsの近況(マイクロソフト株式会社 奥主 洋)
14:00- 14:10 休憩 
14:10- 15:10 仮題)PHP入門(有限会社アリウープ 柏岡 秀男 様)
15:10- 15:20 休憩 
15:20- 16:20 仮題)PHP on Azure(マイクロソフト株式会社 井上大輔)
16:20- 16:30 休憩 
16:30- 17:30 仮題)WordPress 最新状況(米国 Automattic社 マクラケン 直子 様)
17:30- 18:00 Q&A、まとめ、今後について

■ 主催:
マイクロソフト株式会社

■ 共催 および 開催協力:
有限会社アリウープ

■ 参加費用:
無料

■ 受講対象者:
PHP初心者でお持ちのWindows環境を活用されたい方、WordPressなどのCMSに興味をお持ちの方、PHPを多く利用なさっている方

■ 定員 100 名(定員になり次第、登録締切となります)
事前登録が必要となります、ご協力お願いいたします
登録の仕方の解説と概要は下記より
http://blogs.technet.com/hirookun/archive/2010/02/26/3315396.aspx




最近は全部UTF8で作成しちゃってて
PHPも文字コードの扱いが良くなっていたので
全然気にしなくなってしまったのですが
引き継いだ環境で表の文字がエスケープされてしまう
状態になったので変換が必要でした

PHP側とMySqlの文字コードが同一の場合意識しなくていいのですが
違う場合はコネクトした後に

set names ujis

等のクエリを発行する必要があります
EUCの場合 ujis
SJISの場合 sjis
UTF8の場合 utf8
を指定して

mysql_query("SET NAMES ujis")
のように指定する必要があります

一つのフィールド等をプログラム上で変更する場合は
mb_convert_encoding($str,'UTF8','SJIS')
のように行います
この場合はSJISの入力をUTF8に変換する
SJISよりもSJIS-winを設定する方が良い場合があります

またMySqlの設定を見る場合
/etc/my.ini等で設定してありますので
こちらを確認してください

コマンドで確認する場合は
mysql> show create database データベース名;
となります

CodeIgniterは可読性アップのため、ショートタグ使ったりするんですね

引き継いだソースがそうだったので
config.phpの
$config['rewrite_short_tags'] = FALSE;
の部分をTRUEに変更して走らせたところ

libraries/Loader.php(706) : eval()'d code 44
こんなエラーがつらつらと

該当するLoader.phpを見てもその行とか関係ないし

CodeIgniterのユーザガイドを参照してところ

この機能を利用する場合、ビューファイルでPHPエラーが起こったとき、エラーメッセージと行番号が正しく表示されないのに注意してください。すべてのエラーは、eval() を実行したときのエラーとして表示されます。

との記述が

ん~仕様なんですね、ショートタグをCIで有効にすると使うとエラー表示おかしくなるって

これだと困るので、さっきのconfig.phpは元に戻して
このプロジェクトのみ.htaccessにて
<IfModule mod_php5.c>
php_flag short_open_tag on
</IfModule>
と設定して逃げることとしました。

開催告知されました

今年は初の2DAYS
ビジネスDAYとテックDAYの二本立てです
会場は初日と二日目で違うので注意してください

情報も随時アップデートされます
http://phpcon.php.gr.jp/2009/
PEAR::AUTHを利用して認証をするときに
動作の確認をしたい場合
PEARのマニュアルのサンプルが非常によいので参考に
pear install Auth
pear install Log

あたりをインストールして


<?php
require_once "Auth.php";
require_once
'Log.php';
require_once
'Log/observer.php';

// ログイン画面を表示するコールバック関数
function loginFunction($username = null, $status = null, &$auth = null)
{
    
/*
     * HTML 出力を変更し、作成するアプリケーションに
     * あわせるようにします
     */
    
echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">";
    echo
"ユーザ名: <input type=\"text\" name=\"username\"><br/>";
    echo
"パスワード: <input type=\"password\" name=\"password\"><br/>";
    echo
"<input type=\"submit\">";
    echo
"</form>";
}

class
Auth_Log_Observer extends Log_observer {

    var
$messages = array();

    function
notify($event) {

        
$this->messages[] = $event;

    }

}

$options = array(
        
'enabelLogging' => true,
'wsdl' => 'http://SOAPのURL/Login?wsdl',
'method' => 'loginメソッド',
'usernamefield' => 'user_idのフィールド名',
'passwordfield' => 'passwordのフィールド名',
'matchpasswords' => false,
'_features' => array(),

        );
$a = new Auth("Array", $options, "loginFunction");

$infoObserver = new Auth_Log_Observer(PEAR_LOG_INFO);

$a->attachLogObserver($infoObserver);

$debugObserver = new Auth_Log_Observer(PEAR_LOG_DEBUG);

$a->attachLogObserver($debugObserver);

$a->start();

if (
$a->checkAuth()) {
    
/*
     * サイトに出力する内容をここに書きます
     */
    
print "認証に成功しました。<br/>";
}

print
'<h3>ログ出力</h3>'
    
.'<b>PEAR_LOG_INFO レベルのメッセージ</b><br/>';

foreach (
$infoObserver->messages as $event) {
    print
$event['priority'].': '.$event['message'].'<br/>';
}

print
'<br/>'
    
.'<b>PEAR_LOG_DEBUG レベルのメッセージ</b><br/>';

foreach (
$debugObserver->messages as $event) {
    print
$event['priority'].': '.$event['message'].'<br/>';
}

print
'<br/>';
?>

こんな感じでログが見れる
場合によってログアウト画面を作成したりしてテストすると良い

前の記事でも書いたのですが
SlavePNEでもオープン制SNSの設定を行おうと思いました。
webapp_ext/にinit.incを作成して
//define('IS_CLOSED_SNS', true);
とコメントアウトするも、一向に新規登録リンクできません
すぐにリダイレクトされてしまう、前の状況のままでした......

また、順にどこでIS_CLOSED_SNSの値が1になっているか追いかけたところ
再びinit.incにたどり着きました。

どこかの設定でしょうか?他のスクリプトはwebapp_extで動くのですが
init.incはききませんでした

webapp/init.incを直接編集したところ
無事、Slave接続でオープン制にすることに成功しました。

まだ、会員登録やら、情報変更やらは外部認証なので作りこまないとですが



[GOLD]php[/GOLD]

OpenPNEをSlavePNEにしてSOAPによる認証を行おうとしてたのですが
新規登録も受け付けなきゃならなくなりました。
SOAPなんで新規登録のフローは作り直さなきゃかなと思ってたのですが
差し当たり、管理画面の招待制の部分を有効にして更新してみました。

新規のリンクは作ってあったので
sns/?m=pc&a=page_o_public_invite
をクリックしてみても再度ログイン画面が描画されてしまいます。

DBのc_admin_configのIS_CLOSED_SNSの部分を見てもちゃんと更新はされているのですが
プログラム上ではこの値が1のままになっていました。。。

grepして探してみるとwebapp/init.inc  の中に

// 外部認証の場合は招待・新規登録はできない
if (OPENPNE_AUTH_MODE == 'slavepne') {
    // 招待用URLがPC・携帯どちらも空の場合は招待不可
    if (!(defined('SLAVEPNE_SYOUTAI_URL_PC') && SLAVEPNE_SYOUTAI_URL_PC) &&
        !(defined('SLAVEPNE_SYOUTAI_URL_KTAI') && SLAVEPNE_SYOUTAI_URL_KTAI)) {
        define('IS_USER_INVITE', false);
    }
    define('IS_CLOSED_SNS', true);
}

なる記述が。。。

既存の会員情報を生かしながら、新規を募集するとややこしくなるとは思ってたのですが
それだったらSOAP等になってる場合って管理画面で変更できないようにするのがいいような......

問題解決までは行きませんでしたが、はまり注意ということで




パーマリンクにて/%postname%/等を設定すると
404 Not Foundになってしまう場合がある
これを解決するためには
htaccessに
php_flag mbstring.encoding_translation off
php_value default_charset "UTF-8″
を設定する必要がある(文字コードにあわせて)

参考:Powershift

これでも日本語タイトルのページはnot foundになってしますので
この場合書くページのスラッグをアルファベット表記にして
回避することが可能
http://kashioka.net/index.php/test/hoge/日本語/のようなURIを使おうとすると
The URI you submitted has disallowed characters.
というエラーが発生した。
パラメタを扱うときに行っている正規化表現に含まれていないため発生してしますようだ
/config/config.php内の
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_-';
の部分を
$config['permitted_uri_chars'] = '一-龠ぁ-んァ-ヴーa-zA-Z0-9a-z 0-9~%.:_-';
と変更し
config.phpファイルに感じを利用したために
nkfにて文字コードをUTF8に変換したところエラーが解消し
利用することが可能となったがURIの仕組みによってまだエラーが出るので
libraries/URI.php
のpregをかけている部分
if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", $str))

if ( ! preg_match("/|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i/u", $str))
としてUTFでマッチさせてみたらエラーには解消された
結構強引に修正してしまったけど
正しい方法はどうなんでしょうか?(汗