画像変換スクリプトの設置
既定では、メインのスクリプト(pc2m.php)が、HTMLの変換処理とともに画像の変換処理も行いますが、画像の変換処理では、その出力内容が画像データとなるため、スクリプトは、出力内容が画像データであることを示す「Content-Type:image/gif(またはjpegまたはpng)」のようなヘッダ情報を、データの出力に先んじて出力する必要があります。
しかし、無料のレンタルサーバを利用している場合などで、Apacheのmod_layout機構によって、HTMLやCGI、PHPなどに広告が強制的に挿入される環境では、スクリプトがこのヘッダ情報を出力できないため、画像が正しく表示されません。
レンタルサーバの事業者が、このようなCGI|PHPなどに対して、mod_layoutを無効にする方法を提供している場合は、メインのスクリプトをコピーして、画像の変換処理を専門で行うスクリプトを分離し、それに対して、提供されている方法を適用することで、この問題を回避することができます。
.htaccessに「LayoutIgnoreURI」ディレクティブを記述する方法
「LayoutIgnoreURI」ディレクティブの利用が許可されている場合は、この方法を採ってください。
このディレクティブは、特定のファイルに対してmod_layoutを無効にするものです。画像変換スクリプトに対して有効な.htaccessファイルにこれを記述し、その対象に画像変換スクリプトを指定することで、画像変換スクリプトは画像を正しく表示することができます。
以下の構成例では、メインのスクリプトを「im.php」という名前でコピーして画像変換スクリプトとしています。
この場合、コピー先は、メインのスクリプトと同じディレクトリにしてください。もし、異なるディレクトリにコピーする場合は、mod_layoutの対象外ディレクトリに画像変換スクリプトを設置する方法も参照する必要があります。
/home/hoge └┬public_html http://www.example.com/ └┬pc2m ├─.htaccess (このファイル中に「LayoutIgnoreURI /pc2m/im.php」と記述する) ├─pc2m.php http://www.example.com/pc2m/pc2m.php (メインスクリプト) └─im.php http://www.example.com/pc2m/im.php (画像変換スクリプト=メインのコピー)
画像変換スクリプトに対して有効な.htaccessファイルに以下の行を追加します。
右辺の、画像スクリプトのURLは、実際のものに応じて編集してください。
LayoutIgnoreURI /pc2m/im.php
設定ファイル(Config.inc.php)で、定数IMAGE_CONVERTERの値を以下のように変更します。
この値は画像変換スクリプトのURLで、メインのスクリプトからの相対パス、またはhttp~で始まる絶対パスです。
define('IMAGE_CONVERTER', 'im.php');
mod_layoutの対象外ディレクトリに画像変換スクリプトを設置する方法
レンタルサーバ事業者によっては、特定の名前のディレクトリに配置されたファイルは、mod_layoutの対象外となる措置を講じている場合があります。例えばXREA/VALUE-DOMAINのサーバでは、「x」ディレクトリ内のファイルがこの適用を受けます。
また、この理由に因らず、メインのスクリプトと画像変換スクリプトを異なるディレクトリに配置する場合も、この項の記述に従ってください。
以下の例では、メインのスクリプトを「x」ディレクトリに、「im.php」という名前でコピーして画像変換スクリプトとしています。
/virtual/hoge ├─data (セッションデータの保存用ディレクトリ) └┬public_html http://hoge.xrea.com/ └┬pc2m ├─pc2m.php http://hoge.xrea.com/pc2m/pc2m.php (メインスクリプト) └┬x └─im.php http://hoge.xrea.com/pc2m/x/im.php (画像変換スクリプト)
「x」ディレクトリに作成したim.phpをテキストエディタで開き、冒頭にある、設定ファイル(Config.inc.php)の読み込みを行っている箇所(「@include_once 'Config.inc.php';」とある行)を、メインスクリプトの配置ディレクトリにあるこのファイルを読み込むように、パスを修正します。
上図の構成例では、これは以下のようになります。
@include_once '../Config.inc.php';
設定ファイル(Config.inc.php)で、定数IMAGE_CONVERTERの値を以下のように変更します。
これは画像変換スクリプトのURLで、メインのスクリプトからの相対パス、またはhttp~で始まる絶対パスとなります。
define('IMAGE_CONVERTER', 'x/im.php');
設定ファイル(Config.inc.php)で、include_pathに、メインスクリプトの配置ディレクトリのローカルパスを追加します(「:」はパスの区切り文字で、UNIX系では「:」、Win32では「;」です)。
これは、画像変換スクリプトが、メインスクリプトと同じディレクトリにある各インクルードファイルを読み込めるようにするためのものです。なお、PEARをメインスクリプトと同じディレクトリには配置しておらず、追加パスの設定が必要な場合には、そのパスも追記してください。
ini_set('include_path', '/virtual/hoge/public_html/pc2m:'.ini_get('include_path'));
セッション機能を利用する場合は、設定ファイル(Config.inc.php)で、以下の2点の設定を行ってください。これらは、メインスクリプトと画像変換スクリプトが、同じセッションデータを共用するためのものです。
session.save_path(セッションの保存先ディレクトリ)を、絶対パスで指定します。
ini_set('session.save_path', '/virtual/hoge/data');
定数SESSION_COOKIE_PATHの値を設定します。これはいわゆるCookieパスで、メインスクリプトと画像変換スクリプトの、両方のURLのパス部分に前方一致するパスを指定してください。上図の構成例では、「/pc2m/」がこれに該当します。
define('SESSION_COOKIE_PATH', '/pc2m/');
既知の問題
2006年5月現在、XREA/VALUE-DOMAINのサーバでは、PCでの閲覧時に挿入される広告に含まれるJavaScriptコードが、セッションデータの「認証キー」に影響を与え、セッションが継続しない現象が確認されています(コードの確認を行っていないため詳細は不明)。通常の携帯端末はJavaScriptを解釈せず、そもそもこれらからのアクセス時に挿入される広告にはJavaScriptコードは含まれないため、実用上問題はありませんが、PCで動作確認などを行う際は、JavaScript機能を無効にして行う必要があるかもしれません。
2005/08/10
トラックバック
このエントリーのトラックバックURL:
http://www.rcdtokyo.com/mt/mt-rcdtokyo5428-tb.cgi/739
コメント
現在、WindowsXP・ActivePerl・AnHttpd の環境で自宅サーバーで設定をしていますが、画像表示の処理がうまく行われません。画像変換スクリプトの設置を参考にしていますが、上手く設定できませんので教えていただけませんか?
Posted by セナさん at 2006/10/18 17:08
すいません
自己解決しました
php.ini の
extension=php_gd2.dll
がコメントアウトで無効になっていました。
Posted by セナ(自己解決)さん at 2006/10/18 17:58
デフォではextensionsが全部OFFですもんね。
あれ、最初は結構ハマるんだ…。
Posted by ucbさん at 2006/10/19 12:41
WindowsXP・Apache2・ネームベースのVirtualHostの自宅サーバーで設定していますが_check.php、pc2m.phpの画面が表示されません。
試しに、Config.inc.phpを抜きますと_check.phpの画面が現れます。
PHP Version: 5.0.5
・magic_quotes_gpc: is Off
・XML: is loaded
・OpenSSL: is not loaded ←Config.incのsslはfalseにしてあります。
・mbstring: may not be available ←php.iniのextension=php_mbstring.dllのコメントを外してあります。
・mbstring.func_overload: is Zero (or undefined if mbstring is not loaded)
・mbstring.encoding_translation: is Off (or undefined if mbstring is not loaded)
・PHP include_path: .;C:\php5\pear
・PEAR Packagesは全てsuccessfully included
Session、GD Library、画像変換テストの確認が行いません。
上記の”画像変換スクリプトの設置”を試したのですが、やはり画面が表示されません。
またphp.ini のextension=php_gd2.dllのコメントを外してあります。
どのような原因が考えられるか、教えていただきませんか?
Posted by sanzoさん at 2006/11/12 18:37
_check.phpには不具合があり、mbstringが無効の場合、デフォのConfig.inc.phpを読み込むと空ページを表示して死亡します。ということで、「画面が表示されません」はmbstringが無効なことが原因なのでしょう。
php_mbstring.dllは正しいパスにありますか?Apacheの起動時にエラー出てませんか?「」とだけ書いた拡張子が.phpのファイルを実行して表示される内容に、mbstringは含まれてますか?
Posted by ucbさん at 2006/11/12 23:41
早速のご返事ありがとうございます。
やはり何も表示されません・・・
>php_mbstring.dllは正しいパスにありますか?
php5ts.dllをsystem32にコピーして、
Apacheのhttp.confには
LoadModule php5_module c:/php/php5apache2.dll
AddType application/x-httpd-php .php
とし、php.iniのextension=php_mbstring.dllのコメントは外してあります。
>Apacheの起動時にエラー出てませんか?
エラーログには”[warn] Cannot get media parameter.”とありますが、よくわかりません。
>「」とだけ書いた拡張子が.phpのファイルを実行して表示される内容に、mbstringは含まれてますか?
「」以外には何も表示されません。
Posted by sanzoさん at 2006/11/13 01:02
いやだから、mbstringが動作していないのがそもそも問題でなんですってば。
5.0.5って随分古いバージョンなんで全面的に入れ替えてみたらいかが?
なお、PHP5ではもはや、DLLをシステムフォルダにコピーする方法は推奨されません。多くの「入門書」がウソを書いてるので騙されないように。以下の本家マニュアルのみを信じましょう。
http://www.php.net/install.windows.manual
Posted by ucbさん at 2006/11/13 01:38
参考までに。以下Windows+Apache2へのPHP5のインストール手順です。
※ここではC:\phpにインストールしていますが、それ以外にインストールする場合は、以下の「C:\php」、「C:/php」を適宜読み替えてください。
■Apache2をいったん停止。
■system32フォルダにコピーしてあるPHPのDLLファイル(php5apache2.dllなど)はすべて削除してください。
■PHP5の最新版ZIPパッケージをダウンロードし、ZIPアーカイブ内のファイルとフォルダをC:\php以下に展開。
http://www.php.net/downloads.php
■Windowsのシステム環境変数「PATH」に「C:\php」を追加(マイコンピュータをマウスの右ボタンでクリックして表示されるメニューから「プロパティ」を選んで表示される「システムのプロパティ」で、「詳細設定」タブの「環境変数」ボタンをクリックし、システム環境変数の項目の中から「PATH」を探して、現在の値に「C:\php」を追加)。
■Apache2のhttpd.confをテキストエディタで開き、任意の場所に以下の行を追加(項目が重複している場合は以下の通りに変更してください)。
LoadModule php5_module C:/php/php5apache2.dll
PHPIniDir "C:/php"
AddType application/x-httpd-php .php
■C:\php\php.ini-recommendedをphp.iniにリネーム(または現在のphp.iniをここにコピー)。
■C:\php\php.iniをテキストエディタで開き、520行目の「extension_dir = "./"」を「extension_dir = "./ext/"」に変更。
さらに、必要なextensionの行の、先頭のコメント記号(;)を削除。PC2Mに必要なのは、631行目(php_mbstring.dll)、639行目(php_gd2.dll)、653行目(php_openssl.dll)です。
■Apache2を起動。
ちなみにPHP5同士であれば、フォルダのリネームだけで異なるバージョンなどを切り替えることができます(使用するバージョンをC:\phpにリネームする)。
PHP4とPHP5を共存させる場合は以下をご覧ください。
http://www.rcdtokyo.com/ucb/contents/i000697.php
Posted by ucbさん at 2006/11/13 14:14
詳細に書いていただき、ありがとうございます。
PHPIniDir "C:/php/"とした以外は全てまねてみたのですが、やっぱりダメでした。
phpinfo();のConfigure Command でmbstringが出てこないことが気になり、
マルチバイト対応版PHP5(http://www.geocities.jp/rui_hirokawa/php/win/)でもやってみたのですが、Configure Command に"--enable-mbstring"と出てくるものの、_check.phpは空ページなままです。
どうしたら良いのでしょうか?
Posted by sanzoさん at 2006/11/13 17:46
Configure Commandではなく、「mbstring」という項目自体存在していますか?(標準状態ではlibxmlとodbcの間に出てくる筈)。これがあり、内容が正しいっぽければ(例えば「Multibyte Support」が「enabled」)mbstringは有効でしょう。そうでなければmbstringは無効です。
mbstringが無効の場合。
php_mbstring.dllファイルはどこにありますか?
php.iniのextensionsは、そのファイルのあるフォルダへのパスになっていますか?
system32フォルダなどに、異なるバージョンのphp_mbstring.dllファイルやphp5apache2.dllファイルが存在していませんか?
mbstringが有効であることを確認したら、まずはConfig.inc.phpをリネームして(読み込まないようにして)、_check.phpを実行してください。
(内容はともかく)結果がちゃんと表示されるようなら、今度はConfig.inc.phpを元の名前に戻して_check.phpを実行してください。これで空白ページが表示されるなら、Config.inc.phpのどこかに文法ミスがあります。
■おせっかいな余談。
挙げられている、ジオシティーズにある「マルチバイト対応版~」のインストーラは決して使用しないでください。
理由その1。(現時点でPHP5の場合は)致命的な不具合のある古いバージョンがインストールされてしまう。
理由その2。自分がなにをやっているのかわからないままインストールが行われる結果、バージョンアップなどの作業になにをやればいいのかわからなくなってしまう。
WindowsでのPHPのインストールは必ず本家サイトにあるZIPアーカイブで行うようにしてください。現在のPHP4/5ははなからマルチバイト対応であり、インストールも非常に簡単です。
Posted by ucbさん at 2006/11/13 18:14
「mbstring」という項目自体存在しません。
php_mbstring.dllファイルはC:\php\extに入っています。
>php.iniのextensionsは、そのファイルのあるフォルダへのパスになっていますか?
「extension_dir = "./ext/"」ということですよね。
system32フォルダに名前にphpが付くものはありません(削除しました)
■試しにジオシティーズにある「マルチバイト対応版~」でもやってみました。
こちらではmbstringが有効です(「Multibyte Support」が「enabled」、他も正しいっぽい)
Config.inc.phpをリネームして(読み込まないようにして)、_check.phpを実行してみますと、文字化けしますが「mbstring: is available 」となります。
再び、Config.inc.phpを元の名前に戻して_check.phpを実行してみると、不思議とちゃんと表示されます(文字化けしていますが)
Posted by sanzoさん at 2006/11/13 19:12
ジオシティーズのことは忘れてやってくださいな(廣川さーん、これ消そうよ)。文字化けって…。
php.iniファイルがC:\WINDOWS\system32やC:\WINDOWSにありませんか?C:\phpにあるだけですか?php.iniの「extension=php_mbstring.dll」行の先頭のコメント記号はもちろん外れてますよね?Apache2を再起動して、直後のエラーログ(C:\Program Files\Apache Group\Apache2\logs\error.log)に、「PHP Warning: PHP Startup: Unable to load dynamic library」とかいうのが出てませんか?
Posted by ucbさん at 2006/11/13 20:52
CGIとしてPHP5を設置しましたらうまく行きました
# PHP5/CGI
AllowOverride None
Options None
Order Allow,Deny
Allow from localhost
Allow from 192.168.11.0/24
ScriptAlias /php/ "C:/php/"
AddType application/x-httpd-php5-cgi .php
Action application/x-httpd-php5-cgi "/php5/php-cgi.exe
Posted by 名無しさん at 2006/11/13 21:59
今回、Joomla!のサイトを携帯でも閲覧できるようにツールを設置中ですが、画像変換テストで『404』エラーになってしまいます。
.htaccessに「LayoutIgnoreURI」ディレクティブを記述する方法を参考に設定し、Converted Imageで確認した場合は、画像が表示されます。
しかし、実際に自分のHPを確認しようとすると、やはり『404 Not Found』となってしまいます。
どのように対処すれば良いか、教えてください。
レンタルサーバ:CMSSQUARE
チェックPHP:http://flatbeers.jm.cmssquare.com/pc2m/_check.php
最終的に表示したいURL:http://flatbeers.jm.cmssquare.com
宜しくお願いします。
Posted by flatbbersさん at 2008/02/17 22:53
激しく遅レスですんません。
確かに404ですね。発生条件は、自分で自分のドメインにアクセスした場合という感じのようですが、このパターンはサーバ側になんらかの細工がしてある場合、というのが多いです。症状からして、LayoutIgnoreURIとかのハナシも含めてスクリプト側ではないと思われ。
レスポンスがどうなってるか逐次追いかけていけばわかると思いますが、試してみようにも鯖屋さんが新規登録停止中らしいので試せないです。
Posted by ucbさん at 2008/02/29 18:51
回答ありがとうございます。
今、別サーバに移行予定なので、
移行後でもうまくいかなかった場合、
また質問させて頂きます。
Posted by flatbeersさん at 2008/03/05 12:54