ErrorException in Filesystem.php

2019-01-17 08:09发布

问题:

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

回答1:

after update do

chmod -R gu+w storage

chmod -R guo+w storage

php artisan cache:clear


回答2:

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 !



回答3:

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



回答4:

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



回答5:

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