предоставить разрешение на выполнение .c файла

1

я создал файл по следующему коду

$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-данных в корневую группу, но я все равно продолжаю получать один и тот же файл в своем журнале ошибок

  • 0
    от cannot create .. Permission denied , вполне возможно, что ошибки в том, что пользователь php / apache не имеет прав для создания файлов в этом каталоге, что означает вывод gcc . проверьте это с помощью su "phpuser"; touch php-file.txt и то же самое для apache
  • 0
    поместите файл test.c в свой проект и запустите файл php один раз, потому что иногда он не может получить доступ к другим файлам, а не к папке www
Показать ещё 2 комментария
Теги:
permissions
exec

1 ответ

0

Как упоминалось в комментариях, эта проблема является проблемой разрешений, так как пользователь сервера не может создавать папки/файлы в каталоге /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);

Надеюсь это поможет. Удачи.

  • 0
    спасибо @DanBelden, но я получаю следующую ошибку "sh: 1: не могу создать 1: gcc: отказано в разрешении: ошибка: 2: нет такого файла или каталога"
  • 0
    Это окончательный вывод кода, который вы запускаете? gcc, кажется, указывает, что файл не существует? Можете ли вы подтвердить, что test.c был создан и содержит код, который вам нужен? Таким образом, вы можете увидеть, где в вашем коде происходит сбой без ошибки.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню