Ошибка выполнения при запуске из браузера - PullRequest
0 голосов
/ 20 октября 2018

Я создаю онлайн-компилятор для C и C ++ с использованием php, поэтому мы используем gcc compiler для выполнения с использованием функции "shell_exec",

test.php

<?php $output = shell_exec("gcc /var/www/test/main.c 2>&1"); print_R($output); ?>

Если я выполняю в терминале, как php test.php, работает нормально и создает a.out скомпилированный файл.

Но если я пытаюсь запустить в браузере, как localhost/test.php, ниже приведена ошибка

gcc: ошибка при попытке выполнить exc 'cc1': execvp: Нет такого файла или каталога

Я дал полное разрешение (0777)test.php,

$ whereis cc1 // cc1:

Найдите ниже версию, которую я использую

gcc версии 5.4.0

PHP 7.0.32

ОС: Ubuntu 16.04

Сервер: Nginx

Есть ли альтернатива для запуска C и C ++ с использованием PHP иликак решить эту проблему при запуске из браузера.

1 Ответ

0 голосов
/ 20 октября 2018

При чтении сообщения об ошибке проблема связана с двумя причинами:

  • php не удается найти gcc, поскольку переменная $path установлена ​​неправильно, в файле php следуетвведите что-то вроде PATH=/usr/bin && gcc /var/www/test/main.c.В этом примере gcc и другие материалы находятся в каталоге /usr/bin.Чтобы узнать, где находится, например, cc1, введите find / -name cc1 и добавьте его в $PATH: PATH=/some/path:/some/other/path
  • Текущий каталог php не может быть доступен для записи, поэтому укажите, где должен быть создан сгенерированный файл.быть созданным: gcc /var/www/test/main.c -o /var/www/test/main
  • Каталог /var/www/test должен быть доступен для записи пользователю, выполняющему программу php.

Обратите внимание, что пользователь, запускающий программу php, не требуетсяroot ...

Итак, ваш php-файл должен выглядеть так:

<?php
 $output = shell_exec("PATH=/usr/bin && gcc /var/www/test/main.c -o/var/www/test/main 2>&1");    
 print_R($output);
?>
...