php 上传文件遇到如下问题 open_basedir restriction in effect

2021/09/17 18:11:50 [error] 372185#0: *75221 FastCGI sent in stderr: "PHP message: PHP Warning:  Unknown: open_basedir restriction in effect. File(/tmp) is not within the allowed path(s): (/var/www/rms) in Unknown on line 0
PHP message: PHP Warning:  File upload error - unable to create a temporary file in Unknown on line 0

原因和解决

原因就是项目中设置 open_basedir 限制 php 权限仅在当前的项目目录内,对 php 默认上传文件的 tmp 目录没有权限写入文件,更改 php.ini 中 upload_tmp_dir 到项目目录内,然后重启 PHP 服务即可。

打印 $_FILES['files'] 对象,发现有 error = 6 查找文档发现是临时文件权限不对,没有正确存储文件

// print_r($_FILES['files'])
Array (
    [name] => Array ( [0] => twoSum.js ) 
    [type] => Array ( [0] => text/javascript ) 
    [tmp_name] => Array ( [0] =>  ) 
    [error] => Array ( [0] => 6 ) 
    [size] => Array ( [0] => 0 )
)

error 对应值的说明如下:

  • 0,没有错误发生,文件上传成功。
  • 1,上传的文件超过了 PHP.ini 中 upload_max_filesize 选项限制的值。
  • 2,上传文件的大小超过了 HTML表单中 MAX_FILE_SIZE 选项指定的值。
  • 3,文件只有部分被上传。
  • 4,没有文件被上传。
  • 6,找不到临时文件夹。PHP4.3.10 和 PHP5.0.3 引进。
  • 7,文件写入失败。PHP5.1.0 引进。

文件被上传后,默认地会被储存到服务端的默认临时目录中,除非 php.ini 中的 upload_tmp_dir 设置为其它的路径。服务端的默认临时目录可以通过更改 PHP 运行环境的环境变量 TMPDIR 来重新设置,但是在 PHP 脚本内部通过运行 putenv() 函数来设置是不起作用的。该环境变量也可以用来确认其它的操作也是在上传的文件上进行的。

参考资料

  • https://www.php.net/manual/zh/features.file-upload.post-method.php

你可能感兴趣的:(php 上传文件遇到如下问题 open_basedir restriction in effect)