PHPを使用したC ++ファイルのコンパイル

私はWindowsマシンでPHPを使用しています。私はまたDev C ++を使います。次のコマンドを使用して、CMD上の.cppファイルを完全にコンパイルできます。

g++ hello.cpp -O3 -o hello.exe

今私がやろうとしているのは、php system()関数を使って同じコマンドを実行することです。

システム( "g ++ c:\ wamp \ www \ grader \ hello.cpp -O3 -o C:\ wamp \ www \ grader \ hello.exe");

コンパイルされません。私は迷っています、私に何が欠けているか教えてください。

私もこの質問を見て、私が必要としているものを正確に示していますが、そこに私の場合に役立つ解決策を見つけることができませんでした:

コンパイルするPHPスクリプトc ++ファイルと実行ファイルを入力ファイルで実行する

3
また、PHPを実行しているアカウントに c:\ wamp \ www \ grader ディレクトリの変更権があることを確認してください。
追加された 著者 Anthony,
どのようなエラーが表示されますか?
追加された 著者 robert,
g ++ がインストールされ、WindowsサーバーのPATHに表示されていますか?
追加された 著者 Basile Starynkevitch,

3 答え

PHPのexecコマンドを使用します。

echo exec('g++ hello.cpp -O3 -o hello.exe');

うまくいくはずです。

There's a whole family of different exec & system commands in PHP, see here:

http://www.php.net/manual/en/ref.exec.php

出力を変数にする場合は、次のようにします。

$variable = exec('g++ hello.cpp -O3 -o hello.exe');

それでも問題が解決しない場合は、あなたのパスにg ++があることを確認してください。また、実行に十分な権限があればログインしてください。

また、PHPが本質的にあなたのWebサーバーによって実行されていることに気付くかもしれません(cmdプロンプトからPHPを実行している場合を除きます).WebサーバーのユーザーIDは、G ++が作成しようとしているフォルダ出力ファイル。

出力フォルダの 'Everybody'への書き込みアクセスを一時的に許可すると、その場合に該当するかどうかが確認されます。

6
追加された
PHPのマニュアルページは、すべての相違点を説明してくれるので、非常に手助けします。しかし、あなたの根本的な問題は権限に関連することになるとはかなり確信しています。あなたがどのように乗っているか教えてください。 :-)
追加された 著者 shawty,
うん、私は答えた後、上記のアップデートに気づいた。 :-)パスは、* nixでの作業とは少し違って動作します。これは何度も私を巻き込んでいます。私はまだWindowsのIIS Webサーバーの下でPHPを実行している場合は、将来のrefrenceのための権限の注意を払っています。
追加された 著者 shawty,
返信いただきありがとうございます、私はあなたのアプローチを解決しようとします。私はWindowsのコマンドライン(私はLinuxの背景から来た)に新しいので、私はWindowsの慣習に慣れていません。私はLinuxでshell_exec()を実行するために使用され、それは正常に働いた。
追加された 著者 Nazar,
実際には許可されていませんでした。問題はg ++へのフルパスでした。私はPATHにg ++を持っていたので、完全なパスを書く必要はないと思っていました。どうやら私はする必要があります:)
追加された 著者 Nazar,

2つのこと:

  1. 二重引用符を使用していて、パスの内側に\をエスケープしていません。
  2. g ++へのフルパスを使用していません。

最初のものは\として重要で、何かがこのような文字列で特別な意味を持ちます(あなたは新しい行として\ nを知っているかもしれません).2番目のものはPHP環境が異なる検索パスを持つかもしれないので関連します。

解決策は

system("c:\\path\\to\\g++ c:\\wamp\\www\\grader\\hello.cpp -O3 -o C:\\wamp\\www\\grader\\hello.exe");

代わりに、二重引用符の代わりに一重引用符を使用することができます。また、厳密ではない厳密なエスケープ規則を使用します

system('c:\path\to\g++ c:\wamp\www\grader\hello.cpp -O3 -o C:\wamp\www\grader\hello.exe');

Windowsでサポートされている\の代わりに/を使用することもできます。

system("c:/path/to/g++ c:/wamp/www/grader/hello.cpp -O3 -o C:/wamp/www/grader/hello.exe");

あなたがやることはあなたの選択ですが、多くは最初のものを醜いものと考えているかもしれませんが、最後のものはWindowsの悪いスタイルとして考えるかもしれません;-)

3
追加された
ありがとう、私は最初のアプローチを使用し、それは働いた!私はg ++のPATHルールを書いて以来、私はg ++へのフルパスは必要ないと思っていました。
追加された 著者 Nazar,

みんなありがとう。私は上記のコードで与えられたコードを実行しようとしたと魅力的なように働いた。

私はブラウザを使って次のコードを実行しました

$var =  exec("g++ C:/wamp/www/cpp/hello.cpp -O3 -o C:/wamp/www/cpp/hello.exe");
echo $var;

exeファイルが作成されます。私はexeファイルを実行すると結果を見ることができますが、問題はブラウザで上記のコードを実行すると結果がWebページに表示されません。私はすべてのユーザーに完全なアクセス許可を与えましたが、Webページに結果を表示しません。

私は実際にコンパイルされたC ++プログラムから結果を取得し、いくつかのjqueryハイチャートでWebページに表示したいと思っています。

もう一度おかげさまで、それは私が多くを助け、私も多くを学んだ。

0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com