ホームページ php教程 php手册 PHP で Web 経由で C/C++ アプリケーションを実行する

PHP で Web 経由で C/C++ アプリケーションを実行する

Jun 21, 2016 am 09:15 AM
lt php

c++|web|プログラム|実行

1. はじめに

Unix/Linux についてある程度の知識がある場合、それらのほとんどには C と C++ 用の独自のコンパイラ (それぞれ GCC と G++) が付属していることを知っているはずです。 Unix では、プログラムのインストールや Make など、さまざまな場所でこれらのコンパイラが使用されます。いくつかのコンソール コマンド、C++ および PHP を使用して、PHP プログラムで実行できる完全な C++ プログラムの例を生成し、対応する出力結果を取得する方法を示します。まず C++ プログラム コードを生成してコンパイルし、次に PHP 関数 passthru を使用してこのプログラムを実行する方法について説明します。ある意味、この記事は、Web ページを通じて一般的なプログラムにアクセスする方法を提供します。

この記事をよりよく理解するには、Apache と最新バージョンの php を実行している UNIX/Linux サーバーが必要です。同時に、C++ と UNIX コンソール コマンドも習得する必要があります。もちろん、PHP プログラミングの経験も必要です。

2. C++ プログラムを作成します

たとえば、コマンド ラインからパラメータを受け取ることもできる単純な C++ プログラムを作成し、それに Sampleapp という名前を付け、次の方法で 3 つの異なるパラメータをそれに渡すことができます。
Sampleapp ?パラメータ 1?パラメータ 2?パラメータ 3

このプログラムの機能は、渡されたパラメータの数と各パラメータの値を出力することであり、その後、コンパイルされた C++ プログラムを実行するために PHP スクリプト プログラムを使用できます。 。

お気に入りのテキスト エディタを使用して、Sampleapp.cpp という名前の新しいファイルを作成し、このファイルに次のコードを入力します。

#include

int main(int argc, char* argv [])
{
cout < <<(argc-1==1?) ) <<<<

cout<<(argc-1==1?)<<< argc-1 == 1 ? "" : "s") << << for(int i = 1; i < argc; i++)
<< "[" <
return 0;
}
この C++ プログラムには、プログラムのエントリ ポイント main() が含まれています。 main() 関数は 2 つのパラメータを受け取ります: argc (コマンド ラインは、渡されるパラメータ) と argv (渡されるパラメータの実際の値を含む文字ポインタの配列)。これら 2 つのパラメータは、C++ コンパイラによって自動的にキャプチャされます。

cout < <<(argc-1==1?) << "." << endl;;
この文は実行コマンドラインから渡されたパラメータの数を取得することを意味します。文字ポインター配列 Argv は 0 から取得されます。これには、少なくとも 1 つの実際の値 (つまり、このプログラムのパスと名前) が含まれます。この値は、C++ コンパイラーによって自動的に追加されます。条件演算子「?」は、コマンド ラインから複数のパラメーターが渡されるかどうかを判断するために使用されます。たとえば、コマンド ラインから 2 つのパラメーターが渡された場合、プログラムは次の情報を出力します:

あなたは 2 つの引数を渡しました。 ")
<< " 議論 " << (argc-1 == 1 ? "" : "s") << " "
<< (argc-1 == 1 ? " です) " : "are") << ": " << endl << endl;
次に、同じく条件演算子を使って別の文を出力します。ただし、プログラム実行コマンド ラインからパラメータを渡さなくても、main 関数の argv[] パラメータには値が含まれることに注意してください。同様に、コマンドラインからプログラムに 2 つのパラメータを渡すと、プログラムは次の情報を出力します:

これらの引数は:

for(int i = 1; i < argc; i++)
cout << ; "[" << i << "] " << argv[i] << endl; 最後に、main 関数はコマンドラインから渡された各パラメーターを 1 つずつ出力します。この関数は単純な for(;;) ループ文を使用して、パラメータの数に応じてパラメータ値を 1 つずつ出力できます。プログラムに「first」と「second」という 2 つのパラメータを渡すと、for ループによって出力される結果は次のようになります。

[1] ?first
[2] ?second

以上がこの C++ の簡単な説明です。プログラムとその関数 これは非常に簡単で、関数 cout を使用して、コマンド ラインで渡されたパラメーターを出力画面に表示するだけです。次に、この .cpp ファイルをコンパイルします。Windows プラットフォームを使用している場合は、使用しているサーバーに Telnet 接続する必要があります。ここでは、ほとんどの Unix マシンで提供されている G++ コンパイラを使用して、このソース ファイルをコンパイルします。ただし、マシンに G++ がインストールされていることを確認するには、次のコマンドを入力します。 G++ がすでにインストールされている場合、Unix シェルは G++ が存在する場所へのフルパスを表示します。インストールされていない場合は、「コマンドが見つかりませんでした」というメッセージが表示されます。G++ はここからダウンロードできます。

ソースファイルがあるディレクトリに次の G++ コマンドを入力します:

g++ -c sampleapp。 cpp.
パス このコマンドを使用すると、.cpp ファイルをマシンコードを含むターゲット ファイルにコンパイルします。 ls?a コマンドを使用すると、新しいファイルsampleapp.o がこのディレクトリに表示されることがわかります。これは、.cpp ソース ファイルがマシン コードにコンパイルされた結果です。ただし、最終的に必要なのは実行可能ファイルです。次の G++ コマンドも入力する必要があるためです:

g++ sampleapp.cpp ?o sampleapp
このようにして、sampleapp という名前の実行可能ファイルを取得します。ただし、Unix での実行可能ファイルは Windows とは異なり、拡張子がつかないことに注意してください。

これで、次のコマンドを与えると、プログラムの実行結果が確認できます:

sampleapp one -two /three
次の実行結果が確認できます:

3つの引数を渡しました。 [ 1] one
[2] ?two
[3] /three

実行可能な C++ プログラムが生成されたので、Web ブラウザーからこのプログラムにアクセスできる PHP チュートリアル プログラムを生成します。

3. PHP スクリプト プログラムを生成する

インターネット経由で C++ プログラムを呼び出すためには、PHP スクリプト プログラムを生成する必要があります。この PHP スクリプトにはフォームがあり、ユーザーが Sampleapp プログラムに渡すことができるパラメーターを入力できるようになります。 PHP スクリプトのコードは長すぎるため、ここではすべてをリストしません。必要に応じて、以下のアドレスからダウンロードできます。 (Phpコード)

if(@$submit)
{

}
else
{
}
まず、スクリプトプログラムは、変数$submitに値があるかどうかを確認します。プログラムの背後でフォームの送信が行われ、デフォルトでは null 値が設定されます。 @ 記号の機能は、変数 $submit の値が存在しない場合に、関連するエラー メッセージを無視することです。

変数 $submit はデフォルトでは空であるため、else{} 内のコードが最初に実行され、単にブラウザ上にフォームが表示されます。フォームの action 属性は変数 $PHP_SELF に設定されます。つまり、このページはフォームが送信された後に返されます。同時に、フォーム フォームにはテキスト入力バーが含まれており、ユーザーはこれを使用して、C++ プログラムに渡すコマンド ライン パラメーターを入力できます。フォームは以下の通りです:

実行コマンドを入力してフォームを送信すると、変数 $submit (Go ボタンの名前) に値が取得され、PHP 教科書では if{} の間のコードが実行されます。

if($args == "")
echo "

引数が入力されていません。

";
else
{
echo "

SampleApp Result

";
$command = "/htdocs/sampleapp " .escapeshellcmd($args);

passthru($command);
}
変数 $args は自動的に生成され、その値はテキスト入力バーから渡されます。フォームフォームの値。情報が入力されない場合、プログラムは単に値が入力されていないことをユーザーに通知します。

ユーザーが空ではない情報を入力すると、プログラムはテキスト フィールドの値である変数 $args を C++ プログラムに渡します。次のコードは、C++ プログラムを実行するための実行コマンドです:

$command = "/htdocs/sampleapp " .ecapeshellcmd($args);
関数 eacapeshellcmd は、「,」などの呼び出しをフィルタリングするためのセキュリティ チェック ツールとして使用されます。 、「」、「」、その他の特殊文字。これにより、一部のユーザーが特定の文字を入力して内部システム コマンドを呼び出すことができなくなります。

例えば、Formフォームのテキストフィールドに「1 ?two /three」と入力すると、変数$commandの値は、 /htdocs/sampleapp 1 ?two /three

ということがわかります。プログラムの定義。sampleapp 絶対パス。この例では、プログラム ファイルは /htdocs ディレクトリにあります。独自のプログラムが配置されているディレクトリに応じて、対応する変更を加えることができます。

passthru($command);

最後に、PHPの関数passthruを使って、変数$commandに含まれるコマンドを実行し、元の実行結果をブラウザに出力します。私のサーバーでは、結果を返す HTML ページは次のとおりです:

wこの記事を終える前に、遭遇する可能性のあるいくつかの問題についてお話したいと思います。まず、sampleapp.php チュートリアル プログラムを実行したときに、プログラムからの出力情報が表示されない場合は、セーフ モードがオンになっている可能性があります。その場合、システムは PHP スクリプトによるシステム内部プログラムの実行を許可しません。セーフ モードをオフにする方法については、Web ページ http://www.php.net/manual/en/features.safe-mode.php に詳細な説明が記載されています。次に、一部の Unix システムでは、PHP 関数 passthru が内部プログラムの出力を閲覧ページに渡すことができない場合、パススルー関数の代わりに system 関数を使用できます。

IV. 結論

この例からわかるように、Unix オペレーティング システムは非常に強力であり、PHP を使用すると、開発者はスクリプトを通じてシステム内部プログラムを独立したスレッドで実行できます。この記事で示した例は非常に単純ですが、もう少し努力することで、Mysql データベースを更新したり、他のシステム コマンドを実行したり、オペレーティング システムのファイル/ディレクトリ構造を操作したりできる C++ プログラムを作成できます。ただし、何があっても、システムのセキュリティを確保し、他のスクリプトが内部システム プログラムに自由にアクセスできないようにする必要があります。



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles