Скомпилируйте файл C ++, используя PHP - PullRequest
4 голосов
/ 25 ноября 2011

Я использую PHP на Windows Machin.Я также использую Dev C ++.Я могу прекрасно скомпилировать файл .cpp на CMD, используя эту команду:

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

Теперь я пытаюсь выполнить ту же команду с помощью функции php system (), поэтому она выглядит следующим образом:

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

, но не компилируется,Я заблудился, скажите, пожалуйста, что мне не хватает?

Я также посмотрел на этот вопрос, и это именно то, что мне нужно, но я не смог найти там полезного решения для моего случая:

PHP-скрипт для компиляции файла C ++ и запускаисполняемый файл с входным файлом

Ответы [ 3 ]

7 голосов
/ 25 ноября 2011

Используйте команду PHP exec.

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

должно работать.

Существует целое семейство различных команд exec & system в PHP, см. Здесь:

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

Если вы хотите вывод в переменную, используйте:

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

Если это не сработает, убедитесь, что g ++ доступен на вашем пути и что вы вошли в систему с достаточным количеством привилегий.чтобы разрешить его выполнение.

Вы также можете обнаружить, что он не работает, потому что PHP по существу выполняется вашим веб-сервером (если вы также не запускаете PHP из командной строки cmd), и идентификатор пользователя веб-сервера может не иметьдоступ на запись к папке, в которой G ++ пытается создать выходной файл.

Временное предоставление доступа на запись «Всем» в выходной папке проверит, так ли это.

4 голосов
/ 25 ноября 2011

Две вещи:

  1. Вы используете двойные кавычки и не выходите из \ внутри пути.
  2. Вы не используете полный путь к g ++.

Первый из них важен, так как \ сопровождается чем-то, что имеет специальное значение в такой строке (вы можете знать \ n как новую строку), второе имеет значение, поскольку среда 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; -)

0 голосов
/ 14 мая 2013

Спасибо всем. Я попытался запустить коды, приведенные в вышеприведенных постах, и это сработало как шарм.

Я запустил следующий код в браузере

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

EXE-файл создан. Я могу видеть результат, когда я запускаю exe-файл, но проблема в том, что когда я запускаю приведенный выше код в браузере, результат не отображается на веб-странице. Я дал разрешение на полный доступ всем пользователям, но все равно даю не показывает результат на веб-странице.

Мне действительно нужна помощь по этому вопросу, так как я делаю проект по моделированию отжига, в котором я хочу получить результат из скомпилированной программы на С ++ и отобразить его на веб-странице с некоторыми высокими значениями jquery.

Еще раз спасибо всем, это мне очень помогло, и я тоже многому научился.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...