Hostinger上Laravel存储软链接缺失及symlink失效的自动方案求助
解决Hostinger主机上JustFans脚本无法显示媒体文件的Symlink替代方案
问题背景
- 上传的图片已存在于
public/uploads目录,但网站无法正常显示 - 后台报错:
Missing storage symlink
We could not find a storage symlink. This could cause problems with loading media files from the browser.
- 执行
php artisan storage:link时触发错误:
Call to undefined function Illuminate\Filesystem\symlink()
- 手动执行以下命令可临时解决,但需重复操作:
mkdir -p public/storage cp -r storage/app/public/* public/storage/
- 配置的Cron定时任务未正常运行:
* * * * * cp -r /home/your-username/storage/app/public/* /home/your-username/public_html/storage/
可行替代方案
1. 修复Cron定时任务(优先尝试)
Cron未运行通常是路径或权限问题,调整如下:
- 使用绝对路径执行
cp命令,避免系统找不到命令:*/5 * * * * /bin/cp -r /home/your-username/storage/app/public/* /home/your-username/public_html/storage/ - 替换
your-username为实际主机用户名,可在Hostinger面板的「文件管理器」中查看根目录路径 - 降低执行频率(如每5分钟一次
*/5 * * * *),减少服务器负载同时便于排查 - 查看Cron日志:在Hostinger面板的Cron Job模块查看执行记录,或通过命令
grep CRON /var/log/syslog(若有权限)定位错误(如权限不足、路径错误)
2. 修改Laravel存储配置(彻底解决同步问题)
直接让上传文件保存到public目录,无需同步操作:
- 打开项目根目录的
config/filesystems.php - 修改
disks中的public配置项:'public' => [ 'driver' => 'local', 'root' => public_path('storage'), // 直接指向public/storage目录 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], - 手动复制已有的
storage/app/public下的文件到public/storage,确保历史文件可访问
3. 添加Laravel事件监听(实时同步)
通过Laravel事件监听实现文件上传后自动同步:
- 在
app/Providers/EventServiceProvider.php中注册事件:protected $listen = [ 'Illuminate\Filesystem\Events\FileCreated' => [ 'App\Listeners\SyncStorageToPublic', ], ]; - 创建监听类
app/Listeners/SyncStorageToPublic.php:namespace App\Listeners; use Illuminate\Filesystem\Events\FileCreated; use Illuminate\Support\Facades\File; class SyncStorageToPublic { public function handle(FileCreated $event) { $sourcePath = $event->path; // 仅同步storage/app/public下的文件 if (str_starts_with($sourcePath, storage_path('app/public'))) { $relativePath = str_replace(storage_path('app/public'), '', $sourcePath); $destinationPath = public_path('storage'.$relativePath); File::copy($sourcePath, $destinationPath); } } } - 执行
php artisan event:generate生成监听类文件,确保事件生效
内容的提问来源于stack exchange,提问作者MIZO GAMER
相关产品推荐
相关产品推荐

