本文目录导读:

- 如果你用的是主流框架(Laravel、ThinkPHP、Symfony等)
- 如果你是原生PHP项目(无框架)
- 按脚本类型细分建议
- 必须避免的反例(危险操作)
- 如果是命令行工具(Composer包或独立CLI脚本)
- 总结建议
在PHP项目里,脚本的存放位置没有绝对的标准,主要取决于你的项目类型(是框架项目还是原生PHP)、部署方式以及脚本的用途(是Web入口、定时任务还是命令行工具)。
下面分场景给出最合理的建议:
如果你用的是主流框架(Laravel、ThinkPHP、Symfony等)
框架有严格的路由和目录结构,请遵守框架约定:
- Web入口脚本(控制器/路由):放在框架规定的控制器目录。
- Laravel:
app/Http/Controllers/ - ThinkPHP:
app/controller/ - Symfony:
src/Controller/
- Laravel:
- 命令行脚本(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/ 目录,方便全局调用。
总结建议
- 所有对外暴露的脚本 → 只保留
index.php在公共目录,其他都放到app/或src/下。 - 命令行脚本 → 统一放入
scripts/或bin/,并加上#!/usr/bin/env php头。 - 安全底线 → 确保除了
public目录,其他目录的权限设置为755或644,且Apache/Nginx禁止访问.php文件。
如果你能告诉我具体的项目结构(比如是WordPress、ThinkPHP还是自己写的),我可以给你更精确的目录建议。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播