2012年8月27日月曜日

IIS 7 (Windows 2008 r2 64ビット) + PHP 5.3 に OCI8 をインストールする

手順自体は、

1) Oracle の HP から Oracle Client Instant をダウンロードする
* ユーザー登録が必要
* OS が 64bit でも PHP の OCI8 を使う場合は 32bit 版のOracle Client Instant (basic) をダウンロードする事!!

2) 適当な所に解凍 (c:/oracle 等)


3) 以下の環境変数に上記 2) の値を追加
Path, NLS_LANG, LD_LIBRARY_PATH
詳しくは PHP のマニュアル参照 http://php.net/manual/ja/oci8.installation.php 


4) php.ini の extension のコメントを外す

extension=php_oci8.dll      ; Use with Oracle 10gR2 Instant Client
extension=php_oci8_11g.dll  ; Use with Oracle 11gR2 Instant Client

5) Windows を再起動して上記 3) の環境変数を反映させる



6) phpinfo 関数などで OCI8 が利用できるか確認。「OCI8」の記述があれば使用できる


[注意]
上記 1) にもあるように PHP で OCI8 関数を使用する場合には Oracle Client Instant は 32bit 版をDLすること!これに気づかず長い事試行錯誤してしまった‥。



2012年5月14日月曜日

PHP 5.3 で CakePHP 1.3 でエラー: DEPRECATED が表示される


cake/libs/configure.php ファイルで error_reporting(E_ALL) 関数の後ろに追加

  error_reporting(E_ALL);

  // 追加
  if (error_reporting() > 6143) {
  error_reporting(E_ALL & ~(E_DEPRECATED|E_STRICT|E_NOTICE));
  }
  // 追加

大体 290~300行目くらい?

2012年4月23日月曜日

ECCUBE 2.11.5 (MySQL) で管理ページにログインできない場合


ECCUBE を開発環境から本番環境にアップした際に、管理ページにログインできなくなってしまった。
ID、PWD は間違っていないのにログインができず非常に困った。

原因は、DB を dump した際の dtb_member テーブルのパスワードと Salt の値が開発環境と異なるためらしい。
以下はその場しのぎ的な処理。
dtb_member の login_id, password, salt を更新する SQL を生成する関数。

function sfGetAuthInfo ($loginid, $password) {
$sql = "";
$result = "";
if ( AUTH_TYPE == 'PLAIN') {
$result = $password;
}
else {
$_tmp = sprintf("%s:%s", $password, AUTH_MAGIC);
$result = hash_hmac(PASSWORD_HASH_ALGOS, $_tmp, AUTH_MAGIC);
}
$sql = sprintf("UPDATE dtb_member SET login_id='%s', password='%s', salt='%s' WHERE id=2", $loginid, $result, AUTH_MAGIC);
return $sql;
}
実行は以下のように実行する。

$loginid = "ログイン名";
$password = "パスワード";
$sql = sfGetAuthInfo ( $loginid, $password )
echo $sql;

上記を ECCUBE 内のどこかのファイル( html/index.php など)で実行し、結果に出力される SQL をMySQL上で実行して、本番環境用のパスワードに書き換える。




2012年4月5日木曜日

Apache の access_log に PHP の情報を表示する

■目的:
自前会員システムの会員毎のアクセスログを収集したい。

■やりたいこと:
Apache の access_log に PHP で取得される一部の変数/セッションを書き出しできるようにしたい。

■ PHP の Apache 関数を使う。
http://jp.php.net/manual/ja/function.apache-note.php


PHP の変数が出力できれば、
acces_log -> シェルで会員ID(上記 apache_note で登録する変数 )毎に集計(cron) -> 集計結果を HTML or DB に出力という流れを試してみる。

2012年3月30日金曜日

ASP.NET ( IBatis.NET ) から SQL Server 2008 への接続について

IBatis.NET にて、

# sqlmap.config

<provider name="sqlServer2.0"/>
<dataSource name="lec2" connectionString="Persist Security Info=False;Data source=(local)\SQLEXPRESS;Initial Catalog=xxxx;User ID=xxxxx;Password=xxxxx;" />

# provider.config

<provider
     name="sqlServer2.0"
     enabled="true"
     description="Microsoft SQL Server, provider V2.0.0.0 in framework .NET V3.5"
     assemblyName="System.Data, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089"
     connectionClass="System.Data.SqlClient.SqlConnection"
     commandClass="System.Data.SqlClient.SqlCommand"
     parameterClass="System.Data.SqlClient.SqlParameter"
     parameterDbTypeClass="System.Data.SqlDbType"
     parameterDbTypeProperty="SqlDbType"
     dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
     commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder"
     usePositionalParameters = "false"
     useParameterPrefixInSql = "true"
     useParameterPrefixInParameter = "true"
     parameterPrefix="@"
     allowMARS="true"
/>
上記でも接続できなかったので Windows ファイアーウォールで TCP/UDP 1433 の確認と「SQL Server 構成ツール」の 「SQL Server 構成マネージャー」のTCPおよび名前付きパイプが有効になっているか確認。
> どうも TCP は関係無かった模様…

それでも繋がらなかったので色々と見直し悩んだ結果、上記 sqlmap.config の dataSource の接続文字列で data source=(local)\SQLEXPRESS; の所を data source=(local)/SQLEXPRESS; としていたのが原因と分かる。

気づくまで 1時間30分ぐらい掛かった・・・。

環境: Windows 2008 r2 (64bit), IIS 7.5, SQL Server 2008 r2 Express, .NET Framework 3.5

2012年3月29日木曜日

ECCUBE の文字化け

[1] ECCUBEインストール後に 管理ページで「基本情報管理」->「SHOPマスター」ページで文字化けしていた。(課税規則、都道府県など)
    => 原因: MySQL の データベースの文字コードが Latin1 になっていた…。
    => 対応: MySQL の DB を UTF8へ変更して CREATE DATABASE する。

[2] ECCUBE を再インストールしても文字化けが直らない
    => phpMyAdmin や コンソールでは文字化けしていない。
    => ECCube の data/cache 内にマスタデータのキャッシュが残っていたので、一旦ファイルを削除する。
    => 文字化けが直った。

■ECCUBE サーバー環境

  EC-CUBEバージョン:2.11.5
  PHP情報:5.3.10
  DB情報:MySQL 5.5.20
  OS情報:Linux localhost.localdomain 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:52 EST 2012 i686 Apache/2.2.3 (CentOS)

2012年3月22日木曜日

IIS7 で require や include で Permission Error が出る

Windows でのアクセス権の設定を見直す。


  • PHP の実行ファイル( php.exe ) のアクセス権
  • 公開フォルダのアクセス権


上記を IUSER_[コンピューター名] の読み取りと実行ができるようにしておく。

IIS 7 での SQL Server 2008 への接続

接続するときに

[Microsoft][SQL Server Native Client 10.0][SQL Server]ユーザー はログインできませんでした 

と出る場合、DBのログインに接続時のユーザーが設定されていない場合があるので要確認。

2012年3月19日月曜日

アセンブリは部分的に信頼されている呼び出し元を許可しません

「System.Security.SecurityException: アセンブリは部分的に信頼されている呼び出し元を許可しません。」

■怪しい対応

  • IIS 7 の機能ビューの ".NET信頼レベル" を "Full" にすると出ない。
  • 確かにエラーは出なくなったが…。


■アセンブリによる対応

  • IIS 7 の機能ビューの ".NET信頼レベル" を "midium"。
  • アセンブリに AllowPartiallyTrustedCallers 属性を設定する。 <Assembly: Security.AllowPartiallyTrustedCallers()>


…らしいが、正直理屈が分からん…。

再度詳しく調べる必要あり。

64 bit 環境での ASP.NET 2.0 の実行

32 bit 環境で動作している ASP.NET 2.0 のプロジェクトを 64 bit 環境 の IIS にデプロイすると、

ファイルまたはアセンブリ 'xxxxxx'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました

と出る。これは 32 bit でコンパイルした dll が混じっていると出るエラーのようなので、以下のいずれかで対処する。


  • 64 bit でコンパイルし直す(他所のライブラリを使用している場合は 64 bit 版に差替える)
  • IIS の Application Pool を "ASP.NET 2 Classic" に選択し、「詳細設定」で "32 ビット アプリケーションの有効化 " を "True" にする

上記のいずれかで対応する。

2012年2月7日火曜日

Facebook のタブ(iframe)ページの追加方法(2012/02/07)

アプリ作成後のタブへの追加方法が変わったようなのでメモ。


https://www.facebook.com/dialog/pagetab?app_id={アプリケーションID}&display=popup&next={セキュアなURL}

にアクセスしてタブを追加する。

2012年1月30日月曜日

CakePHP 1.2 を使った CMS

baser CMS
http://basercms.net/

2012年1月25日水曜日

li タグの中身をランダムで n 個 表示する

(1) 以下を jQuery でメソッドを作成する。 rview の属性の値の数だけランダムで li を表示する。

<script language="javascript">
//<!--
jQuery(function($) {
$.fn.extend({
rview : function(num) {
return this.each(function() {
var chn = $(this).children().hide().length;
for(var i = 0; i < num && i < chn; i++) {
var r = parseInt(Math.random() * (chn - i)) + i;
$(this).children().eq(r).show().prependTo($(this));
}
});
}
});
$(function(){
$("[rview]").each(function() {
$(this).rview($(this).attr("rview"));
});
});
});
//-->
</script>
(2) HTML側:ランダム表示したい UL に上記(1)で定義した属性を加える。(この場合は rview )

<ul class="mr" rview="1">
<li><a href="#A">リンク先A</a>|<a href="#a">リンク先a</a></li>
<li><a href="#B">リンク先B</a>|<a href="#b">リンク先b</a></li>
<li><a href="#C">リンク先C</a>|<a href="#c">リンク先c</a></li>
<li><a href="#D">リンク先D</a>|<a href="#d">リンク先d</a></li>
</ul>

(3)  ULの内容がページ読み込み直後に一旦全て表示されてしまう場合があるので、ul.mr li {display:none;} しておくと読み込み後に  rview 指定分のみが表示されるようにできる。

2012年1月24日火曜日

プリンタ

OKI C3400 の「管理者のログイン」のデフォルトのユーザーIDとパスワードは admin と MACアドレスの後ろから6文字。マニュアルに書いてある?マニュアルのPDFを探しても書いてなかったような・・・。

PHP 5.3.9 (Windows 7) に PEAR をインストールする

PHP 5.3.9 の zip パッケージをダウンロードしてインストールした後に、よく見たら go-pear.bat が入っていないので、PEARのサイトより http://pear.php.net/go-pear.phar をダウンロードし go-pear.phar を実行する。

2012年1月20日金曜日

PHPでHTMLをPDFで出力(Windows + Apache)

TCPDF を使用。

[1]
tcpdf_5_9_144.zip をダウンロードして解凍して使用するPHPから tcpdf/tcpdf.php を include する。

[2]
このままでは日本語は文字化けするので、tcpdf/config/lang 以下に jpn.php ファイルを作成して以下のコードを記述して保存する。
global $l;
$l = Array();
$l['a_meta_charset'] = 'UTF-8';
$l['a_meta_dir'] = 'jpn';
$l['a_meta_language'] = 'jp';
$l['w_page'] = 'ページ';
 [3]
以下のコードでPHPから使用できる。
include_once ("./tcpdf/config/lang/jpn.php");
include_once ("./tcpdf/tcpdf.php");

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 
$pdf->setFontSubsetting(false);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetFont("kozgopromedium", "", 8);
$pdf->AddPage();
$tpl = mb_convert_encoding("<h1>テスト</h1>", "UTF8", "EUC-JP");
$pdf->writeHTML($tpl, true, 0, false, true, 'L');
$pdf->Output('sample.pdf', 'D');
この時は mb_internal_encoding が EUC-JP だったが、TCPDF は UTF8 で処理されるようなので、もし UTF8 以外でコードを書いている場合は変換する。

また、 writeHTML の内容は HTMLTidy のようなキチンと整形されたコードでなければエラーになってしまう。

CSS は それぞれのタグに style 属性で指定する。
(ブラウザでHTMLを表示した時と同じ・・・とまではいかないような・・・)





Table のチェックボックス2

テーブル内のチェックボックスのjQuery例:
機能:
・ 全ての行選択/解除
・ trをクリックしてチェックボックスの選択/解除
・チェックボックスクリック時に tr 背景色の変更(class の値追加/削除)


 $(".all_select").click(function() {
  if($(this).attr("checked")){
   $("#table_list .selected_id").attr("checked", true);
   for(var i=0; i<$(this).parent().parent().parent().find("tr").length; i++) {
    $($(this).parent().parent().parent().find("tr").get(i)).addClass('tr-selected');
   }
  }
  else {
   $("#table_list .selected_id").attr("checked", false);
   for(var i=0; i<$(this).parent().parent().parent().find("tr").length; i++) {
    $($(this).parent().parent().parent().find("tr").get(i)).removeClass('tr-selected');
   }
  }
 });
 $('.selected_id').click(function(){
      if($(this).attr("checked")){
     $(this).attr('checked', true);
        $(this).parent().parent().addClass('tr-selected');
      }
      else{
     $(this).attr('checked', false);
        $(this).parent().parent().removeClass('tr-selected');
      }
    });
 $('.list td').click(function(){
  var mo = $(this).parent().find("input:checkbox");
  var tar = $(this).find("input:checkbox");
  console.log(tar);
  if(tar.length < 1) {
      if(mo.attr("checked")){
    mo.attr('checked', false);
    $(this).parent().removeClass('tr-selected');
      }
      else{
    mo.attr('checked', true);
    $(this).parent().addClass('tr-selected');
      }
  }
 });
ijou.


table のチェックボックスをクリックしたときに行の背景色を変える

HTML:例
<table>
    <tr>
         <td><input type="checkbox" id="test_0" name="test[]" class="test" value="mo1"></td>
         <td>TEST1</td>
    </tr>
    <tr>
         <td><input type="checkbox" id="test_1" name="test[]" class="test" value="mo1"></td>
         <td>TEST2</td>
    </tr>
    <tr>
         <td><input type="checkbox" id="test_2" name="test[]" class="test" value="mo1"></td>
         <td>TEST3</td>
    </tr>
</table>
CSS:例
    /* チェックボックスにチェックを入れた際の背景色 */
    .tr-selected { background-color:#fcc; }

■jQuery:例

<script language="javascript">
    $('.selected_id').click(function(){
        if($(this).attr("checked")){
            $(this).attr('checked', true);
            $(this).parent().parent().addClass("tr-selected");
        }
        else{
            $(this).attr('checked', false);
            $(this).parent().parent().removeClass("tr-selected");
        }
   }
</script>


2012年1月10日火曜日

Apache で Forbidden になる

Foedora Core 16 にて Apache で /home/(ユーザー名: user)/public_html を公開しようとすると Forbidden が表示されてしまう。以下の可能性がある。 httpd -t でもhttpd.conf の記述に誤りが無いか事前に確認しておく。
*原因1 SELinux のセキュリティ設定
SELinux の設定で公開するディレクトリ( /home/user/public_html )が httpd からアクセス可能であると設定する。
semanage fcontext -a -t httpd_sys_content_t '/home/user/public_html(/.*)?'
# restorecon -R /home/user/public_html

または、以下の方法でSELinux 自体を無効にしてしまう。
# setenforce 0


*原因2 アクセス権
# chmod 755 /home/user


今回は *2 でハマる。

Git のインストール

[1] Git を yum に追加
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm

[2] リポジトリ更新
# vi /etc/yum.repos.d/rpmforge.repo
enable=0

[3] Git インストール
# yum install git --enablerepo=rpmforge
# yum install git-daemon --enablerepo=rpmforge
[4] Git 設定
% git config --global user.name "aaaaaa"
% git config --global user.email aaaaa@aaaaaaa

2012年1月5日木曜日

テスト

テスト投稿