簡體   English   中英

如何強制 laravel 不從符號鏈接讀取存儲文件

[英]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 實現並不難,但您沒有使用該命令的權限。

  1. 在公用文件夾中創建一個文件夾。 就我而言,我已經創建了上傳,您可以創建任何文件夾和子文件夾。

  2. 在 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; } }
  3. 使用asset() 訪問文件。 例如,我使用 img 標簽。

     <img src="{{ asset('uploads/'.$item->cover_image) }}">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM