artisan 修补匠:mkdir() 权限被拒绝

artisan tinker: mkdir() permission denied

Laravel 版本 5.0.33

> php artisan tinker

  [ErrorException]            
  mkdir(): Permission denied  

这是在生产服务器上,我试图以网络用户身份使用 tinker 测试命令。此用户拥有基本路径中的每个目录,因此我不确定在我 运行 artisan tinker.

时尝试创建哪个目录

使用非常详细的 -vvv,我能够获得堆栈跟踪。

Exception trace:
 () at /data1/vhosts/website.com/vendor/psy/psysh/src/Psy/Configuration.php:459
 Illuminate\Foundation\Bootstrap\HandleExceptions->handleError() at n/a:n/a
 mkdir() at /data1/vhosts/website.com/vendor/psy/psysh/src/Psy/Configuration.php:459
 Psy\Configuration->getHistoryFile() at /data1/vhosts/website.com/vendor/psy/psysh/src/Psy/Configuration.php:598

getHistoryFile() 尝试在用户主目录而非应用程序目录中创建文件。此用户的主页设置为 /var/www/html 但它没有对该文件夹的执行权限。

将 .psysh.php 放入具有此内容的 Laravel 项目的根目录中

<?php
return [
        'runtimeDir'    => './.psysh',
    ];

更多信息 https://github.com/laravel/tinker/issues/34#issuecomment-357550126

出现此错误是因为您在没有 "dash" 选项的情况下切换用户(猜测使用 su)。

将 su www-data 替换为 su - www-data 一切正常!

su - 用户名

其中用户名有ssh登录权限

用户名前的破折号很重要

参考:here