mac环境下,mamp中表单上传文件,为什么上传的缓存文件是不可读的。

系统:mac
php环境:MAMP
php框架:laravel

当我使用表单上传时,发现上传上来的缓存文件是不可读的。

echo substr(sprintf("%o", fileperms($this->photo->path())), -4); // 结果为0600

而我系统缓存目录的权限是777,现在我就无法使用laravelUploadedFile 实例来处理上传文件,因为一旦使用
$request->photo->store('photos')就会弹出权限不够错误。错误如下:

[2018-01-09 17:22:57] local.ERROR: Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException: The file /Applications/MAMP/tmp/php/phpUulx0L could not be accessed in /Users/pan/code/wechat/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php:125
Stack trace:
#0 /Users/pan/code/wechat/vendor/symfony/http-foundation/File/File.php(79): Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesser->guess('/Applications/M...')
#1 /Users/pan/code/wechat/vendor/symfony/http-foundation/File/File.php(58): Symfony\Component\HttpFoundation\File\File->getMimeType()

求救!

阅读 3.1k
2 个回答

终于找到问题了。
首先,我是在做微信开发,所以我的测试环境有两个域名,一个是本地的域名wx.dev,一个是wx.piian.cn,
然后我发现wx.dev是可以上传文件的,wx.piian.cn是不能上传文件的。然后我查看nginx的配置,发现我的程序目录的server_name只有wx.devwx.piian.cn是指向我的电脑,我的localhost是指向wx.dev程序目录的,于是我在server_name里加上了wx.piian.cn,现在上传文件没有问题了,有大神能仔细讲讲中间的细节吗?
我现在是知其然不知其所以然

服务器(nginx)通过http请求request headershost(wx.piian.cn)行,匹配你配置的server_name,当匹配成功时,就会把数据按cgi接口定义的格式,发送给php处理。
至于域名(wx.piian.cn)如何找到对应的服务器,是因为会把域名的A记录或者CNAME解析到对应的公网IP上。而域名的DNS解析会优先在系统hosts记录里面寻找。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题