(Linux Apache kullanarak CGI-BIN) Perl veya PHP c + + ikili çağırmak nasıl?

4 Cevap php

Ben c + + ile yazılmış bir web sitesi cgi-bin programı var.

Ne yazık ki arkadaşımın sitesi için web sitesi sağlayıcısı sadece Perl veya PHP cgi-bin komut verir.

Sadece sadece c + + derlenmiş ikili çağıran çok küçük bir Perl veya PHP sarıcı için kolay bir yolu var mı?

C + + programı hala POST komutları veya Perl ve PHP tarafından okunur ve daha sonra iletilmesi gerekirdi için stdin okumak mümkün olacaktır.

4 Cevap

Sen Perl backticks kullanabilir ya da "sistem" kabuk komutları çalıştırmak için komutları. Ayrıca, perl size C++ için dahil olmak üzere perl'de çağrılacak diğer dillerde kod yazmak için izin "Inline" sınıfların bir yeri vardır. Eğer çalışan bir şey bulamazsanız, belki bu paketi kullanarak kendi sarıcı yapabilirsiniz.

Eğer başka bir program başlatmak için kullanabileceğiniz bir kabuk komutu çalıştırmak için PHP'nin sistemi () işlevini kullanabilirsiniz. O programın STDOUT sonra (HTTP bağlantı) PHP'nin stdout'ta olarak aynı yere gitmek istiyorum. Bazı get / post / etc okumak stdin'i almak için etrafında karıştırmasını yapmak zorunda kalabilirsiniz.

Ama büyük olasılıkla web sağlayıcı bu şekilde programları çalıştırmak için size yeteneğini devre dışı bıraktı. Bu bir güvenlik riski olabilir, ve bunlar özellikle sadece php ve perl izin verirseniz, o zaman muhtemelen özellikle ellerinden geldiğince non-php/perl çalışan gibi birçok yöntem devre dışı olacaktır. Yani, kısa cevap şans dışında muhtemelen konum olduğunu.

Execv hakkında bilgi edinin.

Benim sorunum çözüldü bazı PHP kodu benim Awstats Wrapper blog yazısı bakın. Benim yaklaşım CGI sorgu params kümesi doğru ortam değişkenleri vardır ve sonra tekrar CGI herhangi bağlantılar yerine benim sarıcı komut dosyası için çıkan çıkışında değiştirmelerin gitmek böylece bir komut satırı inşa oldu. PHP kendi başlıklarını içerir beri ben de CGI başlıkları çıktı nuke.