Apache (Win32) Tips

無保証:Unguaranteed


ファイル '(不明)' を開くことができませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。

PC1(Windows 2000 Pro)で稼働しているApache(2)(win32) + PHP(win32)でネットワークドライブX:(\\PC2\share)上のAccessデータベース(hoge.mdb)にODBCを介してアクセスする。

PC1のUser1
ユーザ名:User1(任意)
パスワード:Password1(任意)
PC1のUser1に「サービスでログオン」できる権限を付加
PC1[管理ツール]-[ローカルセキュリティポリシー] で[ローカルセキュリティ設定]が開く
[セキュリティの設定]-[ローカルポリシー]-[ユーザー権利の割り当て]-[サービスとしてログオン]のセキュリティでUser1を追加
ApacheをUser1で起動
PC1[管理ツール]-[サービス]でApache(2)のプロパティ
[ログオン]タブで[アカウント]にチェック、[参照]からUser1を選択しパスワード:Password1を入力しApache(2)のサービスを再起動
phpで確認
print(get_current_user()); で、User1が表示される。
User1に対し、PC2のhoge.mdbのアクセス権を与える
PC2[コントロールパネル]-[ユーザとパスワード]でユーザを追加
ユーザ名:User1
パスワード:Password1
を作成。
PC2の共有フォルダshareの[アクセス許可]で[追加]、User1を[フルアクセス]で追加
ODBCソースの作成
\\PC2\shareをネットワークドライブX:として割り当てる
PC1[管理ツール]-[データソース(ODBC)]から[システム DNS]で[追加]
[Microsoft Access Driver (*.mdb)]を選択し[完了]
データソース名:DB(任意)
[データベース:][選択]で[ドライブ:]x: \\PC2\share を選択し、hoge.mdbを選択して[OK]
[詳細設定]

ログイン名:User1
パスワード:Password1

phpでアクセス
$odbc = odbc_connect("DB", "User1", "Password1");

[Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine cannot open the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view its data.

Approaching Access Database (hoge.mdb) on network drive X:(\\PC2\SHARE) by using ODBC driver, from Apache(2)(win32) + PHP(win32) on PC1(Windows 2000 Pro).

Making User1 on PC1
User Name:User1(any)
Password:Password1(any)
Granting Logon as Service Right to User1 on PC1
PC1[Administration Tools]-[Local Security Policy] ,then [Local Security Setting] will open.
[Local Security Setting]-[Local Policy]-[User Right Assignment]-[Logon as Service] Adding User1.
Booting up Apache(2) service as User1
PC1[Administration Tools]-[Service] Apache(2)'s property
Checking [Account] on [Logon] tab, Push [Reference] button, then choose User1 and input Password1. Finaly reboot Apache(2) service.
Confirming by PHP
print(get_current_user()); User1 will be displaied.
Granting access right for hoge.mdb on PC2, to User1 on PC1
PC2[Control Panel]-[User and Password], adding user
Username:User1(same as PC1)
Password:Password1(same as PC1)
Grating full access right for SHARE in PC2, to User1
Making ODBC source
Assign \\PC2\SHARE as network drive X:
PC1[Administration Tools]-[Data Source(ODBC)],[System DNS] then [Add]
Choose [Microsoft Access Driver (*.mdb)],[Finish]
Data Source Name:DB(any)
[Date Base:] as[Drive:]x: \\PC2\SHARE,hoge.mdb
[Detail]

Login Name:User1
Password:Password1

Approaching by PHP
$odbc = odbc_connect("DB", "User1", "Password1");

getID3 で日本語(Shift_JIS)を無理矢理使う

mp3ファイルのタグ情報を取得できるphpスクリプトのgetID3()から、日本語(Shift_JIS)で書かれた情報を得て、Webページ(コードShift_JIS)に無理矢理表示する

サーバ構成

OS
Windows 2000 or XP
ウェブサーバ(httpd)
Apache2 + PHP4.3(or later)

getID3()をダウンロード&インストール

getID3()のページまたは、Sourceforge.netのgetID3() FIlesから、getID3()をダウンロードし、解凍、適宜ウェブサーバのフォルダにコピーする。

helperapps(getID3() Windows Support)をダウンロード&インストール

Sourceforge.netのgetID3() FIlesから、getID3() Windows Supportをダウンロードする。
適当なフォルダに解凍。ここでは、C:\Program Files\helperapps\ に解凍することにする。

getID3()、各スクリプトの修正など

getid3.php

 冒頭の定義部分に、helperappsのパスを追加。↑で解凍したフォルダの短いファイル名を指定。

define('GETID3_HELPERAPPSDIR','C:\PROGRA~1\HELPER~1');

getid3.lib.php

 function MultiByteCharString2HTML を修正する
 getid3.lib.phpの1054行め辺りにある、

$HTMLstring = htmlentities($string, ENT_COMPAT, $charset);
 文字列をHTMLエンティティに変換して渡している部分を、

$HTMLstring = $string;
 と、そのままの文字列を渡すように書き換える。(んー無理矢理(^^;)

Apacheにmod_encoding.soをインストール

 WebDAV - PukiWikiにあるWin32 向けのバイナリ:mod_encoding_win32_20040608.zipをダウンロードする。

 手順
  • ダウンロードしたmod_encoding_win32_20040608.zipを解凍
  • 解凍されたmod_encoding.soをApacheのmodulesフォルダにコピー
  • Apacheのconfフォルダにあるhttpd.conf(Apache定義ファイル)に
    • LoadModule encoding_module modules/mod_encoding.so
    • <IfModule mod_encoding.c>
      	EncodingEngine On
      	SetServerEncoding UTF-8
      	DefaultClientEncoding JA-AUTO-SJIS-MS
      </IfModule>

      を、追加する
  • Apacheを再起動

実際に出力してみる

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/>
<title>getID3()テスト</title>
</head>
<body>
<?php
	require_once($_SERVER['DOCUMENT_ROOT'] . '/php/getid3/getid3.php');	//getID3のパス
	$getID3 = new getID3;	//初期化
	$DirectoryToScan = "C:\MYDOCU~1\MYMUSI~1";	//mp3ファイルの存在するフォルダー
	$dir = opendir($DirectoryToScan);
	print("<table>\n");
	while (($file = readdir($dir)) !== false) {
		$FullFileName = realpath($DirectoryToScan.'/'.$file);
		if (is_file($FullFileName)) {
			set_time_limit(30);
			$ThisFileInfo = $getID3->analyze($FullFileName);
			getid3_lib::CopyTagsToComments($ThisFileInfo);
			print("<tr>\n");
			print("<td>" . $ThisFileInfo['comments_html']['title'][0] . "</td>\n");	//曲名
			print("<td>" . $ThisFileInfo['comments_html']['artist'][0] . "</td>\n\n");	//アーティスト
			print("</tr>\n");
		}
	}
	print("</table>\n");
?>
</body>
</html>

ひとつ上のページへ