[英]how to force laravel not read the storage files from symlink
我將 laravel 托管在不支持符號鏈接的 Cpanel 上,因此當我運行storage:link
時出現此錯誤:
symlink() has been disabled for security reasons
當我聯系我的提供商時,他們告訴我他們無法打開它,但我必須在我的文件系統中進行更改才能從存儲本身讀取。 現在我的問題是如何將config/filesystem.php
更改為不從符號鏈接讀取,而是從存儲文件夾本身讀取。 提前致謝
你有幾個選擇。
如果您有權訪問命令行,則可以嘗試自己手動創建符號鏈接。 他們可能禁用了 PHP symlink()
命令,但您仍然可以使用 OS ln
命令。 從命令行:
ln -s /path-to-project/storage/app/public /path-to-project/public/storage
如果您無權訪問命令行,您可以嘗試使用程序執行方法之一( exec()
、 shell_exec()
等)從 PHP 運行命令。 但是,如果他們禁用了symlink()
,他們可能也禁用了所有這些。 要嘗試此操作,請創建一個臨時路線,點擊一次,然后將其刪除:
Route::get('temp-create-link', function () {
exec("ln -s ".escapeshellarg(storage_path('app/public')).' '.escapeshellarg(public_path('storage')));
});
如果您無法運行ln
命令,或者它已在操作系統級別被禁用,那么您需要手動創建您的public/storage
文件夾並更新您的文件系統配置以指向它。 創建public/storage
文件夾后,打開config/filesystems.php
文件並更新公共磁盤的root
密鑰以指向它:
'disks' => [
// ...
'public' => [
'driver' => 'local',
// old value: 'root' => storage_path('app/public'),
'root' => public_path('storage'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
// ...
],
當我使用共享主機時,我也遇到了這個問題。 實際上 storage:link 實現並不難,但您沒有使用該命令的權限。
在公用文件夾中創建一個文件夾。 就我而言,我已經創建了上傳,您可以創建任何文件夾和子文件夾。
在 Controller 中,使用 public_path() 上傳文件。 例如,我正在上傳圖片。
// In html form, file name is cover_image if($request->file('cover_image')){ $image = $request->file('cover_image'); $extension=$image->getClientOriginalExtension(); $file_name = 'File-'.date('Ymdhi-s').'.'.$extension; $destination_path = public_path('/uploads/'); $result=$image->move($destination_path,$file_name); if($result){ $data['cover_image']=$file_name; } }
使用asset() 訪問文件。 例如,我使用 img 標簽。
<img src="{{ asset('uploads/'.$item->cover_image) }}">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.