在iis上配置think php上传文件时报错“is not within the allowed path“

上传文件时首先报了错“找不到临时文件夹!”,从字面意思理解就是没有设置临时文件夹的路径。

找到php安装路径下的php.ini, 找到里面的upload_tmp_dir,如果前面有;注释掉了,把;删除,填上临时文件夹路径

upload_tmp_dir = "C:/windows/temp"

IIS重启一下程序池,上传文件,这次报了

open_basedir restriction in effect. File(C:/windows/temp/xxxx/) is not within the allowed path(s): (/xxxx/xxx) 

百度搜索了一下,找到的文章都是说要在php.ini里面的open_basedir里写上路径C:/windows/temp, 但是我的php.ini里面的open_basedir是注释掉的,open_basedir的作用是限制应用只能有访问所设置的目录的权限, 如果open_basedir是被注释的,那就说明这里根本没有限制目录访问权限啊!

折腾了几个小时,一直没有找到答案。最后找到一篇文章,说open_basedir可以在多个地方设置,还可以在项目根目录的.user.ini文件里设置,我就想,我的项目是不是这种情况呢?

找到我的项目目录的public文件夹,public文件夹是think php项目的web服务的根路径,果然这里有一个.user.ini文件, 打开一看,果然里面配置了open_basedir,在里面加入C:/windows/temp/,保存,重启iis,可以正常上传了!

open_basedir="E:/PhpProjects/xxx;C:/Windows/temp/"

参考链接:

PHP防跨站之open_basedir目录设置

### 三级标题:open_basedir 限制问题的解决方法 PHP 中的 `open_basedir` 限制用于限制脚本可以访问的文件路径,以提高服务器安全性。当脚本尝试访问不在 `open_basedir` 指定路径内的文件,会抛出类似“open_basedir restriction in effect”的错误[^1]。 解决该问题的方法主要包括调整 `open_basedir` 的配置,使其包含脚本需要访问的目录。可以在 `php.ini` 文件中修改 `open_basedir` 设置,添加需要访问的路径: ```ini open_basedir = /var/www/html:/tmp ``` 如果使用虚拟主机或共享主机,可能无法直接修改 `php.ini`,则可以通过 `.htaccess` 文件添加如下配置: ```apache php_value open_basedir "/var/www/html:/tmp" ``` 在某些托管环境中,如使用 PHP-FPM,还可以通过修改 `php-fpm.d/www.conf` 文件中的 `php_admin_value[open_basedir]` 来设置: ```ini php_admin_value[open_basedir] = /var/www/html:/tmp ``` 此外,还可以通过代码层面的路径检查来避免访问受限路径。确保所有文件操作函数(如 `require`、`include`、`file_get_contents` 等)使用的路径都在 `open_basedir` 限制范围内。可以使用 `realpath()` 函数解析路径,避免相对路径或符号链接导致的路径不一致问题: ```php $allowedPath = '/var/www/html'; $requestedFile = realpath($_SERVER['DOCUMENT_ROOT'] . '../data/file.txt'); if (strpos($requestedFile, $allowedPath) === 0) { include $requestedFile; } else { echo 'Access denied'; } ``` 在修改配置后,应重启 Web 服务器或 PHP-FPM 服务以使更改生效。例如,在使用 systemd 的系统上,可以运行以下命令: ```bash systemctl restart apache2 # 或 systemctl restart php-fpm ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值