カテゴリー
Windows

本家のお世話-#33。(PHP5.4.2へアップデート)

投稿アップデート情報  追記(2013/2/14)

 PHP 5.4.1に変更―04.23(月)―してから,例のcrashは2度起こった。まあ,安定していると言ってもいいだろう。で,May-04 01:09:54 UTC にPHP 5.4.2 がリリースされたので,アップデートしてみた。( @00:30)

 php.iniについては,5.4.1と違いがないので,これをそのまま使う。php5apache2_4.dll をPHPディレクトリに追加するのを忘れないこと。もちろん,Apacheの再スタートもね。

追記(2013/2/14):
 php5apache2_4.dll でググって来られる方がおられるようなので,追記。 PHP5.4.10 から php5apache2_4.dll も PHP のオフィシャルバイナリに同梱されるようになりました。

カテゴリー
Windows

本家のお世話-#32。(PHP5.4.1へアップデート)

投稿アップデート情報  追記(4/28)  追記2(5/2)  追記3(2013/2/14)

 ここのところ,いろいろやってきたが,何をやってもphp5ts.dllがらみのcrashが解決しない。
 気づかないうちに,PHP5.4.1がリリースされていたので,この際,これに変えてみることにした。

 ≪注意≫ 細かい設定は,5.4.0 と同じ。(本家のお世話-#28。参照)

 php.iniについては,5.4.0のものを流用。ただし,;extension=php_sqlite.dll の1行がなくなっているので,このextensionをアンコメントしている場合は,注意が必要。もっとも,削除された拡張モジュールにPECLに移行という但し書きがあったから,残っていたこと自体が,単なる消し忘れだったのかもしれない。
 あと,忘れずに php5apache2_4.dll を展開してできたファイル群に追加すること。<<---- 自戒を込めて。  さて,今差し替えました。crashがなくなるよう祈ってまーす。(4/27 @0:33) 追記(4/28):  php-5.4.1-Win32-VC9-x86.zip に差し替え後,1度もcrashが起きていない。今までは,1日に少ない日でも4回は crash + restart が起きていたから,もう大丈夫ってことだろう。やはり,PHPのバイナリのほうの問題だったみたいだねえ。  現在のサーバの構成は,以下のとおり。

  • WindowsXP HE SP3 (x86) 無理やりSP3をあててる
  • Apache 2.4.2 (VC9) (x86) Apache Loungeから
  • MySQL 5.5.23 (x86)
  • ActivePerl 5.14.2.1402 (x86)
  • PHP 5.4.1 (Thread Safe) (VC9) (x86)

追記2(5/2):
 今朝,8時半ごろ, crash + restart が起きた。5日強で1回だから,劇的に減った。ありがちなメモリリークとかも調べてみないといけないかな。

追記3(2013/2/14):
 php5apache2_4.dll でググって来られる方がおられるようなので,追記。 PHP5.4.10 から php5apache2_4.dll も PHP のオフィシャルバイナリに同梱されるようになりました。

カテゴリー
Windows

記事にしたほうがよかったかも。(で,Apache 2.4.2)

投稿アップデート情報  追記(4/28)  追記2(5/2)

 今朝,りりさんからコメントをもらって,書いた返事がバカ長くなってしまって,表題のように思った次第。

 Apache Lounge でバージョン 2.4.2 が出たときにステイブル バイナリだということで導入したけど,ちょっと早まったかなと思っていた。Bug #61577の件もあるし,「Apache、セキュリティを修正した最新安定版「Apache HTTP Server 2.4.2」リリース」なんていうのもあるし。

 上のリンクでの 2.4.2 は org での話。この間から,Lounge と org では末尾が一つずれていた。ここで触れられている「Windows版では「AcceptFilter None」の実装が変更されたため、mod_sslとの非互換性が発生している」という件に関しては,Apache 2.4.2 Win32 & Win64 availableの「SSL issue.」の書き込みと,SSL connection error… AcceptFilterを見て,大丈夫だろうと踏んだわけ。実際,その辺に関しては,
     <IfModule mpm_winnt_module>
       AcceptFilter http none
     </IfModule>
を入れて以来,あまり問題なく動いているように見える。

 それで,今日そんなこんなで Lounge の zip を見てたら本家のお世話-#28。で書いたのとリリース日が違うことに気づいた(VC10版も,VC9版も,20 Apr ’12 になっている。UTCで,です。)。
 さっそく落として比べてみたら,ファイルも変わっている。これで, org との枝番のずれは解消されたのかなと思ったが,Changelog Apache 2.4を見る限り,変わったのは,OpenSSL from 1.0.1 to 1.0.1a だけなので,そういうわけでもないみたい。しかし,困るよ。名前は変わらず,こっそりファイルの実体だけが変わってちゃ。

 今日も,crash 4回なので,ちょっと,20日版に差し替えてみます。あまり意味はなさそうだけど。
 org 版 2.4.2 の Lounge版というわけではないみたいだし。(@17:44 入替完了)

追記(4/28):
 結局,上記のApache の差し替えは, crash + restart には無関係だった。
 しかし,PHP 5.4.1 がリリースされたので差し替えたら,その後crashがなくなった。今までは,1日に少ない日でも4回は crash + restart が起きていたから,もう大丈夫ってことだろう。やはり,PHPのバイナリのほうの問題だったみたいだねえ。
 現在のサーバの構成は,以下のとおり。

  • WindowsXP HE SP3 (x86) 無理やりSP3をあててる
  • Apache 2.4.2 (VC9) (x86) Apache Loungeから
  • MySQL 5.5.23 (x86)
  • ActivePerl 5.14.2.1402 (x86)
  • PHP 5.4.1 (Thread Safe) (VC9) (x86)

追記2(5/2):
 今朝,8時半ごろ, crash + restart が起きた。5日強で1回だから,劇的に減った。ありがちなメモリリークとかも調べてみないといけないかな。

カテゴリー
Windows

本家のお世話-#29。(Apache2.4.2へアップグレード-#2)

投稿アップデート情報  追記  追記2(4/14)  追記3(4/28)  追記4(5/2)

 続きをすぐにアップしようと思っていたんだが,ホークスの試合があって遅くなってしまった(汗)。近頃,Twitterのタイムライン片手に試合を見るというさみしいことをやっているのだが,今日は久しぶりにTwitterを読まずに済んだ。やっぱり,リアルな同席者のほうがいいな(爆)。

 さて,サーバに関してはここからが本番(汗)。

 現在,自鯖の各ソフトのバージョンは

  • WindowsXP Pro SP3(x86) -
  • Apache2.2.22 ✓
  • MySQL5.5.22 -
  • ActivePerl-5.14.2.1402 -
  • PHP5.3.10 ✓

なので,バージョンアップするのは,✓をつけた Apache と PHP ということになる。

 まずは現状をバックアップ。

  • 万一の場合を考えて,Apache2.2.22 ,PHP5.3.10 のフォルダを丸ごとコピー。
  • 同様に,ドキュメントルート内とcgi-bin内のファイルをを丸ごとコピー。
  • phpMyAdmin で WordPressのデータベースを保存。

 Apache2.2.22 ,PHP5.3.10を完全に削除する。どちらも手動インストールなので,削除も手動で行う。

  • Apacheサーバ停止。
  • フォルダ Apache Software Foundation(Apache2.2.22)とPHP(PHP5.3.10)を完全に削除。
  • 今回は,Apacheサーバの場所が変わるので,サービスとして登録してあるApacheを
    httpd.exe -k uninstall
    で削除。

 Apache2.4.2 ,PHP5.4.0 を導入する。

  • 仮構築で作ったApache24,PHPフォルダを丸ごとC:直下にコピーする。
  • コマンドプロンプトから,Apache24/bin に移動し,httpd.exe[Enter] で一応テストラン。
  • 同様に,httpd.exe -k install[Enter] でサービスとして登録。
  • 使い勝手のために,ApacheMonitor.exe のショートカットを作り,スタートアップフォルダに入れる。ショートカットからサーバを停止する。
  • WordPress でmod_rewriteを使っているので,Apacheのhttpd.conf を開け,
    LoadModule rewrite_module modules/mod_rewrite.so
    をアンコメント。
  • 先ほど保存したlogファイルを Apache24/logs にコピーする。
  • Apacheサーバ起動。

 どうも,動きが遅くときどきエラーが出るので,「プログラムの追加と削除」からMicrosoft Visual C++ 2008 関係をすべて削除し,改めてダウンロードしたMicrosoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)をインストールし,MicroSoft Updateからパッチを当てた。パッケージのバージョンによってエラーが出ることもあるらしいので。

 「案ずるより産むがやすし」とか(笑),なんか無事に構築完了。もっとも,PHP5.4.0が問題なく動くかどうかは,しばらく動かしてみないとわからないので,当面評価は保留だな。

追記:
 errorlogに下記が出ていた。
     (OS 64)指定されたネットワーク名は利用できません。
     : AH00341: winnt_accept: Asynchronous AcceptEx failed.
 この場合,2.2.22までは httpd.conf に
     <IfModule mpm_winnt_module>
       Win32DisableAcceptEx
     </IfModule>
を入れていたところなので,Win32DisableAcceptEx 後継の AcceptFilter を使い,
     <IfModule mpm_winnt_module>
       AcceptFilter http none
     </IfModule>
を入れてみて,様子見。

 Apache2.2.22+PHP5.4.0 のときと比べるとものすごく頻度が減ったが,やはり,
     szAppName : httpd.exe   szAppVer : 2.4.2.0   szModName : php5ts.dll
     szModVer : 5.4.0.0   offset : 000e890f
が起こっている。いろいろググってみた結果,Bug #61577 php5ts.dll crashes when specific extensions are loaded を発見。ドンピシャの記事なんだが,今のところ本当にバグかどうか異論もあるようだし,解決法も見つかっていないみたい。php_mbstring.dll,php_gd2.dll,php_curl.dll が3つそろうとという検証を2人がしているようなので,いよいよのときは,php_curl.dllを無効にしてみるかな。
 ただ,頻度は激減したので,これについてもしばらく様子見の予定。

追記2(4/14):
 php5ts.dllのクラッシュによる再起動があまりに激しいので,Apache2.2+PHP5.3に戻した。しかし,次稿のようなことになって,頭が痛い。

追記3(4/28):
 以下の構成で安定したよー,ぱちぱち。

  • WindowsXP HE SP3 (x86) 無理やりSP3をあててる
  • Apache 2.4.2 (VC9) (x86) Apache Loungeから
  • MySQL 5.5.23 (x86)
  • ActivePerl 5.14.2.1402 (x86)
  • PHP 5.4.1 (Thread Safe) (VC9) (x86)

追記4(5/2):
 今朝,8時半ごろ, crash + restart が起きた。5日強で1回だから,劇的に減った。ありがちなメモリリークとかも調べてみないといけないかな。

カテゴリー
Windows

本家のお世話-#28。(Apache2.4.2へアップグレード-#1)

投稿アップデート情報  追記3(4/28)  追記4(5/2)  追記5(11/10)  追記6(2013/1/3)

 Apache Loungeで,Apache2.4.x系ステイブルが出た(VC10版は,6 Apr ’12 だけど,VC9版は,7 Apr ’12 になっている。UTCで,です。)ので,早速アップグレードに取り組んでみることにした。ただし,さすがに稼働中のサーバ上では危なすぎるので,ひとまず,ローカルに仮構築。

 完了後は,以下のようになる。

  • WindowsXP Pro SP3(x86)
  • Apache2.4
  • MySQL5.5
  • ActivePerl5
  • PHP5.4

 ≪注意≫ ローカルの構築なので,アップロード作業がすっぽり抜けている。ここを参考に実際のサーバをリモート場所に構築しようと思う方は,ファイルの書き換え後の更新アップロードを忘れないようにしてください。

 さて,Apache2.4.x系のインストールから。

  1. httpd-2.4.2-win32.zip と httpd-2.4.2-win32-VC9.zip のどっちを使うかなと思ったが,後者はMicrosoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86)をインストールしなくていいようなので,こちらを使うことにする。httpd-2.4.2-win32-VC9.zipをダウンロード。
  2. httpd-2.4.2-win32-VC9.zip を展開する。展開ファイル中のReadMe.txtに,「Upgrading to 2.4 from 2.2Overview of new features in Apache HTTP Server 2.4を参照せよ」とあったので,一応見に行った。
    Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)のインストールは必須であるが,今回の環境においては既に済んでいる。
  3. httpd.conf のカスタマイズから行う。
    • ServerRoot は,Program Files下に変更せず,デフォルトのまま(つまり,c:/Apache24)。自鯖は,WindowsXPなので問題ないが,Windows7あたりでは,UAC(User Account Control)の関係でいろいろと不具合を聞くので,この際今後のことを考えて,デフォルトのままの設定で行こうと思う。
    • ServerAdmin <管理者のメールアドレス> に変更。
    • ServerName <DNS name>:80
    • カスタマイズには関係ないが,以下のところに注意。Apacheのインストールが初めてなら何も思わないだろうが,ここはRun-Time Configuration の変更に伴って書き方の変わったところのひとつだ。ただし,旧の書き方をしている場合でもmod_access_compatによって,下位互換が実現されるらしい。モジュールのところを見ると,
      LoadModule access_compat_module modules/mod_access_compat.so
      はデフォルトで有効になっており,モジュール群のうち一番初めにロードされるようになっている。

      新しい書き方は,以下の通り。
           <Directory />
             AllowOverride none
             Require all denied
           </Directory>

      Apache2.2では,以下のようになっていた。
           <Directory />
             Options FollowSymLinks
             AllowOverride None
             Order deny,allow
             Deny from all
           </Directory>

    • DocumentRoot “c:/Apache24/htdocs”  —>>  DocumentRoot “G:/WEB/example”
      <Directory “c:/Apache24/htdocs”>  —>>  <Directory “G:/WEB/example”>
    • Options Indexes FollowSymLinks  —>>  Options FollowSymLinks
    • AllowOverride None  —>>  AllowOverride directive-type
      directive-typeに使えるキーワードについては,AllowOverride ディレクティブを参照のこと。
    • 自鯖の場合は,rotatelogsを使って,ログを取っているので,
      ErrorLog “logs/error.log”  —>>  ErrorLog “|bin/rotatelogs -l -f logs/error.%Y-%m-%d 86400”
      アクセスログに関しては,AWStatsの関係上commonではなくcombinedを使うので,
      CustomLog “logs/access.log” common  —>>  コメントアウト
      CustomLog “logs/access.log” combined  —>>  アンコメント
      し,さらに,
      CustomLog “logs/access.log” combined  —>>  CustomLog “|bin/rotatelogs -l -f logs/access.%Y.%m.%d 86400” combined env=!no_log
      no_logについては,「本家のお世話-#4。」参照。

      ちょっと下に書いてあるが,テストランの結果,|bin/rotatelog は |bin/rotatelog.exe でないと動かないことが判明。使う場合は必ず拡張子をつけてください。

    • これも,カスタマイズとは関係ないが,
      # Configure mod_proxy_html to understand HTML4/XHTML1
      <IfModule proxy_html_module>
      Include conf/extra/proxy-html.conf
      </IfModule>
      が追加されている。
  4. ディレクトリ Apache24 を,そっくり C:直下に移動する。
  5. コマンドプロンプトを起動し,Apache24bin に移動して,テストラン。httpd.exe[Enter]
    (OS 2)指定されたファイルが見つかりません。 : AH00089: Couldn’t start ErrorLog p
    rocess ‘bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M’.
    AH00015: Unable to open logs
    というエラーが出る。パイプがうまく働いていないのかと思って,
    ErrorLog “C:/Apache24/bin/rotatelogs -l -f C:/Apache24/logs/error.%Y-%m-%d 86400”
    にしてみた。今度は,
    AppName: httpd.exe AppVer: 2.4.2.0 ModName: msvcr90.dll
    ModVer: 9.0.30729.6161 Offset: 0003bdbc
    が出る。いろいろ試してみて,正解はなんと rotatelogs.exe だった。つまり,2.2.22 までは拡張子なしで通っていたのだが,2.4.2 では .exe まで書かないとダメってこと。
    つまり,  ErrorLog “|bin/rotatelogs.exe -l -f logs/error.%Y-%m-%d 86400″  でO.K.
    えーーーーーーーーっ。こんなにハマったのに!!(号泣)
  6. 気を取り直して,サービスとして登録。
    httpd.exe -k install
    使い勝手のために,ApacheMonitor.exe のショートカットを作り,スタートアップフォルダに入れておく。
  7. ドキュメントルートに,Apache24/htdocs にある index.html をコピーし,ブラウザから,http://localhost/ を確認,無事「It works!」が表示された。

 MySQL5.5 をインストールする。

  1. MySQL Community Server から,mysql-5.5.22-win32.msi をダウンロード。
    えーっと,今気が付いたんだが,「JavaScript 有効」にしておくと「» No thanks, just take me to the downloads!」というリンクが表示され,これをクリックすると,各ミラーがわかるって形なのねぇー。いつものPCは,「JavaScript 無効」なので知らなんだ。
  2. インストール方法は,mysql-5.5.18-win32.msi と全く同じ。(MySQLの再導入を参照)

 次に,ActivePerl 5 をインストールする。

  1. ActivePerl-5.14.2.1402-MSWin32-x86-295342.msiをダウンロードする。
    途中に,チェックボックスがあるがすべてデフォルトのままでインストール。
  2. コマンドラインから, perl.exe -v[Enter]で,バージョンなどが表示されれば,インストール成功。pathも通っている。
  3. Apache の httpd.conf を開き,
    ScriptAlias /cgi-bin/ “c:/Apache24/cgi-bin/”  —>>  ScriptAlias /cgi-bin/ “G:/WEB/cgi-bin/”
    <Directory “c:/Apache24/cgi-bin”>  —>>  <Directory “G:/WEB/cgi-bin”>
    この後のところも,Run-Time Configuration の変更に伴い書き方が変わっている。
    cgi-bin 以外のディレクトリで CGI スクリプトを使う気がある場合は, #AddHandler cgi-script .cgi をアンコメントし,場合によっては .pl を追加するなどする必要がある。
    自鯖では,そのつもりがないのでデフォルトのまま。
  4. G:/WEB/cgi-bin に,Apache24/cgi-bin にある printenv.pl をコピーし,テキストエディタで1行目を perl.exe の場所に書き換える。
    #!D:/programs/perl/bin/perl.exe  —>>  #!c:/perl/bin/perl.exe
  5. Apacheを再起動後,ブラウザから,http://localhost/cgi-bin/printenv.pl を確認。環境が表示されれば,成功。 printenv.pl は削除しておく。

 さて,PHP5.4のインストールに入る。Apache2.4.xとの連携はうまくいくだろうか。ここのブログを読んでくれてる方はご存知の通り,アップデートに失敗したまま,放置プレイである。もっとも,うまく動いてくれるかどうかのチェックは,仮構築では無理な気がする。本鯖の場合も,短時間の稼働ではエラーは出なかったし。

  1. http://windows.php.net/ からphp-5.4.0-Win32-VC9-x86.zipをダウンロードし,ファイルを展開する。
  2. 展開ファイル内の php.ini-production を php.ini にリネームし,下表のようにカスタマイズ。
      デフォルト カスタム
    1 ;default_charset = "UTF-8" default_charset = "UTF-8"
    2 ; extension_dir = "ext" extension_dir = "(ドライブ文字):PHPext"
    3 allow_url_fopen = On allow_url_fopen = Off
    4 ;extension=php_curl.dll extension=php_curl.dll
    5 ;extension=php_gd2.dll extension=php_gd2.dll
    6 ;extension=php_mbstring.dll extension=php_mbstring.dll
    7 ;extension=php_mysql.dll extension=php_mysql.dll
    8 ;extension=php_mysqli.dll extension=php_mysqli.dll
    9 ;extension=php_openssl.dll extension=php_openssl.dll
    10 ;date.timezone = date.timezone ="Asia/Tokyo"
    11 ;sendmail_from = me@example.com sendmail_from = 自分のメールアドレス
    12 ;mbstring.language = Japanese mbstring.language = Japanese
    13 ;mbstring.internal_encoding = EUC-JP mbstring.internal_encoding = UTF-8
    14 ;mbstring.http_input = auto mbstring.http_input = pass
    15 ;mbstring.http_output = SJIS mbstring.http_output = pass
    16 ;mbstring.encoding_translation = Off mbstring.encoding_translation = Off
    17 ;mbstring.detect_order = auto mbstring.detect_order = UTF-8,ASCII,SJIS,EUC-JP,JIS
    18 ;mbstring.substitute_character = none mbstring.substitute_character = none

    14-18 に関しては,デフォルトのままでも動くと思う。特に,17に関しては,自鯖の環境でこうしているので,参考にされる場合は各自対処してください。

  3. 展開時のフォルダ名を PHP にリネームし,そっくり C:直下に移動する。
  4. Apacheが2.4.x になったので,php5apache2_x.dll が変更になる。Apache Lounge から php5apache2_4.dll-php-5.4-win32.zip をダウンロードし,展開後,出来たディレクトリ内の php5apache2_4.dll を PHP 直下に移動する。
         PHP5.4.10 から php5apache2_4.dll も PHP のオフィシャルバイナリに
         同梱されるようになった(12/28追記)
  5. php5apache2_4.dll に同梱の ReadMe.txt に従い,Apache の httpd.conf の LoadModule の一番最後に
    LoadModule php5_module “c:/php/php5apache2_4.dll”
    を追加。PHP のインストールディレクトリ名について,大文字,小文字が入り乱れているが,Windowsは大小を区別しないので,無問題。気になる場合は,自分のインストール環境にそろえてください。
    AddHandler application/x-httpd-php .php
    PHPIniDir “C:/PHP”
    については,httpd.conf の末尾に以下の形で追加。
         <IfModule mod_php5.c>
           AddHandler application/x-httpd-php .php
           PHPIniDir “C:/PHP”
         </IfModule>
    AddType application/x-httpd-php .php だったのが, AddHandler application/x-httpd-php .php となっている。今まで,AddType と AddHandler の違いなんて考えたこともなく,どこかで見かけた通りに設定してきたが, AddTypeAddHandler を読んでみると, AddHandler の方が妥当なようだ。
    <IfModule mod_php5.c> と </IfModule> で挟むのは,Apache モジュール mod_so の書き方が変わっていないので,あったほうがいいかなという程度。
  6. Apache の httpd.conf の
    DirectoryIndex index.html  —>>  DirectoryIndex index.php index.html
  7. テキストエディタで,<?php phpinfo() ?> を記入した test.php を作り,ドキュメントルートにコピー。Apacheを再起動後,ブラウザから http://localhost/test.php を確認し,phpinfo() ページが表示されれば,インストール完了。
    ドキュメントルートの test.php は削除し,php.ini の
    ;disable_functions =  —>>  disable_functions =”shell_exec, suexec, passthru, phpinfo”
    に変更後,Apacheを再起動。

 一応,仮構築はできた。あとは,本番ですな。(ドキドキ)

早速の追記:
 書き忘れです。PHPのパスを通していないが,Apacheから使うだけなら通さなくても問題ない。
 と書いたのだが,近頃ググっていて,パスがらみのトラブルを見たので,WinVista・7・8やWinサーバ系だと違うのかもしれない(12/27追記)。

追記(4/12):
 次稿に書いたが,
     (OS 64)指定されたネットワーク名は利用できません。
     : AH00341: winnt_accept: Asynchronous AcceptEx failed.
に対して,
     <IfModule mpm_winnt_module>
       AcceptFilter http none
     </IfModule>
を入れてから,調子がいいように思える。

追記2(4/14):
 php5ts.dllのクラッシュによる再起動があまりに激しいので,Apache2.2+PHP5.3に戻した。しかし,次々稿のようなことになって,頭が痛い。

追記3(4/28):
 以下の構成で安定したよー,ぱちぱち。

  • WindowsXP HE SP3 (x86) 無理やりSP3をあててる
  • Apache 2.4.2 (VC9) (x86) Apache Loungeから
  • MySQL 5.5.23 (x86)
  • ActivePerl 5.14.2.1402 (x86)
  • PHP 5.4.1 (Thread Safe) (VC9) (x86)

追記4(5/2):
 今朝,8時半ごろ, crash + restart が起きた。5日強で1回だから,劇的に減った。ありがちなメモリリークとかも調べてみないといけないかな。

追記5(11/10):
 PHPの設定について,extra-confを作る話を「覚え書-#12。」に書いたので,そっちも見てください。

追記6(2013/1/3):
 VC11 でビルドの Apache 2.4.6 win32 binary について新記事を書いた。

カテゴリー
WordPress

WordPress File Monitor Plus 1.4.x

投稿アップデート情報  追記(2017/1/24)

 WordPress File Monitor Plus 1.4が出た。Windows系のサーバの場合は,必ず,1.4.1を使ってください。1.4ではうまく動かないとScottに連絡したところ,素早く対処してくれたのが,1.4.1です。

 主たる改良点は,WordPress File Monitor Plus に検索させたくないサイトを設定するときに,ワイルドカード(*)が使えるようになったこと。

 すでに,1.3 を使っている場合は,現在の設定は,アップデート時に自動的に新しい書式に変更されるが,新規導入の場合は,もちろん手動での設定が必要。指定場所は,「無視するディレクトリ/ファイル」のところ。

 書式については,絶対パスでも,*.txtのような形式でも可。自分の指定したいファイルの存在場所をよく考えて,うまくいく方法を使ってください。

追記(2017/1/24):
 WordPress File Monitor Plus は開発終了の模様。 Fork として WordPress File Monitor があるのでそちらを使うといいと思う。

カテゴリー
Windows

本家のお世話-#27。(PHP5.4.0へアップデート失敗)

投稿アップデート情報  追記2(3/5)  追記3(3/7)  追記4(4/11)

 前記事の最後に1行書いたが,php-5.4.0-Win32-VC9-x86.zipが出た。

 Version 5.4.0のChangeLogは,こんな感じ。Twitterで「php5.4.0」をキーワードに検索してみたが,現時点(20:20)ではそれほど不具合の報告はないようだ。

 変更点はいろいろだが,バージョンアップで問題になるのは,下位互換性のない変更点かな。PHP 5.4.x で推奨されなくなる機能削除された拡張モジュールあたりも,確認しておいたほうがいいかもしれない。

 というところで,自分が把握できていない変更点について,ちょこちょこと確認してみた。

 PHP5.3.10のiniで,マジッククオート関係を確認してみると,
    ; magic_quotes_gpc
    ; Production Value: Off

    ; http://php.net/magic-quotes-runtime
    magic_quotes_runtime = Off

    ; http://php.net/magic-quotes-sybase
    magic_quotes_sybase = Off
になっている。現時点で,これで動いてるんだから,5.4.0にしても問題ないかもな。
 「set_magic_quotes_runtime() を実行すると E_CORE_ERROR が発生」という記述が少し気がかり。wp-includes/class-phpmailer.phpとwp-admin/includes/class-pclzip.phpでset_magic_quotes_runtime()が使われてるみたい。今までは,多分FALSEが帰ってたんだと思うんだが。

 short_open_tagについては,本家のお世話-#25。で確認済み。

 一応大丈夫そうなので,アップデートしてみたんだけども,うまくいかない。<?php phpinfo() ?>で確認した時点までは問題なく,ブログもちゃんと表示されたんだが,いろんなところで,「PHP Fatal error: Maximum execution time of 30 seconds exceeded in」 が起こり,これに関連して,「エラー発生アプリケーション httpd.exe、バージョン 2.2.22.0、エラー発生モジュール php5ts.dll、バージョン 5.4.0.0、エラー発生アドレス 0x********」が記録されている。しかも,Apacheの再起動が発生する。再起動後,何事もなかったように,直前のリクエストに対するページが表示はされるのだが,どうもどこかで無理が行っている気がするので,5.3.10に戻した。

 何となく,MySQLのデータベースがらみのような気がして,昔を思い出しlibmysql.dllをsystem32に入れてみたりしたが,変化はないようだ。5.4.xはもうちょっと待ってみるかな。

追記:
 「PHP Fatal error: Maximum execution time of 30 seconds exceeded in」に関しては,単純に時間制限を緩めてやればいい気もするけど,PHP5.4のベンチマークが劇的に改善ていう報告があるのに,なんで今まで起きていなかったタイムアウトが起こるのかという疑問がある。私の理解に何か間違いがあるのか。
 誰か,助けてください。あと,何を試してみればいいんだろう。(泣)

追記2(3/5):
 WordPressのconfigのデバッグを有効にしてみたり,php.iniのエラー表示を有効にしてみたが,出てくるエラーは5.3.10のときと変わらない気がする。
 Apacheが死ぬときに,「child process exited with status」が出ているのに気付いた。このキーワードでググったら,PHPで再帰呼び出しの階層があまりに深くなりすぎると、同様のエラーログでApacheが死ぬことがあります。(Apache 2.2.4 + PHP 5.2.2で確認) — Zefard? 2007-06-06 (水) 22:26:47というのがあった。これ関係かな。

追記3(3/7):
 「Parent: child process exited with status 3221225477 — Restarting.」まるごとでググったら,Bug #50215 があって,最後のほうに, [2012-02-25 01:40 UTC] のタイムスタンプで,
   Please try using this snapshot:
    http://snaps.php.net/php5.3-latest.tar.gz
   For Windows:
    http://windows.php.net/snapshots/
   Please try a recent version without xdebug and other additional extensions.
というのがあった。で上のは5.3だけど,似たエラーはちょくちょくあるのかもしれない。現在のsnapshotはVersion: 5.4.1RC1-devだったので試してみたが,トラブルは解消しなかった。残念。

追記4(4/11):
 PHP導入についての新しい記事を,本家のお世話-#28。本家のお世話-#29。に書いた。

カテゴリー
everyday life

Apache HTTP Server 2.4.1

投稿アップデート情報  追記(4/11)

 ついに,出ましたねぇ,2.4.x系お初のGA(Apache HTTP Server 2.4.1)。

 orgでは,2/21リリース。loungeでは,同じ枝番で2/15になっているが,こっちのほうは,「this is fairly new」となっており,GAではないようだ。

 実際,Apache HTTP Server 2.4.1 Releasedにも,「重要: Windowsユーザへ:Win32DisableAcceptExの代わりにAcceptFilter Noneを使うことになっているが,mod_sslとの同時使用時に問題があるようだ。今のところ,Apache 2.4.1は,まだすべてのWindowsサーバをカバーしているとは言えない。httpd 2.4のステイブルなWindowsバイナリのディストリビューションはまだないが,近いうちに種々の依存関係が解決されて,そちらのほうもベータからGAになるだろう。」という記述がある。

追記(4/11):
 Apache LoungeでステイブルなApache2.4.x系が出たので,新しい記事を本家のお世話-#28。本家のお世話-#29。に書いた。

カテゴリー
Windows

本家のお世話-#26。(Apache2.2.22へアップデート)

投稿アップデート情報  追記(4/11)

 待っていたApache Lounge版のApache2.2.22が出た。早速ダウンロード。

 News & Hangoutによると,APR 1.4.6 と zlib 1.2.6 待ちだった模様。Changelog Apache 2.2はこんな感じ。

 いろいろ変わっているんだが,httpd.confで変わっているのは,次の部分だけ。
     ***** Apache2.2.21
      427: # MaxRanges: Maximum number of Ranges in a request before
      428: # returning the entire resource, or 0 for unlimited
      429: # Default setting is to accept 200 Ranges
      430: #MaxRanges 0
     ***** Apache2.2.22
      427: # MaxRanges: Maximum number of Ranges in a request before
      428: # returning the entire resource, or one of the special
      429: # values ‘default’, ‘none’ or ‘unlimited’.
      430: # Default setting is to accept 200 Ranges.
      431: #MaxRanges unlimited
     *****

 httpd.exeをちょっと停止。展開したファイルを現在のものと置き換え。いつもログファイルの保存を忘れるので,注意。httpd.exeを再起動。

 初めてインストールする場合は,本家のお世話-#14。(Apacheの再導入)を参照してください。

追記(4/11):
 Apache導入についての新しい記事を,本家のお世話-#28。本家のお世話-#29。に書いた。

カテゴリー
Vulnerability

本家のお世話-#25。(PHP5.3.10へアップデート)

投稿アップデート情報  追記(2/7)  追記2(2/7)  追記3(2/9)  追記4(4/11)

 Effective DoS attacks against Web Application Plattforms ? #hashDoS のように PHP5.3.9 に追加されたコードに,remote からのコードの実行を招く別の欠陥があるという指摘があったばかりだが,PHP5.3.10 が出た。PHP News Archiveよれば,「All users are strongly encouraged to upgrade to PHP 5.3.10.」ということなので,早速やる。

 Apacheもorg版は2.2.22になってるんだが,Lounge版はまだのようだ。

  1. 何はともあれ,php-5.3.10-Win32-VC9-x86.zip をダウンロード,サーバ機がWindowsXpSP3(x86)なので。
  2. 適当なところに,ファイルを展開。
  3. 5.3.9 の php.ini-production と 5.3.10 の php.ini-production を
    fc /n c:php.ini-production c:phpphp.ini-production >c:compare.txt
    で比べてみた。相違点はなかったので,php.iniは 5.3.9 のものをそのまま使う。
  4. php.ini以外の展開したファイルと5.3.9のファイルをそっくり差し換える。

 
 ところで今日は立春ですね。

追記(2/7):
 そういえば,PHP 5.4.0がRC6まで行っている。次の候補版のリリースは2月2日と書いてあるが,少し遅れいてるみたいで,RC7は,まだPHP Quality Assurance Team Web Page.にしかないようだ。遅れているわけではなくて,NEWSもちゃんと出ていた。http://www.php.net/のトップに記載がないだけらしい。  斜字体は2/9追記
 NEWSを読んでいてもピンとこないことばかりで,これらのテストをしようなどという大それた気は毛頭ないのだが,NEWSを読んでいてちょっと気になる項目があった。「<?= は今後short_open_tagの設定にかかわらず,有効になります。」と書いてある。そういえば,どっかほかのところでも,そんなことを読んだ気がする。
 short_open_tagについては,昔,痛い目にあったことがある。5.3.10のphp.iniを調べてみたら,
    ; short_open_tag
    ; Default Value: On
    ; Development Value: Off
    ; Production Value: Off
となっていた。使っているのは,php.ini-production だから,自鯖では当然Offになっているわけだ。で,恐る恐るOnにしてみた。こいつが関係あるのは,確か,PHPをXMLと組み合わせたときの<?xml ?>とかに関係あるだけだったと思うから,今は,WordPress以外のスクリプトはほとんど使っていないし,使ってる分も自分で作ったものだけのはずだから,大丈夫だとは思うんだが……

 さて,Apacheを再起動。

 大丈夫みたい。ホッ。これでこの件に関しては5.4.0にするときも問題なしだね。

追記2(2/7):
 ここのところ,1週間ばかりhttp://www.gknw.de/mirror/curl/win32/に接続できなかった。http://curl.haxx.se/を見ると,version 7.24.0が出ているみたいだけどと思いながら,他に落とせるところはないだろうかと探していて,http://fossies.org/windows/www/curl-7.24.0-ssl-sspi-zlib-static-bin-w32.zip/を見つけた。
 で,今まで読み違えていたcurl.exeに関することと,最近のPHPにはもともとlibeay32.dll も ssleay32.dll含まれていることに,気づいた。どこかで勘違いして,「curl.exeがPHPのライブラリとしている」と思い込んでしまっていたのだが,実はいらなかった。どこで勘違いしたのだろう。cURLのインストール手順には,「libeay32.dll および ssleay32.dll が PATH の通った場所に存在する必要があります。」とちゃんと書いてあるのに!! 落ち込む。
 一応趣味だから,libeay32.dllはversion 7.24.0にしたけど……(爆)

追記4(4/11):
 PHP導入についての新しい記事を,本家のお世話-#28。本家のお世話-#29。に書いた。