Microsoft Update カタログ サイトが Internet Explorer の ActiveX の呪いから開放され、私が使用してる UA Firefox Quantum でもアクセスできるようになったので、ナレッジベース番号(以下、KB番号 と称します) リストを元に情報を取得する PHP スクリプトを作りました
ようやくまともな形に仕上がったので、正式リリースします。以下のファイルをダウンロードし、適当なディレクトリに解凍します
このファイルはスクリプト本体(MicrosoftUpdateSearch.php) と同じディレクトリに置いておく必要があります
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept-Language: ja,en;q=0.7,en-US;q=0.3
DNT: 1
このファイルの内容そのものが HTTP リクエストする際のヘッダーとして追加されます。ファイル形式は UTF-8, LF(改行), BOM 無しが望ましいです
このファイルはスクリプト本体(MicrosoftUpdateSearch.php) と同じディレクトリに置いておく必要があります
; 初期設定ファイル
; このファイルは MicrosoftUpdateSearch.php と同じディレクトリある必要があります
; 行頭 ; で始まる行、空行は無視されます
; 設定されるパラメーター名は大文字小文字区別されます
; Microsoft Update カタログ サイト設定
URI = 'https://www.catalog.update.microsoft.com/'
Serach_URI = 'https://www.catalog.update.microsoft.com/Search.aspx'
Detail_URI = 'https://www.catalog.update.microsoft.com/ScopedViewInline.aspx?updateid='
Download_URI = 'https://www.catalog.update.microsoft.com/DownloadDialog.aspx'
; 検索語(主にKB番号) に付与する接尾語
Search_Sufix = ' Windows 7 x64'
; 検索結果を絞り込む為の除外リスト
; 評価優先順位は左から右
; 否定を指定する場合は接頭語に ! を付与する
; 複数指定する場合は , で区切る
;
; 下記の例と言うと、Embedded を含む検索結果は除外され、
; 次に Windows 7 を含まない検索結果が除外されます
Search_ExcludeList = 'Embedded','!Windows 7'
; ログファイルの設定
LogFile = 'MictosoftUpdateSearch.' . date( 'Y-m-d_His' ) . '.log'
; コンソール出力するかどうかの設定 On ならば、コンソール出力される
LogEcho = On
; コンソール出力する際の文字エンコーディング
LogEchoEncode = 'SJIS'
; ログファイルに出力する際の文字エンコーディング
LogFileEncode = 'UTF-8'
; 個々のダウンロード URI に対するログ出力追加オプション
; 使用できる変数は以下に示します
; $n 改行(0x0d)
; $KB ナレッジベース番号(KB番号)
; $Date 最終更新日時
; $Title タイトル
; $Product 製品
; $Category 分類
; $Version バージョン
; $Detail_URI 詳細取得先 URI
; $Description 概要
; $Detail 詳細
; $Download_URI 更新プログラムの URI
LogOutOptions = ' <a href="$Download_URI" title="$Detail">$KB</a>$n',' <tr><td><a href="$Download_URI" title="$Detail">$KB</a></td><td>$Detail</td></tr>$n$n'
; ナレッジベース番号(KB番号) を記述したファイル
KB_ListFile = 'MicrosoftUpdateSearch.List.txt'
; ナレッジベース番号(KB番号) を記述したファイル
; このファイルはスクリプトを動かすディレクトリに置きます
; 行頭 ; で始まる行、空行は無視されます
; 複数にまたがって記述する際は以下の様に記述します
KB890830,
KB4344152,
KB4343900',
; 単一行で記述する場合は以下の様に記述します
; , 文字で区切ります
KB2990941,KB3087873,KB2533552,KB2534366,KB2670838,KB2732059,KB2773072,KB2834140
今後の修正予定です
普段はあまり気にしていなかったのですが、先日に foobar2000 本体やコンポーネントをアップデートした際に異様に起動が遅い…foobar2000 をインストールしたディレクトリを覗いてみると custominfo_sqlite.db のサイズが 6MB 超えている…
なんでだろうと思い、一旦 foobar2000 を終了し SQLite Database Browser にて custominfo_sqlite.db の中を見てみると、同じ曲の fieldname が PLAYED_TIMESTAMP のレコードがやたらとできてる…多分コレのせいでしょう…
Preferences › Playback Statistics Custom › Playback Statistics Custom Settings の Play Stamp をチェックしていると Playback Statistics Update Timing に合致する度にレコードが挿入されてしまう。要はコレは再生履歴なんですが、foobar2000 じゃこのデータを使う手段や使い道がないのでチェックオフにしておく
で、PLAYED_TIMESTAMP フィールドは UI の中でも使用していないので、このレコードを削除する事にします。SQLite Database Browser で行ってもいいんですが、PHP で以下のような簡易ダイエットスクリプトを作成して実行
- <?php
- $dbf = './custominfo_sqlite.db';
- $dbh = new PDO( 'sqlite:'.$dbf );
- $stmt = $dbh->query( 'DELETE FROM quicktag WHERE fieldname = "PLAYED_TIMESTAMP"' );
- echo 'row count: '.$stmt->rowCount()."\n";
- echo 'error code: '.$stmt->errorCode()."\n";
- $stmt = $dbh->query( 'VACUUM' );
- echo 'error code: '.$stmt->errorCode()."\n";
- ?>
上記スクリプトを実行する事によって、約 25000 レコードが削除され、6.02MB だったファイルが 1.19MB までに小さくなりました。小さくなった custominfo_sqlite.db を foobar2000 のディレクトリに戻し、起動…サックリ起動するようになりました
使用しているフィールド PLAY_COUNT, FIRST_PLAYED_TIMESTAMP, LAST_PLAYED_TIMESTAMP が UI 側で正常に表示される事を確認して終了です
PHP を 5.2.5 から 5.2.6 へアップデートしたので、その時のインストールメモです
extension_dir の指定も忘れずに…
- extension_dir=./ext/
- extension=php_mbstring.dll
- extension=php_exif.dll
- error_log = "C:/logs/php_error.log"
- include_path = ".;C:\PHP\pear;C:\PHP\includes;"
>path C:\php;%path%
>set pathext=.php;%pathext%
>assoc .php=PHP_Script
>ftype PHP_Script="C:\php.exe" "%1" %*
httpd.conf を使っている Apache のバージョンに合わせて編集します
- AddType application/x-httpd-php .php
- Action application/x-httpd-php "/php/php-cgi.exe"
- PHPIniDir "C:/php"
- # for Apache 1.x
- LoadModule php5_module "C:/php/php5apache.dll"
- # for Apache 2.x
- LoadModule php5_module "C:/php/php5apache2.dll"
- # for Apache 2.2.x
- LoadModule php5_module "C:/php/php5apache2_2.dll"
- AddType application/x-httpd-php .php
- PHPIniDir "C:/php"
Apache を再起動、確認して終了です
Pear のセットアップとパッケージのインストール を参照してください
私が解っている範囲で他のシステムと関係のあるファイルを列挙しておきます
日付 | 内容 |
2008/07/10 (木) |
|
Firefox 3 のロケーションバーにマルチバイト文字を入力して、サイトにアクセスすると正しく URL が渡らない。検索エンジンなどで使用すると、一部の検索エンジンで入力した文字列が正しくサイト側に伝わらず文字化けしてしまうという問題が…('A`)
ロケーションバーを見ると、何やら URL がエンコードされている様です…この件で検索してみると、やっぱり同じような問題が見つかりました。about:config の network.standard-url.encode-query-utf8 の値を true に変更する事で問題が解決しました
user_pref("network.standard-url.encode-query-utf8", true);
ところが、この問題は半分解決したといった方がいいでしょう。何故なら、この設定はサイト側の URL エンコード処理が UTF-8 の場合しか効果がありません。例えば 緑のgoo に以下の様に文字列を渡してやると、やはり文字化けします 1
http://green.search.goo.ne.jp/search?MT=漢字入力ですよ
入力エンコード指定の URL パラメーターにて、以下の様にエンコードを指定してやれば 緑のgoo に関しては、解決です
http://green.search.goo.ne.jp/search?MT=漢字入力ですよ&IE=UTF-8
サイト側でこの問題を解決する方法もあります。URL パラメーターとして入力された文字列をサイト側で処理すべき文字エンコードに変換してやればいいのです。以下の例は PHP の例です 2
- foreach ( $_GET as $key => $value ) {
- echo '1 key: ' . $key . ' value: ' . $value . "<br />\n";
- echo '2 key: ' . mb_convert_encoding( $key, 'UTF-8', 'UTF-8,SJIS,EUC-JP' ) . ' value: ' . mb_convert_encoding( $value, 'UTF-8', 'UTF-8,SJIS,EUC-JP' ) . "<br />\n";
- }
他の UA でも試してみましたが、Opear, IE6 は駄目でした。特に Opera 3 は酷く、ロケーションバーにマルチバイト文字を入力してエンターキーを押すと URL エンコードどころか、激しく文字化けし、4 しかもその文字化けしたデータをそのまま URL としてサイトにアクセスします。なので、サイト側で解決しても駄目です
どうも、この問題は思っていたほど根が深いようです。時間がある時に調べてみたいと思います
この件で検索を行っても CSS を PHP のヒアドキュメントとして、記載する方法が見つからなかったのでメモとして記事にします
CSS を記載する方法としては style 要素の中に記述するか、link 要素の中にスタイルシートの URI を記載して UA に読み込ませると言う 2つの方法がありますが、今回、ここで記載するのは後者の方です。何故この様な事を考えたかと言うと、いい加減此処の超カオス気味のスタイルシートを何とかしたいと思った次第です
PHP の公式マニュアルによると PHP: 基本的な構文 - Manual たいていの場合、PHP は HTML ドキュメントの中に埋め込まれます と記載されています。たいていの場合? では、別に HTML でなくてもいい訳です。参照先にその具体例が記載されています。そこで、まず行ったのが HTML の head 要素内の link 要素を以下の様に修正
<link rel="stylesheet" type="text/css" href="filename.php" media="all" />
スタイルシートを指定しているファイルのサフィックス部分が php になっている所がポイント。で、実際のスタイルシートファイル(.php) は以下の様に記述します
@charset "UTF-8";
<?php
$color = 'pink';
$background = 'green';
?>
body {
color: <?php echo $color; ?>;
background-color: <?php echo $background; ?>;
}
ブラウザをリロード行っても…真っ白けです。どぎつい配色になるはずなんですが、これはスタイルシートが適用されていないようです。つまり、UA がスタイルシートとして認識しなかったようです。そこで Proxomitron 1 のログウィンドウを開いて、もう一度リロードを行います。案の定 PHP が HTTP レスポンスヘッダー Content-Type のメディアタイプに text/html として返しています。これが原因の様です。つまり、スタイルシートならばメディアタイプを text/css として返さなければならないのに UA に対して HTML 文書ファイルですよ。と、返してしまっている訳です。これは、PHP の設定 default_mimetype が text/html となっているので正常な動きです。そこで、スタイルシートファイル(.php) を以下の様に修正します
<?php header('Content-Type: text/css; charset=utf-8'); ?>
@charset "UTF-8";
<?php
$color = 'pink';
$background = 'green';
?>
body {
color: <?php echo $color; ?>;
background-color: <?php echo $background; ?>;
}
どうってことはありません。header 関数にてデフォルトのヘッダーを置き換えてやっているだけです。ブラウザを再度リロードするとスタイルシートが認識されました。本来ならば、ここで終了なんですが、link 要素のファイル名の指定が php となっているのがどうもかっこよくない。そこで、HTTP サーバーのアクセス制御ファイルを以下の様に記述します 2
<FilesMatch "filename\\.css">
SetHandler application/x-httpd-php
</FilesMatch>
あとは、HTML の head 要素内の link 要素のファイル名指定部分の php を css に変更。実際のファイル名も css に変更。実際にブラウザをリロードしてアクセス制御ファイルが効いているか確認して終わりです
これには色々と応用が効きます。各 UA に対応させる為に UA のバグを逆用して苦労してスタイルシートの読込みの振り分けなどを行っている様ですが、PHP 変数の $_SERVER["HTTP_USER_AGENT"] で判定を行えばいいのです。3 他には、色を容易に変更できる様に PHP の変数としておけば、変数の値を変更するだけで配色の変更が可能です。などなど…PHP コードが記述できるので、良いと思います 4
PHP で使用する Pear のセットアップ方法とパッケージのインストール方法のメモです。Pear は PECL と違ってソースコードレベルで提供されるライブラリパッケージです。パフォーマンスの点では PECL に譲りますが、インストールするパッケージは PHP ソースコードなので自分で保守できる事が特徴です
Pear のセットアップを行います。Windows のコマンドプロンプトを起動し PHP をインストールしたディレクトリに移動します
>cd /d c:¥php
PHP をインストールしたディレクトリに go-pear.bat というバッチファイルがあるのでこのコマンドスクリプトを実行します
>go-pear
go-pear を実行すると、以下の様にインストール方法に関する情報を入力するようにプロンプトが表示されます
>go-pear
Are you installing a system-wide PEAR or a local copy?
(system|local) [system] : enterデフォルトの system でいいので enter で次に進みますBelow is a suggested file layout for your new PEAR installation. To
change individual locations, type the number in front of the
directory. Type 'all' to change all of them or simply press Enter to
accept these locations.
1. Installation base ($prefix) : C:¥php
2. Temporary directory for processing : C:¥php¥tmp
3. Temporary directory for downloads : C:¥php¥tmp
4. Binaries directory : C:¥php
5. PHP code directory ($php_dir) : C:¥php¥pear
6. Documentation directory : C:¥php¥pear¥docs
7. Data directory : C:¥php¥pear¥data
8. Tests directory : C:¥php¥pear¥tests
9. Name of configuration file : C:¥php¥pear.ini
10. Path to CLI php.exe : C:¥php
1-10, 'all' or Enter to continue: enter
1 から 10 までの Pear で使用するディレクトリを指定します。そのままでよければ enter でセットアップを開始します。ディレクトリを変更したい場合は変更したい対応する番号を入力します。例えば 5番の PHP code directory を変更したい場合は、5 enter とここで入力しますBeginning install...
Configuration written to C:¥php¥pear.ini...
Initialized registry...
Preparing to install...
installing phar://go-pear.phar/PEAR/go-pear-tarballs/Archive_Tar-1.3.2.tar...
installing phar://go-pear.phar/PEAR/go-pear-tarballs/Console_Getopt-1.2.3.tar...
installing phar://go-pear.phar/PEAR/go-pear-tarballs/PEAR-1.6.1.tar...
installing phar://go-pear.phar/PEAR/go-pear-tarballs/Structures_Graph-1.0.2.tar...
pear/PEAR can optionally use package "pear/XML_RPC" (version >= 1.4.0)
install ok: channel://pear.php.net/Archive_Tar-1.3.2
install ok: channel://pear.php.net/Console_Getopt-1.2.3
install ok: channel://pear.php.net/Structures_Graph-1.0.2
install ok: channel://pear.php.net/PEAR-1.6.1
PEAR: Optional feature webinstaller available (PEAR's web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)
PEAR: To install optional features use "pear install pear/PEAR#featurename"
** WARNING! Old version found at C:¥php, please remove it or be sure to use the new c:¥php¥pear.bat command
go-pear を何回も行ったりするとこの警告メッセージが表示されますが、この場合は特に問題ないのできにしなくてよいThe 'pear' command is now at your service at c:¥php¥pear.bat
* WINDOWS ENVIRONMENT VARIABLES *
For convenience, a REG file is available under C:¥php¥PEAR_ENV.reg .
This file creates ENV variables for the current user.Double-click this file to add it to the current user registry.
との、事なので C:¥php¥PEAR_ENV.reg をエクスプローラーなどからダブルクリックしてシステムに反映させます。行っていることは環境変数の設定です続行するには何かキーを押してください . . .enter
>
以上で Pear のパッケージをインストール前準備ができました。次は、実際にパッケージをインストールしてみましょう。取り敢えず、pear コマンドとタイプしてみて pear が動作するか試します
>pear
Commands:build Build an Extension From C Source bundle Unpacks a Pecl Package channel-add Add a Channel channel-alias Specify an alias to a channel name channel-delete Remove a Channel From the List channel-discover Initialize a Channel from its server channel-info Retrieve Information on a Channel channel-update Update an Existing Channel clear-cache Clear Web Services Cache config-create Create a Default configuration file config-get Show One Setting config-help Show Information About Setting config-set Change Setting config-show Show All Settings convert Convert a package.xml 1.0 to package.xml 2.0 format cvsdiff Run a "cvs diff" for all files in a package cvstag Set CVS Release Tag download Download Package download-all Downloads each available package from the default channel info Display information about a package install Install Package list List Installed Packages In The Default Channel list-all List All Packages list-channels List Available Channels list-files List Files In Installed Package list-upgrades List Available Upgrades login Connects and authenticates to remote server logout Logs out from the remote server makerpm Builds an RPM spec file from a PEAR package package Build Package package-dependencies Show package dependencies package-validate Validate Package Consistency pickle Build PECL Package remote-info Information About Remote Packages remote-list List Remote Packages run-scripts Run Post-Install Scripts bundled with a package run-tests Run Regression Tests search Search remote package database shell-test Shell Script Test sign Sign a package distribution file uninstall Un-install Package update-channels Update the Channel List upgrade Upgrade Package upgrade-all Upgrade All PackagesUsage: pear [options] command [command-options] <parameters>
Type "pear help options" to list all options.
Type "pear help shortcuts" to list all command shortcuts.
Type "pear help <command>" to get the help for the specified command.
もっともメジャーなパッケージ HTTP_Request パッケージをインストールしてみましょう
>pear install HTTP_Request
WARNING: "pear/Net_URL" is deprecated in favor of "pear/Net_URL2"
downloading HTTP_Request-1.4.2.tgz ...
Starting to download HTTP_Request-1.4.2.tgz (16,398 bytes)
......done: 16,398 bytes
install ok: channel://pear.php.net/HTTP_Request-1.4.2>
この警告メッセージは Net_URL パッケージが Net_URL2 に取って代わられました。と表示される(2007/12/23 現在) と思いますが、Net_URL のサイトを参照するかぎり、バグとセキュリティフィックスのために維持されているようなので、このままでも構いません。が、一応、stable バージョン以外のパッケージのインストール方法を示す為にNet_URL2 (2007/12/23 現在βバージョンです) もインストールしてみましょう
>pear install Net_URL2
Failed to download pear/Net_URL2 within preferred state "stable", latest release is version 0.1.0, stability "beta", use "channel://pear.php.net/Net_URL2-0.1.0" to install
Cannot initialize 'channel://pear.php.net/Net_URL2', invalid or missing package file
Package "channel://pear.php.net/Net_URL2" is not valid
install failed>
どうやら、stable バージョンではないパッケージをインストールすることはパッケージ名を指定してできないので、チャンネル名を指定してインストールしろとの事なので、その様にします
>pear install channel://pear.php.net/Net_URL2-0.1.0
downloading Net_URL2-0.1.0.tgz ...
Starting to download Net_URL2-0.1.0.tgz (5,358 bytes)
.....done: 5,358 bytes
install ok: channel://pear.php.net/Net_URL2-0.1.0
>
Net_URL2 パッケージのインストールが成功しました。インストールされているパッケージの一覧を見てみます
>pear list
INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET: ========================================= PACKAGE VERSION STATE Archive_Tar 1.3.2 stable Console_Color 1.0.2 stable Console_Getopt 1.2.3 stable HTTP 1.4.0 stable HTTP_Request 1.4.2 stable Net_DNS 1.0.0 stable Net_Socket 1.0.8 stable Net_URL 1.0.15 stable Net_URL2 0.1.0 beta PEAR 1.6.1 stable Services_DynDNS 0.3.1 alpha Structures_Graph 1.0.2 stable >
以上で大まかな Pear のセットアップとパッケージのインストール方法は終了です。実際に Pear のパッケージを使用した PHP のサンプルなども記事にしたいと思っています
PHP を最近バージョンアップしたので、その時のインストールメモです
extension=php_mbstring.dll
extension=php_exif.dll
>path c:\php;%path%
>set pathext=.php;%pathext%
>assoc .php=PHP_Script
>ftype PHP_Script="C:\php.exe" "%1" %*
以上で終了ですが、Pear のインストールや Web サーバー(Apache2) との連携に関する事柄は、別の記事にしたいと思います
バージョン 5.2.6 が 2008/05/01 にリリースされたのでここの記事が古くなっていますので、PHP 5.2.6 インストール for Windows を参照してください
日付 | 内容 |
2008/07/06 (土) | リンク先や文面を修正 |