Попытка скомпилировать C-код с PHP

У меня есть файл с именем gcc.exe, и у меня есть php-страница … Я хочу использовать:

gcc test.c 

И, если есть какая-то ошибка компиляции, я хочу показать ее на php-странице … Но я не могу. Что происходит: если файл верен, он генерирует файл .exe, но если это неправильно, ничего не происходит. Я хочу здесь снова показать все ошибки.

У кого-то есть идея?

Изменить [1]: Некоторый код:

 <?php exec("gcc teste.c",$results); print_r($results) ?> 

Вывод:

 *Nothing* 

Редактировать [2]: я попытался вывести gcc-выход в текстовый файл: таким образом (по запросу):

gcc test.c > teste.txt

Теоретически все на экране переходит в текстовый файл. Но это было неудивительно!

Редактировать [3]: quantSoup: я пробовал это и …

array(0) { } int(1)

Ничего … Что-нибудь еще?

Solutions Collecting From Web of "Попытка скомпилировать C-код с PHP"

Вероятно, gcc генерирует вывод ошибки на stderr , который, как представляется, exec не записывается в массив $ results. Решения для этого, скорее всего, будут иметь особую специфику для платформы. Если вы работаете в среде, подобной unix, можно было бы сделать что-то вроде gcc foo.c 2>&1 для перенаправления stderr на stdout. Я не знаю, как это можно добиться в Windows, или если существуют аналогичные концепции. Возможно, кто-то еще может разработать, если ваш вопрос связан с платформой.

Это подтверждается тем фактом, что соединение с файлом не работало.

ссылка exec ()

 string exec ( string $command [, array &$output [, int &$return_var ]] ) 

Пытаться

 exec('gcc test.c', $output, $return); var_dump($output); var_dump($return); 

Используйте proc_open для захвата stderr:

 <?php $process = proc_open('gcc test.c', array( 1 => array("pipe", "w"), //stdout 2 => array("pipe", "w") // stderr ), $pipes); echo stream_get_contents($pipes[2]); 

дает, например:

 sh: gcc: команда не найдена

Мы используем систему на основе PHP, которая выполняет сборку и фиксирует результаты и ошибки в окнах. У нас был лучший успех, если PHP-скрипт создал пакетный файл, содержащий все команды сборки, а затем exec -ing этот командный файл. Когда он создает пакетный файл, он перенаправляет стандартный вывод компилятора на один файл журнала и стандартную ошибку на другую ( commandname >>log.txt 2>>err.txt ). Поскольку ваш вывод разделен между двумя файлами, он также помогает генерировать строки, которые вызывают описания происходящего (например, «Создание библиотеки libsockets.dll»), чтобы вы могли лучше сопоставить два журнала. Иногда даже помогает отбросить каждую команду до ее выполнения. Обычно процесс сборки останавливается при возникновении ошибки (по крайней мере, вероятно, это должно быть ), поэтому содержимое журнала ошибок обычно совпадает с хвостом обычного журнала.