SSHできないサーバでLaravel用のシンボリックリンクを作成する

Laravel,PHP

Laravel8で画像のアップロード機能を作っています

Laravelでは、ユーザがアップロードした画像はStorageフォルダに格納されますが、Storage/app/publicディレクトリにある画像にユーザがアクセスするにはpublicディレクトリにシンボリックを貼る必要があります

シンボリックリンクを貼りたい場所

こういう感じでシンボリックリンクを作りたい!
| - app
| - config
| - database
| - public
  | - storage ← ここにシンボリックリンクを貼って、image.jpgが見れるようにしたい
| - resources
| - routes
| - storage
  | - app
    | - public
      | - image.jpg ← ユーザがアップロードした画像
| - vendor

上のシンボリックリンクを貼ることで、ユーザは、

http://hoge/storage/image.jpg

というURLで、アップロードした画像を見ることができるようになります

まあ、普通はHTMLのIMGタグなんかで表示しますけどね

<div>
  <img src='http://hoge/storage/image.jpg'>
</div>

シンボリックリンクをはる

Laravelでシンボリックリンクを貼るコマンド

> php artisan storage:link

The [/Applications/hoge/public/storage] link has been connected to [/Applications/hoge/storage/app/public].
The links have been created.

Laravelでは、このシンボリックリンクを貼るためのコマンドがあります

が、僕が利用してるスターサーバーみたいなレンタルサーバーの場合、SSHが利用できないのでサーバ側でシンボリックリンクを貼ることができません

そこで、PHPのsymlinkコマンドを使います

PHPでシンボリックリンクを貼る

symlink('シンボリックリンクのリンク元', 'シンボリックリンクを貼るパス');

こんな感じで、PHPメソッドを実行することでSSHからコマンドを叩くことなくシンボリックリンクを作成することができます。

symlink(storage_path() . '/app/public', public_path() . '/storage');

僕は適当なコントローラーを使って、こんな感じでsymlinkを実行しました。

もちろんコントローラーのある場所とリンクを貼りたいディレクトリは異なるので、相対パスで指定してます

第一引数の「storage_path() . '/app/public’」、

第二引数の「public_path() . '/storage’」、はそれぞれ以下に当たります

| - app
| - config
| - database
| - public
  | - storage ← 第二引数の「public_path() . '/storage'」はここに該当
| - resources
| - routes
| - storage
  | - app
    | - public
      | - image.jpg ← 第一引数の「storage_path() . '/app/public'」はここに該当
| - vendor

エンジニアの年収を上げる方法

フリーランスエンジニアで年収を大幅アップしませんか?
実際に僕は会社員からフリーランスエンジニアになって年収が87万円アップしました

今なら相談(ヒアリング)するだけで3,000円分のamazonギフト券がもらえます!
初めての案件契約で最大10万円分の準備金がもらえます
非公開の高単価案件(100万円超え)が多数あります

詳しくはこちら