# 前言

之前用宝塔部署 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
更新于 阅读次数