я создал файл по следующему коду
$dir = '/home/srikanth/Desktop';
if ( !file_exists($dir) ) {
mkdir ($dir, 0777);
}
//$code contains the code C code which i want to execute
file_put_contents ($dir.'/test.c', $code);
$path = "/home/srikanth/Desktop/test.c";
$Command = "gcc $path 2&>1";
exec($Command,$return_val,$error);
когда я открываю файл журнала ошибок, я вижу следующую ошибку
sh: 1: cannot create 1: Permission denied
gcc: error: 2: No such file or directory
Я попробовал следующие команды для изменения разрешения, в настоящее время я использую Ubuntu 14.04.2 и Apache server
chmod 0777 /home/srikanth/Desktop/test.c
sudo chmod -R 777 /home/srikanth/Desktop/test.c
sudo usermod -aG www-data root
addgroup www-data
Я использовал эти команды для добавления www-данных в корневую группу, но я все равно продолжаю получать один и тот же файл в своем журнале ошибок
Как упоминалось в комментариях, эта проблема является проблемой разрешений, так как пользователь сервера не может создавать папки/файлы в каталоге /home/srinkanth/Desktop. Или что-то в компиляторе gcc не может создавать файлы во время компиляции вашего c-кода.
Добавление 777 к этой СПРАВОЧНИК (не сам тестовый файл) скорее всего устранит проблему. Однако хорошей практикой является добавление выходов/исключений в ваш код, чтобы дать вам больше информации о проблемах, если и когда они произойдут и что вызвало их.
Вот мой совет:
$dir = '/home/srikanth/Desktop';
if (!is_dir($dir)) {
$mkDir = mkdir($dir, 0777);
if (!$mkDir) {
exit('Failed to create ' . $dir);
}
}
Затем вы можете добавить дополнительную информацию об ошибке в свой код файла:
$codePath = $dir.'/test.c';
$created = file_put_contents($codePath, $code);
if (!$created) {
exit('Failed to create ' . $codePath);
}
Если вы дойдете до этого этапа до вашего кода исполняемого файла:
$codePath = $dir . '/test.c';
$command = "gcc $codePath 2&>1";
$output = [];
$returnStatus = '';
$lastLine = exec($command, $output, $returnStatus);
Затем вы можете вывести весь ваш компилятор gcc, склеивая части массива вывода обратно вместе с новой строкой, поскольку exec анализирует каждую строку вывода как запись в выходном массиве:
echo implode("\n", $output);
Надеюсь это поможет. Удачи.
cannot create .. Permission denied
, вполне возможно, что ошибки в том, что пользователь php / apache не имеет прав для создания файлов в этом каталоге, что означает выводgcc
. проверьте это с помощьюsu "phpuser"; touch php-file.txt
и то же самое для apache