ラベル PHP の投稿を表示しています。 すべての投稿を表示
ラベル PHP の投稿を表示しています。 すべての投稿を表示

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月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年1月24日火曜日

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を表示した時と同じ・・・とまではいかないような・・・)