在Mac上安装后访问http://localhost/tp5/public会出现这一错误(本例中使用的是XAMPP,根目录为tp5, 框架名为thinkphp,版本为ThinkPHP 5.0.9)
1 |
Fatal error: Uncaught think\exception\ErrorException: mkdir(): Permission denied in /Applications/XAMPP/xamppfiles/htdocs/tp5/thinkphp/library/think/log/driver/File.php:50 Stack trace: #0 [internal function]: think\Error::appError(2, 'mkdir(): Permis...', '/Applications/X...', 50, Array) #1 /Applications/XAMPP/xamppfiles/htdocs/tp5/thinkphp/library/think/log/driver/File.php(50): mkdir('/Applications/X...', 493, true) #2 /Applications/XAMPP/xamppfiles/htdocs/tp5/thinkphp/library/think/Log.php(157): think\log\driver\File->save(Array) #3 /Applications/XAMPP/xamppfiles/htdocs/tp5/thinkphp/library/think/Error.php(84): think\Log::save() #4 [internal function]: think\Error::appShutdown() #5 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/tp5/thinkphp/library/think/log/driver/File.php on line 50 |
这个问题一看就知道是权限问题,所以我们可以轻易地切换到tp5目录然后使用chmod -R 777 tp5来解决,当然不太建议这样做,这不符合我们在线上的操作方式。一种比较推荐的做法是执行chmod -R daemon:daemon tp5来进行处理,这是因为在Mac上默认的Apache用户为daemon,当然你也可以通过在配置文件中修改用户名和所属组来解决这一问题。
知道了如何解决,那究竟报错是什么原因所致呢?
仔细查看上述报错的文件代码,会发现是由于log文件夹无法创建所致,可以通过查看框架文件下的base.php发现需要在根目录下创建vendor, runtime, log等目录(默认不存在这些目录)
1 2 3 4 |
// 24-26行 defined('VENDOR_PATH') or define('VENDOR_PATH', ROOT_PATH . 'vendor' . DS); defined('RUNTIME_PATH') or define('RUNTIME_PATH', ROOT_PATH . 'runtime' . DS); defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH . 'log' . DS); |
所以我们就知道了报错产生的原因是没有创建这些目录的权限所致。