我正在使用拥有所有者的Apache Web Server _www:_www.我永远不知道文件权限的最佳做法是什么,例如当我创建新的Laravel 5项目时.
Laravel 5要求/storage文件夹可写.我找到了许多不同的方法来使它工作,我通常最终以777递归方式使用chmod.我知道这不是最好的主意.
官方文件说:
Laravel可能需要配置一些权限:Web服务器中的文件夹,
storage并vendor要求Web服务器进行写访问.
这是否意味着Web服务器本身也需要访问storage和vendor文件夹本身或仅需要访问其当前内容?
我认为更好的是改变所有者而不是权限.我递归地更改了所有Laravel的文件权限_www:_www,这使得网站正常工作,就像我将chmod更改为777.问题是,现在我的文本编辑器每次要保存任何文件时都要求我输入密码,如果我尝试在Finder中更改任何内容,就会发生同样的情况,例如复制文件.
解决这些问题的正确方法是什么?
chmodsudo使用laravel 5.5,我们可以访问configureMonologUsing()$ app中的方法,这样就可以在bootstrap/app.php中实现这样的功能:
$app->configureMonologUsing(function (Monolog\Logger $monolog) {
$processUser = posix_getpwuid(posix_geteuid());
$processName= $processUser['name'];
$filename = storage_path('logs/laravel-' . php_sapi_name() . '-' . $processName . '.log');
$handler = new Monolog\Handler\RotatingFileHandler($filename);
$monolog->pushHandler($handler);
});
Run Code Online (Sandbox Code Playgroud)
当您的应用程序可以从具有不同用户(需要)和文件轮换的不同上下文(例如CLI/HTTP)调用时,执行此操作非常有用.执行此操作可防止在HTTP用户创建日志文件之前写入错误,然后CLI会尝试在其中添加内容,反之亦然.
处理这个是非常棘手或不安全的,因为它涉及能够在可能尚不存在的文件上设置写权限.
另外,通过上下文分隔日志非常方便,因为它们通常没什么共同之处,因此可以更容易地在它们之间进行搜索.
不幸的是,使用laravel 5.6不再可能采用这种方式,而且我还没有找到一种方法来透明地执行所有基于文件的日志记录.
谢谢
我在我的Ubuntu 14.04和我的Laravel 5.1应用程序上遇到了问题.
当我的应用想要记录时,我收到此错误:
Uncaught UnexpectedValueException:无法打开流或文件storage/logs/l:无法打开流:/ var/www/releases/20160426/booking_server/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler中的权限被拒绝. php:87 \n堆栈跟踪:\n#0 ........它继续
我找到了这个解决方案:
sudo php artisan cache:clear
sudo chmod -R 777 storage
sudo composer dump-autoload
Run Code Online (Sandbox Code Playgroud)
但问题是它只是暂时的.这个问题每天都会出现,我总是要做同样的事情.
我能做些什么来阻止这种情况发生?
PD:我有一个每日日志,但如果可能的话我想保持这种方式.
我正在尝试将我的 Laravel 5.5 项目升级到 5.7。我使用主管,在我configureMonologUsing()用来生成日志之前,但显然随着 5.6 升级,它贬值了。我在 L5.5 中的完整代码是:在 bootstrap/app.php 中:
$app->configureMonologUsing( function( Monolog\Logger $monolog) {
$processUser = posix_getpwuid( posix_geteuid() );
$processName= $processUser[ 'name' ];
$filename = storage_path( 'logs/laravel-' . php_sapi_name() . '-' . $processName . '.log' );
$handler = new Monolog\Handler\RotatingFileHandler( $filename );
$monolog->pushHandler( $handler );
});
Run Code Online (Sandbox Code Playgroud)
它正在生成各种记录器,例如(这很方便):
laravel-cli-root-{date},
laravel-cli-ubuntu-{date},
laravel-cli-www-data-{date},
laravel-fpm-fcgi-www-data-{date} 等...
但是,它在升级指南中说,所以我不能再使用configureMonologUsing了:
该
configureMonologUsing方法如果您使用 configureMonologUsing 方法为您的应用程序自定义 Monolog 实例,您现在应该创建一个自定义日志通道。有关如何创建自定义通道的更多信息,请查看完整的日志记录文档。
我无法弄清楚如何使用日志记录通道实现相同的目标。如何利用 Monolog Channel 编写 laravel/storage/logs 文件夹?
尝试寻找可靠的答案,但目前还没有。我当前的设置如下:
当 storage/ 和 bootstrap/ 的所有权设置为 www-data:www-data (chown) 时,应用程序运行良好。我遇到的唯一问题是,当我尝试运行composer或artisan命令时,它会给我一个错误:
生成优化的自动加载文件 Illuminate\Foundation\ComposerScripts::postAutoloadDump @php artisan package:discover --ansi UnexpectedValueException 无法打开流或文件“/home/amplr/portal.amplr.be/storage/logs/laravel.log”在追加模式下:无法打开流:权限被拒绝
当我将所有权设置回 ubuntu 用户时,作曲家和工匠工作,但应用程序抛出权限错误。完成作曲家命令后,我必须返回 www-data:www-data 。
我究竟做错了什么?
laravel ×4
php ×4
laravel-5 ×2
apache ×1
composer-php ×1
docker ×1
laravel-5.6 ×1
laravel-5.7 ×1
logging ×1
supervisord ×1
ubuntu ×1
ubuntu-14.04 ×1