我通过以下代码
创建了一个文件$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服务器
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-data添加到根组 但我仍然在我的错误日志中继续获取相同的文件
答案 0 :(得分:0)
如评论中所述,此问题是权限问题,因为服务器用户无法在/ home / srinkanth / Desktop目录中创建文件夹/文件。或者gcc编译器中的某些内容在编译c代码时无法创建文件。
将777添加到该DIRECTORY(不是自己的测试文件)可能会解决问题。但是,良好的做法是在代码中添加退出/异常,以便在问题发生时及其发生的原因时为您提供更多可见性。
以下是我的建议:
$dir = '/home/srikanth/Desktop';
if (!is_dir($dir)) {
$mkDir = mkdir($dir, 0777);
if (!$mkDir) {
exit('Failed to create ' . $dir);
}
}
然后,您可以在put文件代码中添加额外的调试信息:
$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);
希望这会有所帮助。 古德勒克。