Ben gerçekten hiç anlamadım: CGI nedir?

10 Cevap php

CGI bir Comman Gateway Interface olduğunu. Adından da anlaşılacağı gibi, her şey için bir "ortak" ağ geçidi arabirimi. Bu adından bu kadar önemsiz ve naif olduğunu. Ben bu anladım ve bu ben bu kelimeyi karşılaştığımız her zaman hissettim hissediyorum. Ama açıkçası, ben yapmadım. Hala aklım karıştı.

Ben bir PHP programcısı yaşıyorum. Ben web geliştirme yaptım.

user (client) request for page ---> webserver(->embedded PHP interpreter) ----> Server side(PHP) Script ---> MySQL Server.

Şimdi benim PHP Script MySQL Server sonuçlar getirebilir demek && MATLAB Sunucu && Diğer bazı sunucu.

Yani, şimdi PHP Script CGI nedir? çünkü web sunucusu arasında ve için arayüz Diğer tüm sunucular? Bilmiyorum. Bazen CGI, bir teknoloji ve çağrı othertimes bir program veya someother sunucusu CGI diyoruz.

  • Tam CGI nedir?

  • Nedir ile büyük bir anlaşma /cgi-bin/*.cgi? Nedir bu ile? Ben sunucuda bu cgi-bin dizini ne olduğunu bilmiyorum. Onlar * neden bilmiyorum. Cgi uzantılarını.

  • Perl neden hep şekilde beraber geliyor. CGI & Perl (dil). Ben de nedir bu iki ile bilmiyorum. Ben kombinasyon "CGI & Perl" bu iki işitme tutmak hemen hemen her zaman. Bu kitap, harika bir örnektir CGI Programming with Perl Neden olmasın "PHP / JSP / ASP ile CGI Programlama" dir. Ben böyle şeyler görmedim.

  • CGI Programming in C Bu bana çok karıştırır. C?? Gerçekten de? Ne diyeceğimi bilemiyorum. Ben "sadece kafam karıştı." C "? Bu her şeyi değiştirir. Program derlenmiş ve idam edilmesi gerekmektedir. Bu tamamen web programlama benim görünümünü değiştirir. Zaman ben derlemek? Bu olacak çünkü nasıl bir program (idam olur yok makine kodu) bir bağımsız süreç olarak yürütmek gerekir bu yüzden. nasıl IPC? web sunucusu ile iletişim? ve (tüm sunucular ile arabirim benim örnekte MATLAB & MySQL) soket programlama kullanarak yok? Kayboldum!

  • Bunlar CGI amortismana tabi olduğunu söylüyorlar. Onun artık kullanımda. Öyle mi? En son güncelleme nedir?

Once, I ran into a situation where I had to give HTTP PUT request access to web server (Apache HTTPD). Its a long back. So, as far as I remember this is what I did:

  1. Edited the configuration file of Apache HTTPD to tell webserver to pass all HTTP PUT requests to some put.php ( I had to write this PHP script)

  2. Implement put.php to handle the request (save the file to the location mentioned)

People said that I wrote a CGI Script. Seriously, I didn't have clue what they were talking about.

  • Gerçekten CGI komut yazmak mı?

Benim karışıklık ne olduğunu anlamış umuyoruz. (Kafam karıştı nerede kendimi bilmiyorum çünkü). Ben mümkün olduğunca basit cevap tutmak için çocuklar isteyin. Ben gerçekten herhangi bir fantezi teknik terminoloji anlayamıyorum. En azından bu durumda.

EDIT:

I simplest şekilde kavramlarını açıklar bu inanılmaz öğretici "CGI Programming Is Simple!" - CGI Tutorial bulundu. Bu makaleyi okuduktan sonra Getting Started with CGI Programming in C gerçek kod örnekleri ile anlayış tamamlamak için okumak isteyebilirsiniz. http://en.wikipedia.org/wiki/Common_Gateway_Interface: Ben de Wikipedia'nın maddesine Bu eğitimde bu bağlantıları ekledik

10 Cevap

CGI ileri geri ve bir uygulamadan veri geçmek nasıl bir Web sunucusu söyleyen bir arayüz. Daha spesifik olarak, bu yanıtı standart çıkışı üzerinden geçti nasıl talebi bilgiler reqeust vücut standart giriş yoluyla geçirilen nasıl (örneğin istek türü, uzak IP adresi gibi) ortam değişkenleri, geçirilir nasıl açıklanır, ve. Ayrıntılar için CGI specification başvurabilirsiniz.

Görüntüyü kullanmak için:

user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.

Çoğu, hepsi değilse, web sunucularının 'CGI' gibi bir programı çalıştırmak için yapılandırılabilir. Bu web sunucusu, bir isteği aldıktan sonra, nerede ve ne aramak için böylece programın biliyorsunuz bazı ortam değişkenleri ve standart girdi ve standart çıkış üzerinden parametreleri sıralanırken, belirli bir programa veri iletecek demektir.

Ana parası web sunucusu ve program hem CGI nasıl çalıştığını biliyorum verilen, size web HERHANGİ çalıştırılabilir kod çalıştırmak olabilir. Eğer düzenli bir CGI-etkin web sunucusu ile C veya Bash web programları yazabilirsiniz yüzden. Çoğu programlama ortamları kolayca standart girdi, standart çıktı ve ortam değişkenleri kullanabilirsiniz, ve bu.

Sizin durumunuzda büyük olasılıkla başka kullanılan, PHP için özel, sizin komut ile web sunucusu arasındaki iletişim araçlarının, bu, iyi senin soru söz gibi, mod_php denilen gömülü bir tercüman.

Yani, soruları yanıtlarken:

Tam CGI nedir?

Yukarıya bakın.

Nedir, büyük / cgi-bin / *. Cgi ile anlaşma? Nedir bu ile? Ben sunucuda bu cgi-bin dizini ne olduğunu bilmiyorum. Onlar * neden bilmiyorum. Cgi uzantılarını.

CGI programları için geleneksel bir yer, birçok web sunucuları, CGI programları gibi orada tüm ikilileri yürütmek için yapılandırılan bu dizin ön birlikte gelir. . Cgi uzantısı CGI ile çalışmaya beklenen bir yürütülebilir gösterir.

Perl neden hep şekilde beraber geliyor. CGI & Perl (dil). Ben de nedir bu iki ile bilmiyorum. Ben kombinasyon "CGI & Perl" bu iki işitme tutmak hemen hemen her zaman. Bu kitap Perl ile başka bir mükemmel örneği CGI Programlama Neden değil "PHP / JSP / ASP ile CGI Programlama". Ben böyle şeyler görmedim.

Perl eski olduğundan (bütün CGI zaten eski zaman varlık geldi PHP, JSP ve ASP daha yaşlı, Perl CGI yeni iken var) ve CGI aracılığıyla dinamik web sayfalarını sunmak için çok iyi bir dil olduğu için oldukça ünlü oldu. Günümüzde özellikle mod_perl bir webserver'daki Perl çalıştırmak için diğer alternatifler vardır.

C CGI Programlama bu bana çok karıştırır. C? Cidden? Ne diyeceğimi bilemiyorum. Ben "sadece kafam karıştı." C "? Bu her şeyi değiştirir. Program derlenmiş ve idam edilmesi gerekmektedir. Bu tamamen web programlama benim görünümünü değiştirir. Zaman ben derlemek? Bu olacak çünkü nasıl bir program (idam olur yok makine kodu) bir bağımsız süreç olarak yürütmek gerekir bu yüzden. nasıl IPC? web sunucusu ile iletişim? ve (tüm sunucular ile arabirim benim örnekte MATLAB & MySQL) soket programlama kullanarak yok? Kayboldum!

Bir kez yürütülebilir derlemek, webserver programını yürütür ve programa istekte veri geçer ve alınan yanıt verir. CGI bir program örneği, her istek başına açılacak belirtir. CGI günümüzde verimsiz ve tür eskimiş olmasının nedeni budur.

Bunlar CGI önerilmiyor olduğunu söylüyorlar. Onun artık kullanımda. Öyle mi? En son güncelleme nedir?

Performans şeyden değil ve kod yürütme basit bir araç gerekli olduğunda CGI halen kullanılmaktadır. Bu daha önce belirtilen nedenlerden dolayı verimsiz ve bir web ortamda herhangi bir program yürütme daha modern bir anlamı vardır. Şu anda en ünlü FastCGI.

Tam CGI nedir?

(Örneğin yerine, bir dosya) bir programdan verileri almak için bir web sunucusu için bir vasıta.

Nedir, büyük / cgi-bin / *. Cgi ile anlaşma?

Hayır büyük dağıtmak. Bu sadece bir kuralıdır.

I don't know what is this cgi-bin directory on the server for. I don't know why they have *.cgi extensions.

Sunucu dosyası olarak (yani sadece hizmet kadar şey yerine yürütmek için bir program olarak tedavi) ile ne yapacağını bilmek zorundadır. Bir. Html uzantıya sahip bir metin / html içerik türü kullanmak söyler. A. Cgi uzantıya sahip bir program olarak çalıştırmak için söyler.

Ayrı bir dizinde yürütülebilir tutulması yanlış dosyalarını çalıştırmak ve / veya durumda ham veri, sunucu yanlış alır gibi CGI programları kadar hizmet karşı bazı ilave koruma sağlar.

Perl neden hep şekilde beraber geliyor.

Öyle değil. Perl CGI olarak aynı anda sadece büyük ve popüler oldu.

Ben yıllardır CGI Perl kullanılmış değil. Ben bu gün FastCGI doğru uzun bir süre için mod_perl kullanarak ve eğilimi oldu.

This book is another great example CGI Programming with Perl Why not "CGI Programming with PHP/JSP/ASP".

CGI çok verimli değildir. Webserverlarda programlarında konuşmak için daha iyi yöntemler PHP gibi aynı zamanda etrafında birlikte geldi. Programlarına konuşmak için JSP ve ASP are farklı yöntemler.

C CGI Programlama bu bana çok karıştırır. C? Cidden?

Bu bir programlama dilidir, neden olmasın?

Ne zaman derlemek?

  1. Kod yazmak
  2. Derlemek
  3. Erişim URL
  4. Webserver program çalıştırır

Nasıl (bir makine kodu olacak çünkü, bu nedenle bağımsız bir süreç olarak yürütmek zorundadır) programı yürütülür alır gelmez.

Bu bağımsız bir süreç (Eğer C Apache modülleri yazabilirsiniz) olarak çalıştırmak zorunda değildir, ama CGI bütün kavramı bir dış işlem başlattı olmasıdır.

Nasıl web sunucusu ile iletişim nedir? IPC?

STDIN / STDOUT ve ortam değişkenleri - CGI şartnamede tanımlandığı gibi.

and interfacing with all the servers (in my example MATLAB & MySQL) using socket programming?

Ne gibi yöntemler kullanılarak ve desteklenmektedir.

Bunlar CGI amortismana tabi olduğunu söylüyorlar. Onun artık kullanımda. Öyle mi?

CGI, verimsiz, yavaş ve basit. Basittir çünkü kullanıldığında nadiren kullanılır, öyle.

En son güncelleme nedir?

1.1

CGI bir web sunucusu (HTTP sunucusu) ve belirli bir isteği işlemek için bazı tür bir yürütülebilir program arasındaki bir arayüz standardıdır.

O istek, bazı özellikleri bu programın çevre ve nasıl programı geri sunucuya yanıt iletişim kurmalı ve nasıl sunucu özgün HTTP isteği için geçerli bir cevap oluşturmak için cevap 'komple' gerektiği tebliğ nasıl olması gerektiği anlatılmaktadır.

Bir süre için CGI bir IETF Internet Taslak ve gibi bir son kullanma tarihi vardı. Artık CGI 'standart' olduğunu bu yüzden hiç güncelleme ile doldu. Şimdi bir bilgi RFC, ancak bu belgelerin yaygın bir uygulamadır ve bir standart kendisi değildir. rfc3875

Bir CGI arabirimini uygulayan Programları hedef makinede çalıştırılabilir herhangi bir dilde yazılmış olabilir. Onlar erişimi environment variables mümkün olabilir ve genellikle standard input ve standard output kendi çıkış oluşturmak zorundadır.

C gibi derlenen diller yaygın CGI ortam erişim kolaylaştırmak için kütüphaneleri kullanılarak sık sık, Perl gibi dillerle scripting olduğu gibi kullanılmıştır.

CGI büyük dezavantajlarından biri, yeni bir program, her isteği kadar büyük bir performans sorunu olabilir istekleri arasında durumunu korumak için kökenli olmasıdır. Devlet çerezleri ele veya bir URL kodlanmış, ancak büyük alır eğer başka bir yerde saklanan ve kodlanmış url bilgi veya bir tanımlama bilgisi girilmek zorundadır olabilir. Her CGI çağırma sonra bir yerde bir mağazadan saklanan devleti yeniden gerekir.

Bu nedenle, ve istekleri ve oturumları için çok basit bir arayüz için, web sunucuları ve uygulamalar arasında daha iyi entegre ortamlarda çok daha popülerdir. Apache ile modern bir php uygulaması gibi ortamlar web sunucusu ile çok daha iyi hedef dil entegre ve verimli http istekleri sunmak için gerekli istek ve oturumları nesnelere erişimi sağlar. Onlar HTTP isteklerini işlemek için 'program' yazmak için daha kolay ve daha zengin bir şekilde sunuyoruz.

Eğer bir CGI script yazdım olsun ziyade yorumlama bağlıdır. Kesinlikle birinin iş yaptım ama bu script ve sunucu arasındaki arayüz kesinlikle bir CGI arayüzü olmayan bir modül olarak php çalıştırmak için çok daha olağandır.

Bu orijinal NCSA document daha sonraki bir "resmi" kurallaşmasıdır rağmen CGI, RFC 3875 belirtildi. Herhangi bir program, herhangi bir dilde - Temel olarak, CGI işlemek için bir program için bir web sunucusu bir HTTP isteği hakkında veri aktarmak için bir protokol tanımlar. Spec (1993) yazılmıştır anda, çoğu web sunucuları nadir ve yeni bir şey vardı, sadece statik sayfalar, "web uygulamaları" içerdiği, bu nedenle böyle bir gibi "normal" statik içerik, dışında onları tutmak için doğal görünüyordu ayrı statik içerikten cgi-bin dizin ve onları sona sahip .cgi.

Şu anda, burada da PHP gibi hiçbir özel "web programlama dilleri" olduğunu, ve C hakim taşınabilir programlama dili oldu - bu kadar çok insan C kendi CGI betik yazdı Ama Perl hızlı bir şekilde bu tür için daha uygun olduğu ortaya çıktı şey, ve CGI bir süre için Perl ile hemen hemen eş anlamlı hale geldi. Sonra Java Servlet, PHP ve diğer bir grup geldi ve Perl pazar payının büyük bir kısmını devraldı.

Bu Perl, Python, PHP, Ruby, C hemen hemen her şey olabilir coupd - CGI aslında web sunucusu ile yapılandırılmış any tercüman kapalı istek geçirir. Perl sık sık CGI referans olarak görmek neden geri gün içinde en sık şu oldu.

CGI ölmedi. Bu mod_php daha yavaş iken kullanıcı elvel yapılandırma ve diğer bazı şeyler sunuyor, çünkü mod_php aksine aslında en büyük hosting şirketleri CGI olarak çalıştırın. Ruby ve Python da tipik CGI olarak çalıştırılır. onlar önemli fark, bir sunucu modülü gerçek sunucu yazılımının bir parçası olarak çalışır onu eis - nerede CGI olarak tamamen sunucu hemen dışında tercüman veri aktarmak ve almak için nasıl belirlemek için CGI modülü kullanan sunucu dışında.

CGI harici program ortam değişkenleri ve programa istek verileri beslemek için kullanılan standart girişi ile, bir isteği işlemek için web sunucusu tarafından çağrılan sayede bir mekanizmadır. Diğerlerine karşı bazı dillerde CGI programları yazmak daha kolay olmasına rağmen dış program yazılmıştır kesin dil, farketmez.

CGI betikleri varsayılan izinleri, httpd çalıştırmak gerekiyor bu yana sadece cgi-bin dizininde CGI programları (muhtemelen şimdi yanlış) güvenlik amaçlı çalıştırılmasına izin verir.

Birçok PHP script'i mod_php üzerinden web sunucusu işleminde çalıştırın. Bu CGI değildir.

Program (ve ilgili tercüman) istek başına kadar başlatılmış olmalıdır beri CGI yavaş. Modern alternatifler FastCGI tarafından kullanılan mod_php tarafından kullanılan yürütme, ve uzun süren süreçler, gömülürler. Belirli bir dil bu mekanizmaları uygulamaya kendi yol var, bu yüzden CGI başvurmadan önce etrafında sormak emin olabilir.

Belki CGI değil ne olduğunu bilmek istiyorum, ve cevap (sanırım eğer Apache'yi runnig) web sunucusu için bir modül. VE BU BÜYÜK Diference'S, çünkü CGI ihtiyaçları ve dış program, iplik, ne olursa olsun örneğini bir PERL, PHP, hangi program başına se web sunucusu (apache), bir modül olarak çalıştırmak C uygulama sunucusu.

Çünkü tüm bu devreye girer performans, güvenlik, taşınabilirlik konularda bir çok şey var. Ama ne olduğunu anlamak için, ilk CGI değil, ne olduğunu bilmek güzel.

Wikipedia CGI bakabilirsiniz. CGI web sunucusu ve harici bir program veya giriş kolları ve tarayıcıya gönderilen çıktı üreten bir komut dosyası arasında bir protocol olduğunu.

CGI Web sunucusu için basit bir yol ve iletişim kurmak için bir program, başka bir şey, az bir şey değildir. Burada sunucu ağ bağlantısı ve HTTP protokolü yöneten ve programı girişini işleyen ve tarayıcıya gönderilir çıktı üretir. CGI komut dosyası temelde web sunucusu tarafından yürütülen ve CGI protokolü takip edilebilir herhangi bir program olabilir. Böylece CGI programı C görev için çok uygun olmadığı, örneğin, C. Ancak bu, son derece nadirdir, uygulanabilir.

/cgi-bin/*.cgi insanlar genellikle kendi CGI komut dosyası koymak basit bir yoldur. Web sunucusu genellikle o yoldan CGI komut almak için varsayılan olarak yapılandırılır.

Bir CGI betiği PHP de uygulanabilir, ancak tüm PHP programlar CGI betikleri değildir. Webserver PHP yorumlayıcısı (örn. mod_php Apache) gömülü, sonra CGI faz web sunucusu ve tercüman arasında daha verimli direkt protokol tarafından atlanır.

Eğer bir CGI komut dosyası uygulamaya ya da olup olmadığını script web sunucusu tarafından yürütülmektedir nasıl bağlıdır.

CGI arkasındaki fikir olduğunu STDOUT (eko, printf ifadeleri) üzerinden bir program / script (Perl hatta C olsun) STDIN'den (istek veri) üzerinden girişi alır ve çıkışları veri. Onlar PHP, Apache modülü altında çalıştırmak çünkü çoğu php scriptler hak yok nedenidir.

Bir gerçek hayat örneği: Bir web sitesinde gösterilmesi gereken karmaşık bir veritabanı. Veritabanı 1986 civarında bir yerde tasarlanmış beri (!), Birçok verinin disk alanı kaydetmek için farklı şekillerde doluydu.

Şimdi ben bir SQL neler yapabileceğini sınırlarını ulaşıyorum. Ben PPK ham veri geçmek ve orada açmak için var, ama bu çok fazla işlemci zaman maliyeti.

İki mantıklı çözüm vardır:

  • you can write a plugin to the database engine (not feasible for another reason), or
  • you can write a small program in the language of your choice and put it into /cgi-bin. My choice will be C++ with dynamic binding to the SQL server that we use.