我正在尝试运行此命令在我的覆盆子pi中创建一个文件夹,但它不起作用。 我不擅长PHP或HTML。我用谷歌搜索,我无法解决,所以发布在这里。 如果重复并且存在解决方案。请给我链接。 TIA 代码:
<html>
<head>
<?php
if (isset($_POST['TestA']))
{
exec('sudo mkdir /www/test');
}
if (isset($_POST['TestB']))
{
shell_exec('sudo mkdir /www/test1');
}
?>
<title></title>
</head>
<body>
<form method="post">
<table
style="width: 75%; text-align: left; margin-left: auto; margin-right: auto;"
border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="text-align: center;">Test case 1</td>
<td style="text-align: center;">Test case 2</td>
</tr>
<tr>
<td style="text-align: center;"><button name="TestA">test 2</button></td>
<td style="text-align: center;"><button name="TestB">test 2</button></td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
答案 0 :(得分:3)
您是否注意到您尝试使用sudo
运行命令,这意味着用户 www-data 必须包含在/ etc / sudoers文件中。
我已经尝试过你的代码了,如果我删除'sudo'并且我在/ www目录中给予权限,它就有效。
我认为您需要在sudoers文件中配置用户。
我的sudoers文件的一个例子:
#WWW-DATA
User_Alias WEBUSER = www-data
Cmnd_Alias CMDCOMMAND = /usr/sbin/asterisk, /sbin/iptables
WEBUSER ALL = NOPASSWD:CMDCOMMAND
#Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
您需要使用您的网络服务器将以root身份运行的命令替换CMDCOMMAND。在这种情况下mkdir
。
请记住,您需要转到 / etc / 目录并使用visudo -f sudoers
正确编辑sudoers文件。
sudoers
Here
P.S:如果您想测试您的网络服务器是否可以运行命令,您可以:
su - www-data
它将成为sh
控制台。
您可以在添加代码之前运行命令。
答案 1 :(得分:0)
您可以使用PHP创建目录,而无需调用shell。 PHP有自己的mkdir函数。
替换此行:
exec('sudo mkdir /www/test');
用这个:
mkdir("/www/test1", 0700);
并对第二个mkdir命令执行相同操作。
第一个参数是创建第二个的目录是模式(权限)。
如果你真的想在 / www 中创建这个目录(请参阅下面的安全说明),你需要编辑www-data用户的sudoers文件,如Ivan&#39; s中所述。回答或创建目录并更改所有者。您可以使用以下内容创建 / www 目录:
sudo mkdir /www
并使用以下内容更改所有权:
chown www-data:www-data /www
注意:提供www-data sudo权限会产生安全漏洞。您可能应该在/ var / www / html /目录中创建所需的目录,其中权限不是问题,并且不需要sudo。如果您不希望从Web访问这些目录,我建议在/ var / www中创建它们并更改所有者。