プロが教えるわが家の防犯対策術!

プログラミング初心者です。初歩的な質問で申し訳ありません。初心者向けの書籍等で調べてみると掲示板の作成やカウンター設置等CGIでできることはPHPでもできてPHPでできることはCGIでも同じことができるようなイメージなのですが、逆にそれぞれがそれぞれのプログラムじゃないとできない、ということや特徴的な使用方法等わかりやすく教えていただけたら助かります。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (10件)

ANo.5 ですが一部わかりにくいかもしれないので補足します。


「PHPはCGIより速い」は間違いですが、それ以前に比較対照がおかしいと言えます。
それとは別に「PHPはperlより速い」というのもありますが、これも間違いです。
PHPもperlも、それぞれ「CGIモード」と「modモード」があり、modモードはCGIモードよりも速いです。ANo.5 に書いたようにCGIとはプログラムとWebサーバーを橋渡しする環境のことで、modはWebサーバーの一部として組み込まれて動きます。当然「橋渡し」の分、時間がかかります。
たとえば、CGIでPHPを動かすよりも、modでperlを動かしたほうが圧倒的に速いです。
で、モードを同じにした場合は、perlのほうが速いケースが多いそうですが、大差はないという見方もあります。

おそらく、PHPはmodモード(モジュール)で動作させることが多いのと、CGIはperlだと思ってしまっている人が多いことで、先のような間違った情報が広まってしまったのでしょうね。
そのあたり、氾濫する情報にまどわされてしまうこともあるので、まずはPHP、perl本家のサイトを見るのが良いと思います。動作モードについても詳しく書かれています。もちろん信頼性も最も高いでしょう。
    • good
    • 1

graphaffineさんに横槍を入れるようで恐縮ですが、


「PHPがASを指す」ということはありませんので、ご注意を(「AS」がサーバーモジュールを指すなら)。
私が下に書いたように、CGIは実行形態・環境を指しますが、PHPは単に言語を指すものです。
PHPもCGIで動きますし、モジュールでも動きます。それはperlも同じです。

「CGIとPHPの違いってなんですか?」
というご質問は、ある実行環境そのものと、言語(実行環境を問わない)を比べるようなことで、言ってみれば
「ウィンドウズとエクセルの違いってなんですか?」
に近いようなもの(ちょっと無理があるかも)。
エクセルにはマック版もあり、そもそもカテゴリ違いなので関連する性能差は比較できません。

なので、単に言葉が指す意味の違いでしかないと思います。
回答としては、
「CGIは、プログラム実行環境のことで、
 PHPは、そのCGI上やモジュールで動かすプログラム言語のこと」
となるのかな。
なんとなくlunamariaさんはCGIとperlを取り違えている気がしますが…、わかりません。
    • good
    • 2

lunamariaさん、今晩は。


先ほどはASとそうでないものとの実行形態上の比較でしたが、別の観点での比較も付け加えさせてもらいます。
なお、lunamariaさんのレベルがわかりませんがある程度の専門用語を説明なしで使わせてもらいますがあしからずご了承ください。
 
将来性の比較 個人で開設した小規模なサイトは別として、業務用のある程度複雑なサイトではCGIは時代遅れであり、大部分はASにて開発、運用が行われるようになる。

理由1 CGIはOSに多大な負担をかけ、実行の効率が低い。実際例えば100個のリクエストがきたとき、CGIの場合はOSが100個のプロセスをアタッチするが、ASの場合その100個はASのプロセスのサブプロセスになり、リクエストの多少によらずプロセス数は変わらない。

理由2 ASでの開発はCGIの開発より効率がよい。何故なら、DB処理などの基本機能がASに装備されていることやスクリプト(簡易言語)という名のとおり、CGIを開発する一般のプログラミング言語より覚えやすく使いやすいのがその理由である。
    • good
    • 3

CGIとPHPの違いを一言で言えば、アプリケーションサーバー(以下、ASと略す)であるか否かということになります。

PHPがASでCGIはそうではありません。
CGI、PHPともにWebサーバーから呼び出されHTMLを返すという点では同じです。
違いは実行形態にあります。
CGIは一般的には実行形式ファイル(Windowsで言う拡張子exeのファイル)でありサーバーOSの元で稼動します。この場合、言語は無関係になります。
ASの場合、通常はそのASに応じたスクリプト言語があり、その言語で書かれたプログラムをASのスクリプトエンジンが解釈実行します。
ASとしては、PHP以外にColdFusionやASP.NETなどが有名です。
なお、蛇足ながら付け加えるとアプリケーションサーバーは本来はより広い意味の言葉であり、今述べたのは正確にはWebアプリケーションサーバーと言う事になりますが、実際問題としてはアプリケーションサーバーとはWebアプリケーションサーバーのことを指すことが多いようです。
かなり回りくどくなってしまいましたが、こんなところでよろしいでしょうか。
    • good
    • 2

「Perlプログラミング中毒!―実用&趣味的Perlモジュール・リファレンス 」


と言う本を少し読んだだけなのですが、最新のPerlはWin32APIが使え、windows側にアクセスできるってことかなー?
ディスクトップにショートカットを作るとか??
これはPHPには、できないかもしれません。

HPに関しては、Perlでできる事はPHPでもできるし、PHPの方が簡単なものも多い。
とりあえず、特殊な事をしなければ、掲示板、カウンター等は同様にできますよ。
Perlの方がまだ経験が長いですが、PHPでスクリプトを作っていて困った事はありません。
    • good
    • 0

「PHPはCGIより速い」は間違いです。


たとえばC言語で書いたCGIなら同等かそれ以上になる場合も多いでしょう。
ちなみにCGIは言語ではありませんので、使う言語次第で「何でもできる」と言えます(語弊があるかもしれませんが)。
仕組みという意味では、CGIとはプログラムとWebサーバーを橋渡しする環境を指します。PHPは言わばWebサーバーに埋め込まれたプログラム環境と言えます。
そして、CGIで多く使われる言語にperlがあり、CGIの代表的存在であるために「perlはCGIで動作する」と思いこまれる向きもありますが、実はperlにも「CGIモード」と、PHPと同じような動作方法(CGIを介さずWebサーバーに埋め込まれた状態で動作)である「mod_perl」があります。これは言ってみれば、それこそPHPと言語が違うだけの状態です(どちらのモードなのかはサーバーへの実装による)。

それらを踏まえ、CGIは柔軟性や可能性・拡張性という意味で、いろいろなことをやりたい場合に強いと言えますし、PHPは初心者には記法が大変覚えやすくDBなどの操作も簡単に記述できる利点があります。
    • good
    • 0

#1の方が回答されているようにPHP


のほうが動作が速いとされています。

そして、PHPとCGI(Perl)を使ってきた私の視点で言いますと、

Webページにちょっとだけちょっとした処理を追加したい場合、
選択肢はPHPだと思います。
PHPだとJavaScriptのようにHTMLの中に書き込めます。
ちょっとした処理だけなら楽です。
Perlだとそのちょっとだけを作るのにすべてを関数を使って出力しなければいけない。
などからです。
悪い点は、
まだつかえるサーバーが少ない。
まだまだ発展途上(私の中で)

一方Perlの利点は、
フリーで配布されているスクリプトが多い。
たいていのサーバーで動作が保障されている。
テキスト処理においては右に出るものはいないといわれている。
悪い点は、
アクセス数が多いとサーバーに負荷がかかる。

ちなみにどちらもつくろうと思えばメモ帳でできます。
    • good
    • 0

CGIといった場合は、広範囲になります。


CGI(Common Gateway Interfaceの略)は、サーバとページが連携する仕組み、(具体的にはサーバでプログラムを動かして)という感じのことです。

なので、プログラミング言語は問わないので、広義ではPHPもそこにCGIに入るはずです。たしか。
もちろん、perl、そして、C/C++やrubyも入るはずだと。。

一般的に掲示板の設置をされる場合でいわれる「CGI」は、perlで書かれたプログラムのことですよね。

perlに対して、PHPは、ページ(HTML)内に記入して呼び出せるし、データベースに合わせられる部分が有ると思います。

lunamariaさんの何れの疑問についても、ここのページに詳しいと思いますので、はっておきますね。
http://www.scollabo.com/banban/cgi/cgi_003.html
    • good
    • 0

PHPはデータベースとの連携に使用する


と言うイメージが強いですね。
    • good
    • 1

一般的にPHPのほうがCGIよりも処理が早いと言われています。


どちらの言語を選択しても、プログラムとして「○○の機能が実現できない」
というようなことはほとんどないかと思います。

詳細については下記のページを参考にされると良いと思います。

参考URL:http://x-web.pobox.ne.jp/fphp/fphp_01.html
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCGIとPHPの違い

このような質問は何件かあったのですが、イマイチ理解できなかったので質問させていただきます。CGIとPHPどちらかを使いたいと思っているのですが、CGIは許可しているサーバーが多い、PHPはCGIより動作が速い、位のことしか分かりません。この他にCGIとPHPの利点、欠点があったら皆さんの知っている範囲でよいので教えてください。宜しくお願いします。

Aベストアンサー

まず、基本的な事から説明します。

厳密に言うと、「CGI」はプログラムを実行する仕組みを指し、プログラミング言語ではありません。プログラムを実行する仕組みは、他に「モジュール」があります。

プログラミング言語としては、Perl、PHP、C言語、Ruby・・・などが、あります。

昔は、CGI+Perlの組み合わせが多く、CGIといえば Perlでした。
CGI = Perl と誤用されている事も多く、勘違いしている人もい多いですが、厳密に言えば、CGI と Perl は、まったく別の物です。

PHPやモジュールは比較的新しい方法で、最近は、モジュール+PHPの組み合わせも多くなってきています。

しかし、モジュール版のPHPも、便宜上、CGIと呼ばれる事が多いので、話がややこしいです。

まとめると、「CGI」は下記のような広い意味で使われます。

1:Webサーバからプログラムを実行する仕組みの1つ
2:Perlで書かれた、CGIプログラム(又は、Perlそのもの)
3:モジュールを含めた、サーバサイドプログラムの総称

文章を読む場合、「CGI」が何を指しているのか、注意しながら読む必要があります。

-------------------------------------------------------------
自分でサーバーを管理すれば、自由な組み合わせを選択できますが、一般的なプロバイダで利用できるのは下記の組み合わせです。(多いと思われる順)

CGI+Perl
モジュール+PHP
CGI+PHP
モジュール+Perl

つまり、仕組みは「CGI」か「モジュール」、言語は「Perl」か「PHP」となります。

次に、それぞれの違いについて簡単に説明します。

まず、CGIとモジュールの違いですが、CGIの方が処理が重い、モジュールの方が軽い、と言う認識で良いと思います。

モジュールの方が新しい技術で、サーバの負荷を軽減するための物です。細かい点で、メリット、デメリットがありますので、どちらを採用するかはプロバイダ次第です。

次に、PerlとPHPの違いについて。

Perlは古くから有るスクリプト言語です。登場したのは、1987年らしいです。その頃はインターネットもありませんね。Perlはテキスト処理を得意としています。HTMLの中身はテキストなので、CGIとして良く使われて来たのだと思います。

PHPの原型は1995年に作られ、1998年にリリースされたPHP3が現在のPHPに近いものらしいです。PHPは比較的新しい言語で、初めから、HTMLの処理をターゲットに作られています。

両者を比較すると、PHPが後発の新しい言語で、Perlや、他の言語の良い所を色々と取り入れています。初めからHTMLを処理するために作られていますので、その点でもメリットは多いです。現在は、完成度や、普及率の点でも問題ないと思います。

今から勉強するなら、PHPの方をお勧めします。

私は両方使っていますが(PerlからPHPへ乗り換え中です)、PHPの方が便利だと思います


HTMLのフォームのデータを処理する、ファイルをアップロードする、データベースを利用する、セッションを管理する・・・など、色々なケースを考えても、PHPの方が簡単にプログラムが書けます。

まず、基本的な事から説明します。

厳密に言うと、「CGI」はプログラムを実行する仕組みを指し、プログラミング言語ではありません。プログラムを実行する仕組みは、他に「モジュール」があります。

プログラミング言語としては、Perl、PHP、C言語、Ruby・・・などが、あります。

昔は、CGI+Perlの組み合わせが多く、CGIといえば Perlでした。
CGI = Perl と誤用されている事も多く、勘違いしている人もい多いですが、厳密に言えば、CGI と Perl は、まったく別の物です。

PHPやモジュールは比較的新...続きを読む

Qポートの80と443

こちらのサービス(https://secure.logmein.com/)を利用すると、インターネットを見られるサーバーのポートの80と443が空いていればルータやファイアウォールに特段の設定なく外部からサーバーを操作できるそうですが、逆にサーバーのポートの80や443を空けることには何か危険性があるのでしょうか。

Aベストアンサー

ポート80は一般的なHTTP、ポート443はHTTPSです。
この2つのポートがあいていなければインターネット接続(WEBブラウジング)は出来ません。
ですから、ほとんどのファイアウォールでこのポートは開いています。(インターネット接続を制限している社内LANでは当然閉じていますが)

ちなみに、よく使うポートとしてはFTPで20、21、SMTP(送信メール)で25、受信メールPOP3で110あたりです。セキュリティポリシー上、この辺は制限される事も多いですが、HTTP 80、HTTPS(暗号化用)443は通常閉じません。


危険性?
WEBプロトコルを使ってFTP的なファイル転送(WebDAV)やVPN等も出来るようになっています。当然そこにはある種の危険はつきものですが、WEBブラウジングに伴う危険と大きく変わりません。ウィルス等に感染していればこの2つのポートだけでも相当危険でしょうね。

参考まで。

QPHPがあればCGIは使わない

掲示板を作ってみたいです。
とりあえず仕事に使うわけでもないし、あくまで趣味の範囲なので覚えやすいと言われるPHPを勉強してみようと思いました。

昔から掲示板作りにはCGIというものが必要というイメージがあり、CGIを勉強できる本を探したところ、Perlとセットのタイトルを持つ本ばかりで「CGI/PHP入門」みたいなのはありませんでした。

もしかしてPerlで掲示板を作るにはCGIが必要と言うだけで、PHPなら単独で掲示板が作れるのでCGIは必要ないということなんでしょうか?

Aベストアンサー

既に類似の質問があるので。
http://oshiete.goo.ne.jp/qa/1505052.html

これも参考にどうぞ。
http://www.fumi.org/neta/201205sv.html

・「PHP」「Perl」はプログラミング言語
・「Module」「CGI」は動作方式

・PHPではModule(mod_php)がよく用いられる
・PerlではCGIがよく用いられる

QCGIとJavascriptの違いについて

Javascriptの初心者です、宜しくお願いします。

CGIでは「クライアントがサーバーに処理要求を出してサーバーが処理をし、クライアントにhtmlを返す」。

Javascriptでは「クライアントがサーバーに処理要求を出すが、サーバーは処理をしないで、クライアントにhtmlを返してサーバーが処理をして、ブラウザが表示させる」
と本には書いています。

CGIの場合、(1)サーバーからクライアントに返すhtmlとは、具体的にはどのような内容のものでしょうか。htmlファイルという意味でしょうか。(2)またサーバーがする処理とはどのようなものでしょうか。

また、Javascriptの場合、(1)サーバーの役割とはどのようなものでしょうか、(2)サーバーから返されるhtmlとはどのようなものでしょうか、CGIと同じ内容なのでしょうか。(3)この時のブラウザの役割、作業はCGIとはどのように違うのでしょうか。

以上、宜しくお願いします。

Aベストアンサー

再びNo1です
他の回答者さんの回答も含めて大体分かってきたでしょうか?

>>JavaScriptだけで現在のwebシステムを構築することはかなり困難(ほぼ無理)です。
>とは具体的にどのような意味でしょうか、また、ここでの「webシステム」の構築とはどの程度のシステムのことを言われてるのでしょうか

たとえば、このQ&Aサイトも一部でJavaScriptを使っていますが、JavaScriptだけでは構築できません
他にも通販サイトや会員ログインが必要なサイトもJavaScriptだけではどうすることもできません


JavaScriptだけで構築できるサイトといえば計算系のサイトですかね
例えば、m(メートル)をinch(インチ)に換算するサイトとか
車のエンジン回転数やギヤ比、タイヤ外周などのデータから時速を計算するサイト
等はJavaScriptだけでも構築できます
また、サイト内で「現在○時○分」ですという表示がリアルタイムにカチカチと時計が動くような部分はJavaScriptが使われています(最近ではFlashの場合もありますけど)

ほかにもマウスの動きに合わせてハートマーク等のアイコンが追いかけてくるような飾りもJavaScriptで作られています。


こういったように、クライアントノード内で動作する必要がある場合はJavaScriptの出番です
例えば、時計などの場合はサーバーサイドスクリプトでは作ることは出来ません。


JavaScriptと他の言語との決定的な違いは、「パソコン内でのみ動作する」
ということです

JavaScriptを使ってサーバー側にデータを送りつける ということも可能ではあるのですが、送りつけるだけで終わりです
よく使われるテクニックとしては JavaScriptに <form>タグの Submitを肩代わりさせることをよくやります。
他にAjaxという概念を用いる場合も最近は増えてきていますが、これはJavaScriptが何なのかを理解してからでないと理解できない概念です



>また、いわゆる「スクリプト言語」の定義とはどのようなもので、どのような言語を指すのでしょうか?HTML、phpのことでしょうか。

HTMLは含まれません。
一般的に言う「プログラム言語」としては
・入力データがある
・処理をする
・出力をする
この3工程がない限り「プログラム言語」とは言いがたいものです
HTMLの場合、入力も処理も出力もしません
ブラウザが理解できるように記述された「マークアップ言語」です
ブラウザが理解できる唯一のものです。
ですから、サーバーサイドスクリプトが処理したあとに HTMLの形で出力しないかぎり、ブラウザには何も表示されません(text形式でも文字は表示されますけどね)


サーバーサイドスクリプトとして利用されている言語にはいくつかあります
質問にもありました PHPもその一種です
他にも
Perl、Java、C系、Rubyなど等 さまざまな言語を サーバーサイドスクリプト言語として利用しています。
(*注意:JavaとJavaScriptは別物だと理解してください)

再びNo1です
他の回答者さんの回答も含めて大体分かってきたでしょうか?

>>JavaScriptだけで現在のwebシステムを構築することはかなり困難(ほぼ無理)です。
>とは具体的にどのような意味でしょうか、また、ここでの「webシステム」の構築とはどの程度のシステムのことを言われてるのでしょうか

たとえば、このQ&Aサイトも一部でJavaScriptを使っていますが、JavaScriptだけでは構築できません
他にも通販サイトや会員ログインが必要なサイトもJavaScriptだけではどうすることもできません


Jav...続きを読む

QPHPの関数実行

<?php
function disp(){
echo "hello world";
}
?>

<form>
<input type="text">
<input type="button" onclick="<?php disp() ?>">
</form>

といったソースを書いてみたのですが、ボタンを押してみるのですが作動しません。
どこか間違えているのでしょうか、それとも作動しないのでしょうか・・・。
当方としては、formのinputボタンを押したらPHPの関数が実行させるようにしたいのですが・・・。
どなたかご助言をお願いします。

Aベストアンサー

ウソつきました
出来ましたー

<?php

if($_REQUEST[submit] == TRUE){
function disp(){
echo "hello world";
}
}

else{
function disp(){
echo "";
}
}

?>

<form method="post" action="">
<input type="text" value="<?php disp(); ?>">
<input name="submit" type="submit"value="押せ">
</form>

QHTMLファイル同士での値渡し

困っています。

HTMLファイルからHTMLファイルへ移動するときに、
HTMLファイル1でJavaScript で算出された値を
HTMLファイル2へ渡して使用したいのです。

showModalDialogだとダイアログにしか渡せないし・・・。
このように、値をそのまま次のページに渡すための方法を教えてください。
お願いします。

Aベストアンサー

すみません。うっかりしてました。

document.write(FORM[v1]);
では、v1を変数と認識してしまうので、エラーになってしまいますね。

document.write(FORM.v1);  // 「FORM.v1」です
あるいは
document.write(FORM["v1"]);
としてください。

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

Q  これの意味教えて下さい。

これの意味教えて下さい。
タグの
<tr>
<td></td>
</tr>
中に入っている
意味はなんですか?

Aベストアンサー

空白(半角スペース)として使用されることが多いですが、
を使用すると改行されません。

たとえばOK WaveのOKが行末あたりに来たときに、
(1)OKとWaveの間を半角スペースとする場合
~~~OK<改行>
Wave~~~

となりますが、
(2)OKとWaveの間をとする場合
~~~<改行>
OK Wave~~~

となります。

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

Qcssで「下よせ」ってどうやっていますか?

フロートのレフト、ライトはいいとして、

あるボックス要素内(A)に異なるボックス要素(B)をいれます。
この(B)を(A)の一番そこにはりつかせたい時にどうすれば
最もよいのでしょうか?

いいアイデアをご教授ください。

Aベストアンサー

こんなのはどうかな?

position: absolute;
bottom: 0px;


人気Q&Aランキング