PHP项目里脚本放哪

wen PHP项目 1

本文目录导读:

PHP项目里脚本放哪

  1. 如果你用的是主流框架(Laravel、ThinkPHP、Symfony等)
  2. 如果你是原生PHP项目(无框架)
  3. 按脚本类型细分建议
  4. 必须避免的反例(危险操作)
  5. 如果是命令行工具(Composer包或独立CLI脚本)
  6. 总结建议

在PHP项目里,脚本的存放位置没有绝对的标准,主要取决于你的项目类型(是框架项目还是原生PHP)、部署方式以及脚本的用途(是Web入口、定时任务还是命令行工具)。

下面分场景给出最合理的建议:

如果你用的是主流框架(Laravel、ThinkPHP、Symfony等)

框架有严格的路由和目录结构,请遵守框架约定:

  • Web入口脚本(控制器/路由):放在框架规定的控制器目录。
    • Laravel:app/Http/Controllers/
    • ThinkPHP:app/controller/
    • Symfony:src/Controller/
  • 命令行脚本(CLI/定时任务)不要放进Web根目录,建议放在框架的 app/Console/app/Command/ 目录。
    • 这类脚本通过 php artisan schedule:run 或框架的CLI命令执行(如 php think),而不是通过浏览器访问。

如果你是原生PHP项目(无框架)

推荐采用分离架构,将公开访问的入口和内部业务逻辑分开:

你的项目根目录/
├── public/              # Web服务器根目录 (Apache/Nginx指向这里)
│   ├── index.php       # 唯一对外入口(前端控制器)
│   ├── css/js/images/
│   └── .htaccess
├── app/                 # 核心业务逻辑(禁止浏览器直接访问)
│   ├── controllers/    # 控制器(处理请求)
│   ├── models/         # 数据模型
│   ├── views/          # 视图模板
│   └── helpers/        # 自定义函数
├── scripts/             # 命令行脚本(CLI)
│   ├── cron_jobs.php   # 定时任务
│   ├── send_emails.php
│   └── clean_cache.php
├── config/              # 数据库配置等
└── vendor/              # Composer依赖

按脚本类型细分建议

脚本类型 推荐存放位置 注意事项
定时任务/队列 项目根目录/scripts/项目根目录/app/Console/ 设置为 chmod +x,并在crontab中指定全路径
Web页面/接口 public/ 或框架的 Controller 必须有严格的输入过滤和权限验证
数据库迁移脚本 database/migrations/ (Laravel) 或 db/ 建议使用版本控制工具管理
一次性修复脚本 项目根目录/tmp_scripts/ 或直接放临时目录 执行完后务必删除,防止被恶意访问
包含敏感配置的脚本 config/app/ 目录 禁止放在 public 下,否则可能泄露数据库密码

必须避免的反例(危险操作)

⚠️ 千万不要把任何脚本直接放到Web根目录(如 htdocs 根下),除非它是唯一入口 index.php

  • 错误做法:将 db_connection.php 直接放在 public 文件夹中。
    • 后果:用户可以直接访问 http://yourdomain.com/db_connection.php 看到源代码。
  • 错误做法:把包含业务逻辑的 admin.php 放在根目录。
    • 后果:一旦漏掉权限验证,攻击者可远程执行代码。

如果是命令行工具(Composer包或独立CLI脚本)

建议单独建立 bin/ 目录:

你的项目/
├── bin/
│   ├── my-script.php    # 主脚本,首行写 #!/usr/bin/env php
│   └── (其他辅助脚本)
├── composer.json        # 配置 "bin": ["bin/my-script.php"]

composer.json 中关联后,执行 composer install 时会自动把 bin 下的脚本软链接到 vendor/bin/ 目录,方便全局调用。


总结建议

  1. 所有对外暴露的脚本 → 只保留 index.php 在公共目录,其他都放到 app/src/ 下。
  2. 命令行脚本 → 统一放入 scripts/bin/,并加上 #!/usr/bin/env php 头。
  3. 安全底线 → 确保除了 public 目录,其他目录的权限设置为 755644,且Apache/Nginx禁止访问 .php 文件。

如果你能告诉我具体的项目结构(比如是WordPress、ThinkPHP还是自己写的),我可以给你更精确的目录建议。

抱歉,评论功能暂时关闭!