【发布时间】:2021-12-06 15:04:26
【问题描述】:
我正在尝试使用 PHP 从 HTML 页面执行 shell 脚本。我找到了一个之前的示例here,我一直在尝试遵循该示例,但我遇到了问题。我不确定原因是什么,但没有返回错误,也没有从 bash 脚本创建文件。
index.php:
<!DOCTYPE html>
<html>
<head>
<style></style>
</head>
<body>
<form action="./test.php">
<input type="submit" value="Open Script">
</form>
</body>
</html>
test.php
<?php
exec("./bash_script.sh");
header('Location: http://local.server.edu/ABC/abc_test/');
?>
bash_script.sh
#!/bin/bash
touch ./test_file.txt
我注意到可能导致问题的一件事是本地服务器上的路径似乎与文件系统不完全匹配。
如果我将脚本中的所有相对路径切换为绝对路径,例如:
/local/sequence/temp/abc_test/file.exe
然后单击按钮运行脚本后,我收到一条错误消息:
The requested URL /local/sequence/temp/abc_test/test.php was not found on this server
编辑:
这三个文件位于/local/sequence/temp/abc_test 并且有一个符号链接指向该目录/export/www/htdocs/ABC
【问题讨论】:
-
“请求的 URL”?这听起来不对。您是否尝试过从命令行执行 bash_script.sh?在添加 php 的额外变量之前确保它按预期工作
-
是的,我已经在命令行上测试过了,它可以工作。现在它所做的只是触摸一个文件,而不是一个非常复杂的 bash 脚本。
-
同意,只是消除了一个混淆变量。我注意到的下一件事是不同的文件名。该错误表明它找不到 test.php 脚本。所以 bash 脚本中的绝对路径甚至没有发挥作用。是不是不小心把test.php的名字或者位置改了?
-
我根本没有更改名称或位置,但也许他们不在正确的位置开始?它们位于
/local/sequence/temp/abc_test并且有一个符号链接指向该目录/export/www/htdocs/ABC -
在您的表单操作中,我将使用“/test.php”并确保 test.php 在您服务器的文档根目录中(与 index.php 相同)。或者更好的是,省略操作值 snd 只需使用 index.php 来运行 bash 脚本。 (如果有帮助,我会在答案中解释)