# 前言
之前用宝塔部署 php TP5 项目时,明明已经安装过了,但总是自动跳转到 install.php
于是关掉 open_basedir 就可以了(当时也不求甚解)
再后来生产环境部署时,又碰上这个问题,这里记录下部署时踩坑
# 参考文章
- http://www.884358.com/open_basedir/
- https://ask.fastadmin.net/question/29925.html
- https://ask.fastadmin.net/question/1962.html
- https://ask.fastadmin.net/article/322.html
# open_basedir
# 概述
通过设置 open_basedir 将 PHP 所能打开的文件限制在指定的目录树,包括文件本身。本指令不受安全模式打开或者关闭的影响。
当一个脚本试图打开一个文件时,该文件的位置将被检查。
当文件在指定的目录树之外时 PHP 将拒绝打开它。
特别是当服务器上有多个网站时,非常有必要设置 open_basedir,防止黑客跨站攻击。
# 解决办法
修改配置 open_basedir (我的默认位置 /usr/local/nginx/conf/fastcgi.conf,具体看个人情况)
测试环境或者直接禁用
#注意 $document_root 的参数是由 root html 那一行定义的,而 TP5 默认都是 root 根目录 /public | |
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/../:/tmp/:/proc/"; |
# 权限问题
如 runtime uploads 等目录会因为权限不够造成启动或上传文件失败
直接修改对应文件夹权限 或修改整个项目的权限组 如与 php nginx 相同的 www:www
chown -R 所有者:所属组 文件或目录 | |
#或者 | |
chmod -R 777 文件或目录 |
# php 上传文件常见配置修改
php.ini
#设置了在强制终止脚本前 PHP 等待脚本执行完毕的时间 如果上传视频等耗时长的大文件可以设置长的或者 set_time_limit (0); | |
max_execution_time | |
#允许通过 HTTP 进行文件上传 | |
file_uploads = On 默认值为on | |
#设定文件上传的大小的最大值 | |
upload_max_filesize = 20M | |
#限制的是客户端通过 POST 方法进行一次表单提交时 PHP 程序所能够接收的最大数据量 此值的值设置的比 upload_max_filesize 略大即可 | |
post_max_size = 21M | |
#此变量可以以秒为单位对通过 POST、GET 以及 PUT 方式接收数据时间进行限制 | |
max_input_time = 90 | |
#PHP 允许定义内存使用限额 也必须足够大 | |
memory_limit = 128M |
nginx
默认路径(看个人安装) /usr/local/nginx/conf/nginx.conf
#在 nginx 的配置文件里面加上 或者在自己的 server 内 | |
client_max_body_size 20m |