SSHできないサーバでLaravel用のシンボリックリンクを作成する
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
ディスカッション
コメント一覧
まだ、コメントがありません
新たにPostされたDocs
: ツール関連
キーボードを銀軸から赤軸に買い替えた話
約3年半前、仕事で使うキーボードとしてARCHISS ProgresTouchの ...: スマホ
楽天モバイルがおすすめできない人の特徴とは?
楽天モバイルの最強プランをおすすめできない人の特徴を簡単にまとめてみました また ...: システム開発
なぜスクラムがつらいのか?開発現場が疲弊するのか?スクラムに対する違和感と共に原因を考えてみた
今ではどこの開発現場に行っても、やれスクラムスクラムと、まるでスクラムでもやって ...: Laravel
1つのテーブルを複数のテーブルと結合したい【Laravel10】
1つのテーブルを2つの異なるテーブルに対して結合したいケースがあったのでLara ...: Laravel
Laravelで複数画像アップロード時のvalidateを指定【Laravel10】
jQuery - Image Uploaderを使って、フォームから複数の画像を ...HashMap
created_by
はやぴ
Web/アプリ開発エンジニア
Sierにてお堅いB向けのソフトウェア開発を経て、現在はC向けのWebやアプリを中心に開発しています。
Utilities