拡張子.htmlにphpを記述CGIのように動かす

このQ&Aのポイント
  • Mac OSXの環境で拡張子.htmlにphpをCGIのように動かす方法について質問があります。
  • 具体的には、.htaccessの設定やphp.iniの設定などについて知りたいです。
  • 初心者のため専門用語の理解はまだ限られていますが、よろしくお願いします。
回答を見る
  • ベストアンサー

拡張子.htmlにphpを記述CGIのように動かす

始めての投稿・質問です。 当方、目下独学でWebサイトの自作に挑戦中です。 環境は、Mac OSX(mavericks),MAMP,Dreamweaver CC (+ PHP) 。 上記環境でphpをCGIのように動かしたいよ思っています。 質問[1] .htaccessの設定は以下で正しいでしょうか? Addhandler application/x-httpd-php55cgi .php .html .htm 質問[2] php.iniの設定は以下で正しいでしょうか? error_reporting = E_ALL | E_STRICT default_charset = "UTF-8" include_path = "Applications/MAMP/bin/php/php5.5.3/lib/php" date.timezone = Asia/Tokyo mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = UTF-8 mbstring.http_output = pass mbstring.encoding_translation = on output_buffering = on mbstring_substitute_character = "?" 質問[3]上記以外にも重要な設定事項や記載事項があれば教えてください。 以上、なにぶん初心者のため勉強範囲もまだ狭く、専門用語も十分理解把握できない かもしれません。なにとぞそこを考慮してご教示をお願いいたします。

  • PHP
  • 回答数4
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.4

CORE SERVER.JP - PHPをCGIとして動かす方法について http://www.coreserver.jp/help/index.php/phpcgi/ 参考にされたのはこちらの記事でしょうか?ちょっと内容が古そうですね。 >> そのほうがセーフモードやユーザー名の制限が無くなる…とありました。 PHPのセーフモード自体がすでに昔の機能なんですよね… PHP Manual - セーフモード http://php.net/manual/ja/features.safe-mode.php パーミッション644で動作するのかに関しては、私が調べた限りでは肯定する意見も否定する意見も存在したので、実際に検証してみないことには明言することは出来ません。一般的にCGIという枠で考えれば755が必要だと思ったのですが…ただ、これがCGI版のメリットではないことは断言できます。モジュール版はパーミッション644で動作します。 もっと詳しい記事を見つけたので掲載させていただきます(CentOS向けですが)↓ レンタルサーバー・自宅サーバーの設定・構築のヒント http://server-setting.info/centos/php_cgi_module_exchange.html http://server-setting.info/centos/apache_fastcgi_fcgid_php.html http://server-setting.info/centos/apache-mod_fastcgi-php-fpm.html まあ、特に拘らずとも標準のモジュール版を使っておけば何も問題はないと思います。練習環境でパフォーマンスチューニングなんてする必要もありませんし。

hozuhiro3
質問者

お礼

大変ご親切な回答に感謝しています。サーバー側での動作やセキュリティを事前に自分なりに検証した上で、試作を続行したいと思います。時間がかかりますが今後もよろしくお願いいたします。

hozuhiro3
質問者

補足

http://www.fumi.org/neta/201205sv.html によりますと、phpはModule方式かCGI方式かの2者択一ではなく、両者は共存でき、呼び出し方の違いだけ。実行形式を切り替えているのではない。という記述を見つけました。 脆弱性解消にはmime_moduleなどにAddHandler cgi-script .hoh Action cgi-script / cgi-bin/php-cgi と記述すれば良い。とありました。 アドバイスいただいた http://server-setting.info/centos/apache_fastcgi_fcgid_php.html も以前に参照していましたが、PHPをCGi版で動作させるとphpinfo( );の出力情報に「Server API CGI/FastCGIと表示され、phpはFastCGIに対応している… となっています。両者が共存できる、という点は同じ解説でなないでしょうか?

その他の回答 (3)

noname#244856
noname#244856
回答No.3

ちなみに... 私は error_reporting = E_ALL | E_STRICT を推奨しておきます。 最初から error_reporting = E_ALL & ~E_NOTICE で書くとダメプログラマ一直線ですので。 E_NOTICEは変数名のタイプミスを見つけるのにも非常に役立ちますし。

hozuhiro3
質問者

お礼

error_reporting の記述に関して参考になりました。ありがとうございました。 なお、一部に補足を加えました。アドバイスをいただけたら幸いです。

hozuhiro3
質問者

補足

特に確認したいこと… .htaccessの記述の件。サクラネットのサービス説明では拡張子.phpの場合に、x-httpd-phpcgi .phpと記述するように案内しています。 私の場合は 拡張子.htmlで要所にphpを記述します。その場合でも 「x-httpd-phpcgi .php .html .htm」で動くのかが心配です。

noname#244856
noname#244856
回答No.2

今時純正のCGIなんか使う人なんかいるんでしょうか…「mod_php」か「FastCGI(mod_fcgid/mod_fastcgi)」の2択だと思いますが。純正のCGIはデメリットばかりでいいこと全然ないですよ。 CentOSにfastcgiの導入&mod_phpとの比較 http://blog.mizoshiri.com/archives/1132

hozuhiro3
質問者

お礼

回答ありがとうございまいた。回答に関しては即座に理解できませんが、よく調べて参考にさせてただ来ます。

hozuhiro3
質問者

補足

モジュール版phpとしての使用と、CGI版phpとしての使用があるようですが、 私の場合はCGI版phpとして使いたいと思っています。そのほうがセーフモードやユーザー名の制限が無くなる…とありました。 またパーミッション644などCGIオーナー実行権限がなくても標準のモジュール版phpの設定を引き継いで動作するとも聞きました。正確には判りませんので質問した次第です。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>上記環境でphpをCGIのように動かしたいよ思っています。 本当にCGIとして動かしたいのでしょうか? AddType application/x-httpd-php .php 的なモジュールとして動かす方が一般的だと思いますが >error_reporting = E_ALL | E_STRICT 深く学習したいテスト用やクライアントへの納品用の厳密なチェック必要な場合は それでもいいかもしれませんが、下手に厳密チェックをするといろいろエラーを 消しこむのが面倒です。柔軟に処理したいなら error_reporting = E_ALL ^ E_NOTICE でも十分かと、もうちょい工夫して error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED 的な処理でもいいかも。 特定スクリプトだけ厳密にチェックしたいならスクリプトごとに error_reporting(E_ALL | E_STRICT); などを埋め込んでおけばいいので・・・

hozuhiro3
質問者

お礼

error_reportingの記述は大変参考になりました。 厳密チェックで多発するエラー判定を順次消していくのは大変、特定スクリプト で対応すれば…は大変ありがたいアドバイスでした。 ありがとうございました。

hozuhiro3
質問者

補足

拡張子は.htmlです。そこにphpを組み込んだサイトですが、AddType application/x-httpd-php .phpでサーバー側の処理ができるのか私には判然としませんので、質問させていただきました。

関連するQ&A

  • DB内の日本語データがPHPで取得できない

    利用サーバ:さくらインターネットのレンタルサーバ 利用データベースのバージョン:MySQL 5.1 PHPのバージョン:PHP 5.2.×× PHPMyAdminに記載のMySQL の文字セット: UTF-8 Unicode (utf8) PHPMyAdminに記載のMySQL 接続の照合順序: utf8_general_ci htmlやPHPファイルを、EUC-JPからUTF-8に、全て変えたためなのかは分かりませんが、 データベースに格納されている日本語(というか全角文字?)データを、 PHPで取り出せなくなってしまいました。半角英数字のデータは取得できます。 そのためDBから取得して表示させている文字データのうち、日本語のみが表示されません。 【php.iniファイルの中身】 register_globals = "On" mbstring.language = "Japanese" mbstring.internal_encoding = "UTF-8" mbstring.encoding_translation = "On" default_charset = "UTF-8" output_buffering = "Off" mbstring.http_input = "auto" mbstring.http_output = "pass" mbstring.detect_order = "auto" mbstring.substitute_character = "none" 情報は足りますでしょうか?どなたか、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • php.iniを変更したのにUFT-8が文字化け

    こんにちは。教えて下さい。 Movable TypeをUTF-8で運営しようと思いましたが、使用中のサーバーのphpの文字コードがEUC-JPでした。 サーバーに問い合わせたところ、php.iniを編集するだけで文字コード変更できます、とのこと。 そこで、php.iniの mbstring.language = Japanese mbstring.encoding_translation = On mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.internal_encoding = EUC-JP mbstring.detect_order = auto mbstring.substitute_character = none; を mbstring.language = neutral mbstring.encoding_translation = On mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.internal_encoding = UTF-8 mbstring.detect_order = auto mbstring.substitute_character = none; にしてみました。 当方初心者で、php.iniは初めていじりました。 EUC-JPとあった箇所またはJapaneseとあった箇所を変更したのみです。 また、Movable Typeのmt-config.cgiで 文字コードをEUC-JPからUTF-8に変更。 Movable Typeの文字コード関連の変更はこのファイルのみですのでこれで大丈夫・・・。 そう思ったのですが、Movable Typeが文字化け・・・。 php.iniの設定が間違っているのでしょうか? 助けてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • さくらインターネットでphp.iniが変更できない

    さくらインターネットのスタンダードプランに2009年1月から契約している、現在PHP勉強中の者です。 本日初めてphp.iniの内容を変更してみようとしたのですが、変更しようとした内容のうち一部が変わりませんでした。 どなたか原因がお分かりになる方がいらしたら教えて頂きたく思います。 【詳細】 さくらインターネットのphp.ini設定ファイル編集画面で下記のように保存しました。 output_buffering = Off default_charset = EUC-JP mbstring.language = Japanese mbstring.encoding_translation = On mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.internal_encoding = EUC-JP mbstring.script_encoding = EUC-JP mbstring.substitute_character = none display_errors = On そして保存後にphpinfoで確認したところ、 output_buffering が no value 、 mbstring.substitute_character が no value 、 display_errors が STDOUT と表示されており、 mbstring.script_encoding はそもそも項目がありませんでした。 その他のものはちゃんと設定したとおりに変更されましたが、上記4点が何度設定しても変わってくれません。 いろいろ自分で調べてみたのですが解決方法がわからないため、どなたか解決方法をご存知の方がいらっしゃいましたら、何卒教えて頂きたく存じます。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHPとMYSQLの文字コードについておねがいします。

    Apache2、PHP5、MYSQL5.0を使用しています。 当方、PHPの初心者講座などを見てUTF-8で作っていこうと思い設定をしたものの、上手くいかず質問させていただきました。 PHPからQuery文(日本語)を送ってMYSQLのテーブルにINSERTしたのですが、文字化けしてしまいます。 my.iniのdefault-character-set=部分をutf8からsjisやujisなどに変えてやってみたのですが、文字化けの種類(?)が変ってしまうだけでやはり文字化けしてしまいました。 ALTER DATABASE AAA CHARCTER SET utf8をやっても変らず文字化けしてしまい、show variables like 'char%'でCharcterを調べたところ、下記のようになっていました。 charcter_set_client | utf8 charcter_set_connection| utf8 charcter_set_database | utf8 charcter_set_filesystem| binary charcter_set_results | utf8 charcter_set_server | utf8 charcter_set_system | utf8 MYSQLとPHPの文字に関係あるようなところをコピーしました。 どこかおかしなところがあるでしょうか。 ------my.ini----- [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 ----------------- ------php.ini----- output_buffering = Off extension=php_mbstring.dll [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = On ------------------ どなたか解決策を知らないでしょうか。よろしくお願いします。

    • 締切済み
    • PHP
  • PHPの文字コード (php.iniの設定)

    php.iniを以下のように設定した場合について教えてください。 (PHPの参考書に載っていたWindows環境での設定例です) output_buffering = On output_handler = mb_output_handler default_charset = Shift_JIS extension=php_mbstring.dll mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = auto mbstring.script_encoding = EUC-JP 1. この設定は「PHPの記述されたファイルはEUC-JPで、 ブラウザに表示される時点でShift-JISに変換される」 ということですか? 2. PHPの参考書(PHP5対応)に、 「PHPアプリケーションを構築する場合、文字コードを Shift-JISにすると、PHPのバージョンやphp.iniの設定に よっては文字化けの原因になることがあるので、 Windows環境でもEUC-JPで保存することを強くお勧めする」 というようなことが書かれていました。 素人考えで、すべて同じ文字コード(EUC-JP)のほうが 楽なのではないかと思ったのですが、上記のように 設定するのはどういう理由からでしょうか? 3. CSSファイルやテンプレートファイル(Smarty)の 文字コードは、Shift-JISとEUC-JPのどちらで保存 すればいいのですか? 4. metaタグのcharsetはShift-JISであっていますか?

    • ベストアンサー
    • PHP
  • PHPの文字化け

    PHP4.3、Apache2.0.46を利用しています。 htmlタグ内でのテキストは正しく表示されるのですが returnやechoなどで表示させると文字化けしてしまいます。 PHPのスクリプトは全てEUCで記述されています。 化け方は、例を挙げると ※入力されたID、パスワードが正しくありません。 ↓ ※ュID鴻・若罩c障 のようになります。 php.iniの文字コードまわりの設定は output_buffering = Off magic_quotes_gpc = Off mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none となっています。 どうかお知恵をお貸しくださいませ。

    • 締切済み
    • PHP
  • 文字化けに関して

    文字化けが起きてしまって困っています。 PHPとMysqlを使用した、CMSを今あるサーバから別のサーバに移したいのですが、 新しいサーバに移すと文字化けをしてしまいます。 正確にはデータベースから読み込んでいる部分だけが文字化けしています。 index.phpにHTMLコードとして記述してある部分は文字化けしていません。 ブラウザ(IE)の「表示→エンコード」からUTF8を選ぶと逆に データベースの部分が正確に表示され、HTMLに直接書き込んだ部分が文字化けします。 現状でわかる範囲で書きます。 ・index.phpのmetaは <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> ・MYSQL(phpmyadminに書かれている)文字セットは UTF-8 Unicode (utf8) ・php.iniの設定 mbstring.language・・・japanese mbstring.internal_encoding・・・UTF-8 mbstring.encoding_translation・・・on mbstring.http_input・・・未設定 mbstring.http_output・・・未設定 default_charset・・・未設定 output_handler・・・未設定 output_buffering・・・未設定 magic_quotes_gpc・・・Off 詳しい方よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP 文字コードについて

    以下のような環境のホスティングサーバでSmartyを使い簡単なアプリを作っています。 サーバ PHP Version 4.3.7 phpinfoの値 mbstring.detect_order auto mbstring.encoding_translation On mbstring.func_overload 0 mbstring.http_input auto mbstring.http_output SJIS mbstring.internal_encoding EUC-JP mbstring.language Japanese mbstring.script_encoding auto mbstring.substitute_character no value 今回、PHPソースはUTF-8、HTML(Smartyテンプレ)もUTF-8で作っています(作りたいです)。 この様な場合、PHPスクリプトに「ini_set」を記述するのが良いのか、又は$_POST等で受け取ったときに毎回「mb_convert_encoding」記述するのが良いのか、その両方か、アドバイスを頂きたいです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 【PHP】fgetsした際に「CR/LF」だけを改行と認識したい。

    【PHP】fgetsした際に「CR/LF」だけを改行と認識したい。  fgetsで1レコードを読んだ際に、現在は「CR/LF」および「LF」が改行として認識されています。  これを「CR/LF」のみ改行という認識に改めたいのですが、php.iniの設定で行えるのでしょうか。  もしくは、別の方法で実現出来るのでしょうか。  ご存知の方がいらっしゃいましたら、ご回答頂けると幸いです。 【環境】 ・PHP Version 5.2.5 ・サーバ WindowsServer2003 + IIS ・文字コード PHP=S-JIS ブラウザ=S-JIS 【php.iniの主な設定】 output_buffering = off default_charset = Shift_JIS extension = php_mbstring.dll mbstring.language = Japanese mbstring.internal_encoding = SJIS mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character =none

    • ベストアンサー
    • PHP
  • PHPの文字コードについてお願いします。

    Apache2、MYSQL、PHP5を使用して勉強しているものですが、文字コードについて質問させてください。 まず、参考書を読みながらphp.iniをこの用に設定しました。 output_handler =mb_output_handler default_charset = "Shift_Jis" extension_dir = "c:\php\ext\" extension=php_mbstring.dll extension=php_mysql.dll mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; MySQLの文字コードはウィザードでUJISに設定して勉強しています。 Apache2の設定は本で支持が無かったのでとくに設定はしていません。 しかしこれでは文字化けが起こったりしてしまい、Googleなどで調べたらUTF-8で統一するのが良いと書かれていたのですが、どのように変更すればわからないです。私の購入した本では「mbstring.detect_order = auto」の意味などが書いて無くて、ただ丸写しの状態になってしまい設定方法が身についていません。なので今回の質問で、文字コードの設定を覚えておきたいのです。 1.UTF-8などの文字コードに変える場合は、Apache2の設定を変える必要があるのでしょうか。 2.上記したphp.iniの設定はどのような意味があるのでしょうか?SHIFT-JISでPHPを書くということでしょうか? できれば各自の良い設定方法を教えてください。 3.たとえばSHIF-JISで書いたPHPファイルを保存するときはSHIFT-JIS形式で保存するのでしょうか? 4.なぜphpはSHIFT-JISで書いているのにMySQLではUJISの文字コードを使用するのでしょうか。統一した方がいいのでは? 5.utf-8に文字コードを変える場合は、php.iniのどの部分を設定し直せばいいのでしょうか? 一つでも回答して頂けるととても嬉しいです。よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう