2011-11-24 99 views
3

我在Windows機器上使用PHP。我也使用Dev C++。我可以使用此命令在CMD完美編譯.cpp文件:編譯C++文件使用PHP

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 script to compile c++ file and run the executable file with input file

+1

你做了什麼錯誤? – robert

+0

您確定在您的Windows服務器上安裝了「g ++」,並且在PATH中可見? –

+0

此外,你確定該帳戶運行PHP擁有修改權限的'C:\ WAMP \ WWW \ grader'目錄? – Anthony

回答

3

兩件事情:

  1. 你是使用雙引號,並且不會從路徑中轉義\。
  2. 您沒有使用g ++的完整路徑。

第一個是重要的,因爲在這樣的一個字符串中有一個特殊的含義(你可能知道\ n爲新行),第二個是相關的,因爲PHP環境可能有不同的搜索路徑。

一個解決方案可能是

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

或者您可以使用單引號,這一翻譯雙引號的,他們使用diffeent,不太嚴格的轉義規則

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 ;-)

+0

謝謝,我用第一種方法,它的工作!由於我爲g ++編寫了PATH規則,因此我認爲我不需要g ++的完整路徑。 – Nazar

6

使用PHP exec命令的最後一個壞的風格。

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

應該工作。

有不同的exec &系統命令的PHP中的整個家庭,在這裏看到:

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

如果你想輸出到一個變量,然後使用:

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

如果沒有按」 t工作,然後確保g ++在你的路徑中可用,並且你有足夠的特權登錄以允許它執行。你可能會發現它的失敗原因PHP本質上是由你的Web服務器執行的(除非你也從cmd提示符運行PHP),並且Web服務器用戶ID可能沒有對G ++所在文件夾的寫訪問權限試圖創建輸出文件。

暫時授予對輸出文件夾「每個人都寫訪問將覈實,如果是這樣的話。

+0

謝謝您的回覆,我會盡力解決您的問題。由於我是windows命令行的新手(我來自linux背景),我不習慣使用Windows約定。我曾經在linux上運行shell_exec(),它工作正常。 – Nazar

+0

PHP手冊頁將幫助你,因爲它會解釋所有的差異。但我確信,你的根問題將與權限相關。讓我知道你是怎麼辦的。 :-) – shawty

+0

這實際上並不是許可,問題出在g ++。exe的完整路徑上。由於我的PATH中有g ++,因此我認爲我不需要寫完整路徑。顯然我需要:) – Nazar

0

感謝大家。我試圖運行上面的帖子中給出的代碼,它的工作就像一個魅力。

我用我的瀏覽器

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

創建exe文件運行下面的代碼。我能夠看到結果,當我運行exe文件,但問題是當我在瀏覽器中運行上面的代碼,結果不顯示在網頁上。我向所有用戶授予完全訪問權限,但仍然不會在網頁上顯示結果。

我真的需要這種幫助,因爲我是在模擬退火做一個項目,我想從編譯的C++程序的結果,並與一些jQuery的highcharts網頁顯示。再次向所有

謝謝,這已經很多幫助我,我已經學到了很多也。