Я пробовал эту функцию из PHP с:
exec("gcc testC.c -o runner.out 2>&1",$output,$status);
но когда я печатаю $ output, я получаю эту ошибку :(:
gcc: error trying to exec 'cc1': execvp: No such file or directory\n
Если я бегу
exec("/usr/bin/gcc testing/pruebaC.c -o testing/frommm.out 2>&1",$output,$status);
я понимаю
collect2: fatal error: cannot find 'ld'\n
Мой пользователь:
groups vagrant
vagrant : vagrant root adm cdrom sudo dip www-data plugdev lpadmin sambashare
Мой каталог gcc
/usr/bin$ ls -l gcc
lrwxrwxrwx 1 root vagrant 7 Apr 7 2014 gcc -> gcc-4.8
Если я запускаю из терминала всю работу, я могу скомпилировать и выполнить, но из PHP я не могу 🙁
Я не уверен, что произошло в комментариях, но я выяснил корень проблемы и отвечаю на это просто, чтобы прояснить для любых будущих читателей.
@zneak прав. Если вы попробуете и echo $_ENV["PATH"]
и ничего не получить в ответ, это означает, что PHP выполняет gcc
и любые другие исполняемые файлы, не ища их в PATH
переменная. В результате он иногда не может найти ни одного из них. @ Марко интерпретируется как повторение PATH
переменная в bash, и выполняется echo $PATH
вместо. Тем не менее, эти две переменные являются отдельными, и часто PHP PATH
не установлен в то время как Баш PATH
является.
Чтобы решить эту проблему, вам нужно определить PATH
для PHP в его переменных среды. Если вы не уверены, что поставить, обратитесь к PATH
переменная определена в bash. Например, мой текущий проект Laravel имеет строку
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
в нижней части это .env
файл, и теперь выполняется просто gcc
(без указания полного пути /usr/bin/gcc
) работает правильно.
Других решений пока нет …