Issue with session storage
Session storage not working with my Laravel 5. Used it for a month without problems. But since latest upload to web server I get the following response on every page.
ErrorException in Filesystem.php line 74:
file_put_contents(): Exclusive locks are not supported for this stream
Many posts on the internet are indicating to remove the reference to
$lock on line 74 in Filesystem.php
Seems like a quick fix which will lead to other issues down the road...
How do I take care of the root cause?
References
https://stackoverflow.com/questions/29023948/laravel-5-file-put-contents-exclusive-locks-are-not-supported-for-this-stre
https://laracasts.com/discuss/channels/general-discussion/l5-new-install-error
after update do
chmod -R gu+w storage
chmod -R guo+w storage
php artisan cache:clear
If you use Laravel 5.2.0 you've probably ignored the storage
folder in the .gitignore
file. The thing is that when you run composer install
on your server not all the files from the storage folder are created, you should check those !
In my case my storage folder contained only the logs
folder without app
and framework
folders. You need to create those manually so you should have this structure at the end:
storage
- app
- framework
- cache
- sessions
- views
- logs
Don't forget to make the storage
folder writable !
thanks @peder-wessel. Your answer is the cause explanation but not a permanent solution and will work until we update the vendors again as Filesystem.php file is inside Laravel vendor directory. One day, when we composer update
it will cause problem again. :(
However I was able to find out that this issue is caused because Session is saved to file. I changed this from
'driver' => 'file',
to
'driver' => 'cookie',
in /app/config/session.php
Maybe laravel creators should add this to configuration too, as not all (shared) hostings provide exclusive lock rights
Had to do with the hosting. My cloud service did not support exclusive locks. I exchanged
return file_put_contents($path, $contents, $lock ? LOCK_EX : 0);
to
return file_put_contents($path, $contents, $lock ? LOCK_SH : 0);
on line 74 of Filesystem.php
I had problem with publishing my assets from my package with this error
file_put_contents(): Exclusive locks are not supported for this stream
this package helps NoLock