• 締切済み

CGIモードのphpスクリプトが400で動くわけ

さくらインターネットのレンタルサーバを利用しています。 さくらに聞け!、と言われてしまうかもしれないですが教えてくれると助かります。 困っているのと技術的な興味の半々です。 私が利用している「プロ」プランの特徴はユーザ権限でapacheが起動されていることです。 (ユーザ毎にapacheが起動されていると考えられます。http://tanaka.sakura.ad.jp/archives/000971.html) PHPはCGIモードで設定されていてPHPスクリプトはパーミッション400で動作します。 同じディレクトリにperlスクリプトもあるのですがこれは少なくとも500を与えないと動作しません。 そこでこの動作条件の違いの原因を考えてみて思いついたのですが、 両者の違いとしてPERLスクリプトの先頭にはperlの位置が明示されているがPHPスクリプトのそれにはない。 それからCGIモードでPERLを動作させる場合とCGIモードでPHPを動作させる場合とではhttpd.confの記述内容が違う。 (ExecCGI, AddHandler, AddType, Actionなど) 質問1 httpd.confに、PHPを設定するようにPERLを設定すれば PERLスクリプトも400で動作するようになるのでしょうか? またその場合先頭行でperlの位置を明示する必要もなくなりますか? (テスト環境がないためテストはしておりません)

  • CGI
  • 回答数2
  • ありがとう数2

みんなの回答

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.2

>間違いなくCGIモードで動作しています これはどうやって確認したのかな? 通常のHTML埋め込み型で駆動してしまうようならCGIではない筈だけど?

mywatertan
質問者

お礼

常駐プロセスでもいるのかな?と推測したのですが ps auxwwなどと実行してもそれらしきプロセスは見つかりませんでした。

mywatertan
質問者

補足

解決しました。 ps auxwwをタイミングを見計らって実行したところ捕まえることができた。 username 37919 0.0 0.3 14332 8880 ?? R 1:19PM 0:00.05 php index.php (php-x.x.x) apacheがphpスクリプトをCGI経由でphpに引き渡すときに スクリプト本体以外で実行されるphpプロセスがあるということが確認できました。

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

CGIモードで動いているというのが勘違いでしょう。 apacheモジュールモードで動いていると思いますよ。 phpinfo()表示のServerAPIのところはどうなってますか?

mywatertan
質問者

お礼

回答ありがとうございます。 残念ながら間違いなくCGIモードで動作しています。 さくらは自分で設定を変えない限りCGIモードで動作するんですよ。 Server API CGI

関連するQ&A

  • CGI版PHPについて

    一般的なPerlのCGIが実行可能な状態のApache(Linux上)にCGI版のPHPを追加インストールした場合、ApacheはスクリプトがPerlであるかPHPであるかの違いをどう認識するのでしょうか? 方法1 スクリプトはどちらも*.cgiとして作成し、スクリプト内先頭行のperlやphpへのパスの記述で認識する 方法2 perl→*.cgi php→*.php のようにhttpd.confや.htaccessで設定する 初心者のためこの二つくらいしか思い浮かばないのですが、どちらかが正解だったりしますか??

    • ベストアンサー
    • PHP
  • cgi-binでPHP動作しない

    過去に何度か出ている質問ですが、 VineLinux3.1 + Apache1.3 + PHP4の環境でhttpサーバを構築したいのですが、 /home/httpd/cgi-bin/test.php  (中には <?php phpinfo(); ?> を記述) のスクリプトがブラウザより動作しません。 同ファイルを /home/httpd/html/test.php にコピー しアクセスすると正常に動作します。 どこか設定がおかしいのでしょうか? ■errot-log [Sun Jan 8 13:44:57 2006] [error] (8)Exec format error: exec of /home/httpd/cgi-bin/test.php failed [Sun Jan 8 13:44:57 2006] [error] [client 192.168.0.5] Premature end of script headers: /home/httpd/cgi-bin/test.php ■httpd.conf抜粋 <IfDefine HAVE_PHP4> LoadModule php4_module modules/libphp4.so </IfDefine> ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/ AddDefaultCharset off <IfModule mod_php4.c> AddType application/x-httpd-php .php4 .php3 .phtml .php AddType application/x-httpd-php-source .phps </IfModule>

  • PerlのCGIとPHPを

     特定のディレクトリのCGIの中にPHP(Apacheのモジュール版)を書き、(CGIで<?php~?>とHTMLを出力させる)Perl/CGIを実行したときにその出力の中に含まれるPHPを実行させたくて、.htaccessに AddHandler application/x-httpd-php cgi AddHandler cgi-script .cgi を書いたのですが、どうやらPHPのAddHandlerの後に書かれているCGIの方が優先され、PHPが実行されず、CGIのみが実行されます。  順序を逆に書いても、今度はPHPが優先されてしまい、どちらか片方しか実行されません。  どうすれば、両方同時に実行させられるでしょうか、教えてください。  それが不可能ならば、とりあえずPerl/CGIからPHPを呼び出して先に実行させるようなことができるのならば教えてください。  ちなみに、httpd.confには拡張子cgiをすべてのディレクトリでCGIとして実行、拡張子phpもすべてのディレクトリでPHPとして実行させるようにAddHandlerされています。 Apache/2.0.58(Windows版) PHP/5.1.6 CGI: ActivePerl 5.88 です。

    • ベストアンサー
    • PHP
  • CGIが使えないのはなぜ?

    こんにちは。 現在Redhat8を使用して、サーバーを作っています。apacheを起動してサイトが表示できるまではOKだったのですが、CGIを使う段階でつまづいています。 httpd.confは様々なサイトを見てそのとおりに編集したのですが、いざCGIを起動するとServerError!となります。Error_logを見ると↓のような妙な文章でした。Permissionなら分かるのですが、、これは何でしょう。 Premature end of script headers: XXX.cgi CGIの先頭のPerl指定は #!/usr/bin/perl にしてあります。何が悪いのか分からず途方にくれています。何かチェックする部分があればどうかご指摘ください。お願いします。パーミッションの設定は完了しており、CGIスクリプト自体も先頭以外はいじっていません。 RedHat8.0 Apache2.0 /home/www/html にHTMLファイル /home/www/cgi-bin にCGIスクリプト ----------------以下関係のありそうなhttpd.confの抜粋 ScriptAlias /cgi-bin/ "/home/www/cgi-bin/" <Directory /home/www/cgi-bin> Options ExecCGI Order allow,deny Allow from all </Directory> AddHandler cgi-script .cgi

  • ApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!に関係なく実行できるようにするには。

    ApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!のPerlを動かす場所(?)を指定する行が無かった場合や、違う場合でも、Apachが勝手にperlの場所を解釈しスクリプトを実行してくれるようになるhttpd.confの設定方法ってありますか?

    • ベストアンサー
    • CGI
  • OSXでcgi

    OSXでperlで作ったcgiを動かしたいと思い色々といじってるのですが全く動きません。 apacheのhttpd.confの設定で AccessFileName .htaccess AddHandler cgi-script .cgi AddHandler cgi-script .pl についてはコメントをはずして使えるようにして Perlのパスも#!/usr/bin/perlとしてsiteフォルダとcgiを置いてるディレクトリに.htaccessを下のように記述して作り AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .cgi/ パーミッション設定をちゃんとしてあげてるのですがブラウザからアクセスするとForBiddenとでてしっかりと設定してるはずのパーミッション設定が間違ってますと言われてしまいます。 OSXでcgiを動かすには他にももっと色々と設定しなければダメなんでしょうか?

    • ベストアンサー
    • Mac
  • CGI (suEXEC)について!

    CGI (suEXEC)についての質問です! OS: Red Hat Linux 7.3 httpd: Apache 1.3.28 Apacheの設定ファイル httpd.conf 内で設定してある DocumentRoot のディレクトリ内にある CGIを”パーミッション700の場合にのみ”動作するようにする方法はありますでしょうか? suEXECを使用してユーザディレクトリ内のCGIは700で動くようにできたのですが、 httpd.conf 内で設定してある DocumentRoot のディレクトリ内では700だと動かない為。 また、suEXECというものは、ユーザーディレクトリのみに適応されるものなのでしょうか? ご存知の方いらっしゃいましたら、アドバイス等を宜しくお願いします。

  • Apach での SSIとCGIとPHP

    Redhat Linux9.0 Perl-5.8.0-88.3 php-4.2.2.-17.2 ですが。。。 ユーザーディレクトリでPerlが動かなくて困っています。 通常、httpd.conf の <Directory /home/*/public_html> の部分に Options MultiViews Indexes SymLinksIfOwnerMatch Includes ExecCGI で動くと思うのですが、なぜかダメでした。 Error message: Premature end of script headers: test.cgi それで、httpd の フォルダを見たところ conf.d/perl.conf というのがあり、そこに次の様に記述したら、perlは動きました。 <Directory /home/*/public_html> SetHandler perl-script PerlHandler ModPerl::Registry::handler PerlOptions +ParseHeaders Options +ExecCGI </Directory> しかし、こうすると今度は SSI と PHP が動かなくなりました。 You don't have permission to access the requested object. It is either read-protected or not readable by the server. なお、上のディレクティブをコメントアウトすると、SSI と PHP はOKです。 この場合、PerlとPHPとSSIのすべてを動くようにするにはどうしたらいいのでしょうか? よろしくお願いします。

  • 拡張子をphpではなくcgiで実行する方法

    添付つき送信フォームを、test.htmlからsend.phpを <form method="post" action="test/send.php"> で定義して実験成功しました。 このphp拡張子をcgiに変更して <form method="post" action="test/send.cgi"> ファイル名も変更しましたが、エラーになります。 ルートディレクトリ - test.html           - testフォルダ - send.cgi Apacheのhttpd.confの設定は下記サイトの 「Windows XPでPHPを動作させてみよう!」のCGIの設定です。 http://aki.adam.ne.jp/index.php 拡張子cgiで実行する手段を宜しくお願い致します。

    • ベストアンサー
    • PHP
  • apacheのCGI設定について教えてください。

    CGIの勉強のために、古いパソコンに fedora core 4 をインストールしてapache でローカルのテスト用サーバーにしようとしています。 /var/www/html に設置した簡単な perl CGI は動くのですが、同じものをユーザーのホームディレクトリに設置すると、internal server error になってしまいます。 ***** 以下 httpd.confの抜粋です。***** #UserDir disable UserDir public_html <Directory /home/*/public_html> AllowOverride All Options Includes ExecCGI FollowSymLinks SetHandler cgi-script </Directory> AddHandler cgi-script .cgi .pl ************************************** サーバーのエラーログを見ると Premature end of script headers: test.cgi となっています。htmlをprintしているだけのスクリプトで、/var/www/html では動くので、apache の設定の問題かと思っています。 ちょっとカテゴリーが違うかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう