みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

#!/usr/local/bin/php

XAMPPで自宅サーバー勉強中です、
レンタルサーバーの時はPHPファイルの1行目に
#!/usr/local/bin/php
と記入し拡張子をabc.cgiとしていました、
自宅サーバーの場合の1行目と拡張子はどのように
書くのですか、よろしくお願いします。

投稿日時 - 2009-05-22 06:03:35

QNo.4979746

困ってます

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

phpは、本来
#!/usr/local/bin/php
という記載は不要です。

拡張子を abc.cgi から abc.php とすれば、1行目がなくても動きます。

仮に
#!/usr/local/bin/php
を入れたままにすると、自宅サーバーでは動くが、レンタルサーバーでは
動かない、という事が起こり得ますので、やめるのが得策です。

投稿日時 - 2009-05-22 09:45:02

補足

回答ありがとうございます
記載は不要でいご来ませんでした
phpの中にCGIが入っています
自宅サーバーでは動くようにしたいのですが
よろしくお願いします。

投稿日時 - 2009-05-22 11:07:53

ANo.2

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(11)

ANo.11

>まずは説明から
>PHPには、CLI版とCGI版が有ります。
>#!/usr/local/bin/php は、LINUXなどのUNIX系OSにて
>その後のスクリプトをどのシェル(または言語コマンド)で実行するか
>を指定するためのものです。
>上記の記載は、OSに対してCLI版のphpの実行を指定しています
>御利用のレンタルサーバーはUNIX系OS上でCLI版のPHPを使用していることになります。
CGIとサーバのモジュールが理解できてない方のようですね。

>WindowsのXAMPPではCGI版でしかWEBからは起動できません。
Windows版のXAMPPでデフォルトでインストールされているのは
モジュール版。
さらにはCLI版(コマンドライン版)もパスを通せばコマンドコマンドプロンプト側で問題なく使える。

投稿日時 - 2009-05-22 22:48:26

ANo.10

mpx

>> XAMPP for Windows です

まずは説明から
PHPには、CLI版とCGI版が有ります。

#!/usr/local/bin/php は、LINUXなどのUNIX系OSにて
その後のスクリプトをどのシェル(または言語コマンド)で実行するか
を指定するためのものです。
上記の記載は、OSに対してCLI版のphpの実行を指定しています
御利用のレンタルサーバーはUNIX系OS上でCLI版のPHPを使用していることになります。

WindowsのXAMPPではCGI版でしかWEBからは起動できません。
CGI版は、拡張子だけでスクリプト言語を判定します。
apacheのhttpd.conf内に有る下記ディレクティブでphpを実行するファイルの拡張子を設定します。
  AddType application/x-httpd-php .php
デフォルトでは、上記の様に.phpでしょう。
旧バージョンでは .php4になっている場合も有ります。

そこで回答
>> 自宅サーバーの場合の1行目と拡張子はどのように書くのですか
御利用の環境はCGI版なので 1行目は、不要です
拡張子は、httpd.confのAddType application/x-httpd-php で確認してそこの書いてある拡張子を使います。無い場合は
AddType application/x-httpd-php .php を追加しましょう。そうすればphpの拡張子で動きます。

投稿日時 - 2009-05-22 21:21:25

ANo.9

ソースコードを拝見したところ、PHPのみ記述されていますね。
<?php ~ ?> の部分がPHPのコードになります。

ご存知かも知れませんが、PHPは

<?php
$name = "hogehoge";
print "<html>";
print "<body>";
print "Hello, $name";
print "</body>";
print "</html>";
?>

のように、全てをPHPで記述する方法と

<html>
<body>
<?php
$name = "hogehoge";
print "Hello, $name";
?>
</body>
</html>

のように、HTMLの一部にPHPを記述する方法があります。どちらも拡張子は .php にするのが一般的で、もちろんどちらも同じ動作をします。

hana3090さんの場合は後者の記述をしていますね。

また一部のレンタルサーバではPHPの1行目に

#!/usr/local/bin/php

を記述しなければいけないことは私も調べてみて分かりました。
しかし、hana3090さんの自宅サーバではそのような記述は必要ないと思います。

投稿日時 - 2009-05-22 20:02:41

ANo.8

mpx

>> XAMPPで自宅サーバー勉強中です
サーバーの環境を明示しましょう

XAMPPには以下の4種類が有りますので、これ開示しないと
適切な回答は得られないでしょう。

XAMPP for Linux
XAMPP for Windows
XAMPP for Mac OS X
XAMPP for Solaris

投稿日時 - 2009-05-22 19:44:27

補足

XAMPP for Windows です
よろしくお願いします。

投稿日時 - 2009-05-22 20:11:10

ANo.7

>HTMLの中にperl文をいれています、
だったら板違いだし
>#!/usr/local/bin/php
なんていう事をすることが意味不明。

投稿日時 - 2009-05-22 18:52:13

補足

すみませんphp文でした
レンタルサーバーの時のコードです
#!/usr/local/bin/php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML lang="ja">
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_JIS">
<STYLE type="text/css">
<--
A {text-decoration: none;}
A:LINK {text-decoration: none; color: wwhite; font-weight: bold;}
A:VISITED {text-decoration: none; color: white; font-weight: bold;}
A:HOVER {text-decoration: underline; color: red; font-weight: bold;}
HTML {cursor:url(./okappa61.cur);}
.x14font {
mso-style-parent:style0;
font-size:18.0pt;
font-family:HG丸ゴシックM-PRO, monospace;
mso-font-charset:128; }
-->
</STYLE>
<TITLE>リンク</TITLE>
</HEAD>
<SCRIPT LANGUAGE="JavaScript"><!--
var no = 0;
function back() {
document.body.background="./kabe/p"+no+".jpg";
no++;
if(no >=10) { no = 0; }
window.setTimeout("back()", 6000);
}

//--></SCRIPT>
<?php
print "<body background=\"./kabe/$kabegami\" link=\"#ffccff\" text=\"#ffffff\" vLink=\"#ffffcc\">\n";
?>
<CENTER><?php
#########
print "<FONT SIZE=\"5\" COLOR=\"RED\"><A HREF=\"http://web.infoseek.co.jp/\">★★★★★★</A></FONT><BR><BR>\n";
#########
$stock = array (
"http://www.forum"=>"月月月月☆☆☆☆☆",
"http://www.jp/~oneenew/main.html"=>"月月☆☆☆☆☆",
"http://ch/bbs1/"=>"月月☆☆☆☆",
"http://miwaku.web.infoseek.co.jp/"=>"月月楽部");
$kaisuu = 0;
foreach($stock as $key => $value) {
$kaisuu++;
if($kaisuu == 1) { $iro = "#000080"; $iti = "left"; }
elseif($kaisuu == 2) { $iro = "#000000"; $iti = "center"; }
else { $iro = "#0000FF"; $kaisuu = 0; $iti = "right"; }

print"<TABLE BGCOLOR=\"#FF0000\" BORDER=\"0\" WIDTH=\"30%\" cellpadding=\"0\" cellspacing=\"1\" align=\"$iti\">\n";
print"<TR><TD HEIGHT=\"30\" align=\"center\" BGCOLOR=\"$iro\"><A HREF=\"{$key}\" TARGET=\"_blank\">{$value}</A></TD></TR>\n"; }
$s = date("s",time());
foreach($stock as $key => $value) {
$k++;
if($k == $s) { print "<TR><TD HEIGHT=\"30\" align=\"center\" BGCOLOR=\"#FFFFFF\"></TD></TR>\n";
print "<TR><TD HEIGHT=\"30\" align=\"center\" BGCOLOR=\"$iro\"><A HREF=\"{$key}\" TARGET=\"_blank\">ランダムリンクno{$k}</A></TD></TR>\n";
break; }
}
print"</TABLE>\n";
?>
</CENTER></BODY>
</HTML>
よろしくお願いします。

投稿日時 - 2009-05-22 19:27:43

ANo.6

回答#1をしたx_jouet_xです。
私の早合点(perlと勘違い)で誤った回答をしてしまいました。申し訳ないです。

回答#2および#5の方が説明されている通りです。

XAMPPを使用されているのであれば、PHPであれば
<?php
.....
?>
のように記述した *.php ファイルを\xampp\htdocs配下に置けば動作すると思います。

一般的なサーバ環境ではApacheとPHPをインストールすると、Apacheの設定ファイル(httpd.conf)が書き換えられてPHPをCGIモードで動作させる場合でもPHPファイルの1行目に #!..... の記述は必要なくなるような設定になるはずです。

hana3090さんが使用されているレンタルサーバは httpd.conf で別の設定がされているのだと思います。

http://memorandum.kurashian.com/2009/03/post-13.html

上記のURLにPHPをCGI版としてApacheで利用する場合の httpd.conf の記述例が記載されています。

投稿日時 - 2009-05-22 16:09:41

補足

すみません
HTMLの中にperl文をいれています、
よろしくお願いします。

投稿日時 - 2009-05-22 17:50:31

ANo.5

>HTMLファイルの中にCGIが入っています
そもそもcgiは言語ではなくてシステムの事です。
PHPの場合、CGIモードで動かせばCGIとして動き
Webサーバのモジュールとして動かせばモジュールとして動きその場合はCGIではありません。
ですから
>phpの中にCGIが入っています
なんて状態は起きません。

投稿日時 - 2009-05-22 14:45:42

ANo.4

では、ちょっと逃げ気味ですが

#!/usr/local/bin/php



#!C:\xampp\php\php.exe

等にしてみてください。

C:\xampp\php\php.exe

はphp.exeが置いてあるフォルダのパスです。

投稿日時 - 2009-05-22 14:13:11

ANo.3

>記載は不要でいご来ませんでした
>phpの中にCGIが入っています

phpのファイルの中に、別のCGIが入っているということでしょうか?

例えば、以下のようなファイルを作って、hello.phpとして保存し、見てみると動きますか?
//------ここから(この行は不要)--------
<?php
echo "hello";
?>
//------ここまで(この行は不要)--------

投稿日時 - 2009-05-22 11:51:12

補足

回答ありがとうございます
>phpのファイルの中に、別のCGIが入っているということでしょうか?
HTMLファイルの中にCGIが入っています
レンタルサーバーの時は動いていました、

>以下のようなファイルを作って、hello.phpとして保存し、見てみると動きますか?
動きます、

よろしくお願いします。

投稿日時 - 2009-05-22 12:16:38

ANo.1

まずコマンドから which php と入力して下さい。
これでphpコマンドのフルパスを取得できます。
(たいていは、/usr/bin/php か /usr/local/bin/php だと思います。)

PHPファイルの1行目には、
#!「phpコマンドのフルパス」
と記述します。

また拡張子ですが、*.cgi でもいいと思いますが、これはPHPをCGIモードで動作させる場合に使用することが多いと思いますので、普通に *.php でいいと思います。

投稿日時 - 2009-05-22 08:36:03

補足

回答ありがとうございます
コマンドプロンプトに
which php と入力しても
エラーになります、
phpの中にCGIが入っています
よろしくお願いします。

投稿日時 - 2009-05-22 11:12:13

あなたにオススメの質問