如何在本地PHP服务器实现上传PHP文件后自动执行而非仅保存
你可以在处理上传请求的PHP逻辑里,在文件保存成功后增加后缀判断,匹配到PHP后缀就直接执行文件即可,以下是可直接复用的核心代码:
// 此处替换为你自己的上传文件存储目录 $upload_root = './upload_files/'; // 表单里上传文件的字段名替换为你自己实际的字段名 $target_path = $upload_root . basename($_FILES['upload_file']['name']); // 先执行文件保存逻辑 if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $target_path)) { // 判断文件后缀为PHP就触发执行,strtolower兼容大写后缀的情况 if (strtolower(pathinfo($target_path, PATHINFO_EXTENSION)) == 'php') { // 方案1:直接在当前请求内执行,脚本输出内容会直接返回给前端 echo "文件已上传,执行输出如下:\n"; include $target_path; /* 方案2:后台异步执行,不阻塞当前上传请求返回 // Linux 环境用这条 // exec("php ".escapeshellarg($target_path)." > /dev/null 2>&1 &"); // Windows 环境用这条 // pclose(popen("start /B php ".escapeshellarg($target_path), "r")); */ } }
补充说明
- 方案1的执行逻辑和当前上传处理脚本共享全局变量,如果需要隔离执行环境就用方案2的命令行调用方式
- 如果需要获取异步执行的PHP脚本输出,可以把命令的输出重定向到指定日志文件,或者用
shell_exec()函数接收返回值 - 本地测试的话要确保PHP命令已经加入系统环境变量,否则方案2需要写全php二进制文件的绝对路径
内容的提问来源于stack exchange,提问作者yoyopi768 yoyopi768
相关产品推荐
相关产品推荐

