我的问题是我试图在网站上制作一个按钮,如Submit,以在服务器端执行bash脚本我的第一次尝试是在Php an Exec,但不起作用html站点:
<html>
<form action="exec.php" method ="get">
<input type="submit" value="Bestätigen">
</form>
</html>
php脚本:
<?php
shell_exec("/var/www/html/testsite/sc.sh");
header('Location: http://192.168.2.1/hs.html?success=true');
?>
shell脚本:
#!/bin/bash
touch /tmp/testfile
www数据用户拥有所有这些文件如果我点击按钮,它只会将我重新发送到http://192.168.2.1/hs.html?success=true但不执行脚本如果我用ssh执行php,它就可以工作
请任何人检查我的代码,并帮助我,如果有一个更好的选择来执行一个shell脚本与网站,这将使我很高兴知道他们。
php.ini在shell中不同。通过web使用phpinfo((来检查一些阻止执行的设置。使用www数据使用的php.ini(您可以从phpinfo获得它(,并使用用户www数据和shell中的ini执行脚本。
php -c /path-to-custom/php.ini your-script.php
或者:只需打开php错误日志并检查日志即可。
首先检查php.ini文件中是否未禁用此函数。看看这个文件
如果不是,则检查shell_exec((返回的值。根据shell_exec((文档,此函数将返回:
包含已执行命令输出的字符串,如果管道如果发生错误或命令未生成,则无法建立或为null输出
在php脚本页面中尝试这样的代码。请注意,这样做,Location标头将失败。
<?php
$retVal=shell_exec("/var/www/html/testsite/sc.sh");
if (!$retVal) {
echo "<p>Pipe was not established</p>";
} else
echo "<p>Pipe was established:<br>";
if (is_null($retVal)) {
echo "No value returned or command nod executed";
} else {
echo "Value returned: $retVal";
}
echo "</p>";
}
# header('Location: http://192.168.2.1/hs.html?success=true');
?>
如果$retVal
设置为false,则您将看到管道未建立消息。否则,如果它不是false,但设置为null,则表示命令未执行或已执行,并且没有输出。在这种情况下,如果您期望任何输出,请考虑以下内容:
还有一些其他你想尝试的东西。例如使用touch完整路径(/usr/bin/touch(,而不是仅使用命令名。
问候
在我看来,这个命令没有返回任何内容,您需要添加类似的内容
<?php
if(shell_exec("/var/www/html/testsite/sc.sh | echo 1 2>&1")) {
header('Location: http://192.168.2.1/hs.html?success=true');
}
?>