一回も披露したことのない豆知識

 レベルは、日曜プログラマーで、ローカルでPHP+MySQL(Windows)で簡単なイントラを構築しています。

 今回、プロバイダのサービスディスク容量が一杯になり契約を更新しようと思いましたところ、PHPを使わせてくれ、しかも安くてメール容量が多いという契約があり、薦めてくれるままに入りました。
 で、ためしに、
test.php
<?php echo("Hello \n"); ?>
をアプロードして、ブラウジングしたところ、
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
というエラーがでました。
そこで、プロバイダへ電話をして、尋ねたところ、エクステンションを「php」では動きませんので「cgi」にしてくださいと言われ、そのようにしたのですが、同じエラーがでます。(説明書には「phpもしくはcgi」と書いてあります。)
で、電話にて、「ソースを見せてもらいましたが、指定ができてない。」旨指摘されました。
いろんな本を読んだり、ウェブで検索しても載っていないので、たぶんかなり初歩的な質問だと思うのですが、
PHPもPerlのように、パスを指定しなければいけないのでしょうか?
説明書を読みましたが、そのあたりの記述がみあたりません。
かなり以前になりますが、ローカルでLinux+Apache+PHPで構築したときも、そんな設定は無かったように記憶しているのですが、勘違いでしょうか?

ご存知の方、具体的に教えていただけないでしょうか?

なお、
説明書には、.htaccessは設置しなくていいと書いてあります。関係無いとは思いますが、cgi-binも設置不要とあります。
サーバーのPHPバージョンは4.3.11とありますが、実際に調べてみると、4.4.4でした。サーバーはfreeBSDのようです。徒労とは思いましたが、パーミッションはいといろ試してみました。777、755、700、644、600等々

A 回答 (2件)

え~とPHPは超初心者ですが、、


1. PHPにはApacheのモジュールとして動くものとPerlのCGI等と同じように動くものと有ります
 これはサーバーにどういう形でインストールしたかなのですが
 サーバーによってはモジュール版、CGI版 両方がインストールされている場合も有ります
http://wiki.bit-hive.com/tomizoo/pg/PHP%20CGI%A4 …

2.プロバイダの説明で php のパスは有りますか?
  大概は /usr/bin/php か /usr/local/bin/php ですが
  もしコマンドラインでログインできるなら
$ which php で調べてください

3. で /usr/local/bin/php だった場合ですが
 なんかプロバイダの説明が怪しい気がするのは私だけ? かも知れませんが
 以下 の内容で php.cgi と言うfileを作って サーバーにアスキーモードで転送してください

#!/usr/local/bin/php
<?php
echo "Content-type: text/html\n\n";
phpinfo();
?>

 パーミッションは取り合えず 755 (で、動いたら705 、もしsuexecなら 700でも動くはず )

4. で http://hoge.example.com/php.cgi にアクセスして
  画面に Content-type: text/html が表示されているようなら
  本当にCGI版ですから 次からは
  echo "Content-type: text/html\n\n"; 行は不要です

  画面に Content-type: text/html が表示されなければ
  CGI版ではなくCLIのはずですから
  次からも echo "Content-type: text/html\n\n"; の記述を入れてください
   (この場合はモジュールとしても動くかもしれませんが)

5. おなじみの phpinfo() 画面ですが 今まで質問者さんが見慣れたものは
  Server API の欄が "Apache 2.0 Handler" などと成っていたと思いますが
  今回のは Server API欄が "CGI" と成っているはずです

参考URL:http://jp.php.net/manual/ja/features.commandline …
    • good
    • 0
この回答へのお礼

詳しいご説明、ありがとうございます。よく理解できました。

気になっていたものですから、あれこれ考えて、またウェブを検索して、どうにか自己解決できました。CGIとモジュールの二つがあることを知りませんでした。PHPはモジュールだけだと思っていましたので、深みにはまったようです。#1さんumasikajiroさんのご指摘どおりにしますと、きちんと動きます。CGIで動いていたようです。phpinfo()で見ましたら、たしかにServerAPIはApache 2.0 Handlerではなく、CGIとなっていました。また、説明書ではVer4.3.11で、案内では4.4.4で実際には4.4.6となっており頻繁に更新しているようでした。(逆の意味で、親切なプロバイダかもしれませんね)
//----------これで動きました
test.cgi 705 (やはり拡張子はphpではだめでした)

#!/usr/local/bin/php
<?php echo("Hello \n"); ?>
//--------------------------

このサイトの回答者の方々にはほんとうに感謝します、昔なら解らないで終わったことが、このようにして解決でき、しかもおまけの知識まで付けることができます。
加齢のせいにしてはいけないのでしょうが、最近どうも頭が固くなったようで、思い込みが激しくなりました。今回はほんとうに良い勉強になりました。ありがとうございました。

お礼日時:2008/06/21 10:17

パスは環境によるのでわからないのですが、


CGI版のPHPを利用する場合は次のように記述する必要があります。

test.cgi(拡張子は.cgi)
------------------------
#!/usr/local/bin/php
<?php phpinfo(); ?>
------------------------
    • good
    • 0
この回答へのお礼

自己解決できました。
oka5130さんご指摘のようにすると、きちんと表示されました。
説明書にはphpでも、cgiでも良いと書いてありましたが、やはり電話での連絡のようにcgiでないと動きません。また、モジュールじゃなくてご指摘どおりCGI版のようです。エラーのおかげで、他のことも検索中に調べ大変勉強になりました。ほんとうにありがとうございました。

お礼日時:2008/06/21 09:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!