通过HTML页面配合PHP执行shell脚本无输出无文件生成问题求助
PHP执行Shell脚本问题解决方案
- 首先明确404报错的根源:你之前将前端
form的action属性改为本地文件系统绝对路径是错误的,action对应的是Web访问路径而非服务器本地文件路径,保持原有./test.php即可,不需要修改前端路径。 - 修正test.php代码,使用PHP魔法常量
__DIR__获取脚本所在目录的文件系统绝对路径,同时捕获执行错误信息方便排查,修改后代码如下:
<?php // __DIR__ 自动获取当前test.php所在的文件系统绝对路径,拼接出shell脚本的准确位置 $shell_path = __DIR__ . '/bash_script.sh'; // 第二个参数接收执行输出,第三个参数接收执行状态码,非0表示执行失败 exec($shell_path, $exec_output, $exec_code); // 调试阶段可取消下方注释查看执行详情,正式上线后注释即可 // var_dump($exec_output, $exec_code); header('Location: http://local.server.edu/ABC/abc_test/'); ?>
- 调整bash脚本的路径和权限:
- 给bash脚本补充绝对路径,避免相对路径写入位置出错,修改后的bash_script.sh代码:
#!/bin/bash touch /local/sequence/temp/abc_test/test_file.txt- 给脚本和目录设置正确的权限,Web运行用户(通常为www-data、apache、nobody)需要脚本执行权限和目录写入权限,执行以下命令:
cd /local/sequence/temp/abc_test # 给shell脚本加执行权限 chmod +x bash_script.sh # 给目录开放Web用户写入权限,测试阶段可临时用chmod 777 . 验证,正式环境请配置合理的所属用户权限 chown www-data:www-data ./ - 确认Web服务器符号链接配置:你使用了符号链接映射目录,需要确保Web服务器开启了跟随符号链接的配置:
- 若使用Apache,需要在对应站点配置的
<Directory>段添加Options +FollowSymLinks,配置修改后重启Apache生效 - 若使用Nginx,默认支持符号链接,无特殊配置即可正常访问
- 若使用Apache,需要在对应站点配置的
内容的提问来源于stack exchange,提问作者kevin41
相关产品推荐
相关产品推荐

