検索
ホームページバックエンド開発PHPチュートリアルlaravelの基本チュートリアル -- ファイルシステム

ファイル システム/クラウド ストレージ

はじめに

laravel は、Frank de Jonge によって開発された Flyststem PHP パッケージのおかげで、強力なファイル システムの抽象化を提供します。 Laravel のファイル システムは、ローカル ファイル システム、Amazon S3、Rackspace クラウド ストレージなど、一部のストレージ ドライバーのサポートを提供します。さらに驚くべきことは、laravel が統合された API インターフェイスを提供しているため、ストレージ構成オプションを通じてこれらのストレージ システムを切り替えることができることです。

構成

ファイル システムの構成オプションは、config/filesystems.php ファイルに保存されます。このファイルでは、すべてのディスクを構成できます。各ディスク オプションには、使用するストレージ ドライバーとそのストレージの場所が含まれています。 laravel でデフォルトでサポートされているストレージドライバーについては、このファイルに対応する構成例があります。したがって、このファイルの構成オプションを変更するだけで、その強力な機能を使用できます。

もちろん、複数のディスクを構成したり、複数のディスクに同じドライバーを使用したりすることもできます。

パブリック ディスク

パブリック ディスクとは、一般の人がアクセスできることを意味します。デフォルトのパブリック ディスクはローカル ドライバーを使用し、そのファイルを storage/app/public ディレクトリに保存します。このディレクトリ内のファイルに Web からアクセスできるようにするには、public/storage から storage/app/public へのシンボリック リンクを作成する必要があります。この規則により、パブリックにアクセス可能なファイルが同じディレクトリ内に保持され、Envoyer のような手間のかからない継続的デプロイメント システムを使用する場合に、デプロイメント プロセス全体を簡単に共有できるようになります。

もちろん、ファイルが保存され、シンボリックリンクが確立されたら。アセット ヘルパー メソッドを使用して、ファイルの URL を生成できます。

echo asset('storage/file.txt')

ローカル ドライバー

ローカル ドライバーを使用する場合、知っておく必要があるのは、すべてのファイル操作が構成内の root オプションを基準にして定義されていることです。ファイルの目次。デフォルトでは、この値は storage/app ディレクトリに設定されます。したがって、次の方法ではファイルを storage/app/file.txt に保存します:

Storage::disk('local')->put('file.txt', 'Contents');

その他のドライバーの前提条件

S3 または Rackspace ドライバーを使用する前に、Composer を通じて適切なパッケージ ファイルをインストールする必要があります:

  • Amazon S3 : リーグ/フライシステム-aws-s3-v3 ~1.0
  • ラックスペース: リーグ/フライシステム-ラックスペース ~1.0

FTPドライバー設定

laravelのファイルシステムはFTP統合を非常によくサポートできますが、例は示されていませんデフォルトの設定ファイル。 FTP ファイル システムを構成する必要がある場合は、次の構成例を使用できます:

'ftp' => [  'dirver' => 'ftp',  'host' => 'ftp.example.com',  'username' => 'your-username',  'password' => 'your-password',  // Optional FTP Settings...  // 'port' => 21,  // 'root' => '',  // 'passive' => true,  // 'ssl' => true,  // 'timeout' => 30,],

Rackspace ドライバー構成

laravel のファイル システムは Rackspace 統合を非常によくサポートできますが、デフォルトの構成ファイルには指定されていません。 。 Rackspace ファイル システムを構成する必要がある場合は、次の例を使用できます:

'rackspace' => [  'driver' => 'rackspace',  'username' => 'your-username',  'key' => 'your-key',  'container' => 'your-container',  'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/',  'region' => 'IAD',  'url_type' => 'publicURL',],

基本的な使用法

ディスク インスタンスを取得する

ストレージ マスクは、構成するディスクと対話するために使用できます。たとえば、その put メソッドを使用して、ユーザーのアバター画像をデフォルトのディスクに保存できます。このメソッドを呼び出す前にディスク メソッドを使用しない場合、このメソッドはアバターをデフォルトのディスクに自動的に渡します:

<?phpnamespace App\Http\Controllers;use Storage;use Illuminate\Http\Request;use App\Http\Controllers\Controller;class UserController extends Controller{  /**   * Update teh avatar for the given user.   *   * @param Request $request   * @param int $id   * @return Response   */   public function updateAvatar(Request $request, $id)   {     $user = User::findOrFail($id);     Storage::put(        'avatars/'.$user->id,        file_get_contents($request->file('avatar')->getRealPath())      );   }}

複数のディスクを使用する場合、ストレージ マスク ディスク メソッドを使用して、アクセスするディスクを指定できます。もちろん、連鎖メソッドを使用して継続的な操作を実行することもできます。

$disk = Storage::disk('s3');$contents = Storage::disk('local')->get('file.jpg');

ファイルの取得

get メソッドを使用して、指定されたファイルの内容を取得できます。このメソッドは、ファイルの元の文字列コンテンツを返します:

$contents = Storage::get('file.jpg');

exists メソッドは、指定されたファイルがディスク上に存在するかどうかを判断するために使用できます:

$exists = Storage::disk('s3')->exists('file.jpg');

ファイル URL

ローカルまたは s3 ドライバーを使用する場合は、url メソッドを使用できます指定されたファイルの URL を取得します。ローカル ドライバーを使用している場合は、指定されたパスの先頭に /storage プレフィックスを追加するだけで、相対ファイル パスが返されます。 s3 ドライバーを使用している場合は、完全なリモート RUL が返されます:

$url = Storage::url('file1.jpg');

注: ローカル ドライバーを使用する場合は、public/storage から storage/app/public へのシンボリック リンクを必ず作成してください。

ファイルのメタ情報

size メソッドは、指定されたファイルのバイト サイズを取得するために使用できます:

$size = Storage::size('file1.jpg');

lastModified メソッドは、UNIX タイムスタンプを使用する、指定されたファイルの最終変更時刻を返します:

$time = Storage::lastModified('file1.jpg');

ファイルの保存

put メソッドを使用して、ファイルをディスクに保存できます。 PHP リソースを put メソッドに渡すと、ファイル システムの基礎となるストリーム サポートが使用されます。大きなファイルを操作する場合は、ファイル ストリームを使用することをお勧めします:

Storage::put('file.jpg', $contents);Storage::put('file.jpg', $resource);

copy メソッドを使用して、ディスク上にすでに存在するファイルを新しい場所にコピーできます:

Storage::copy('old/file1.jpg', 'new/file1.jpg');

move メソッドを使用して、ディスク上の既存のファイルに名前を付けることができます。ディスク 新しい場所に変更または移動します:

Storage:move('old,file1.jpg', 'new/file1.jpg');

ファイルの先頭または末尾にコンテンツを追加します

prepend 和 append 方法允许你轻松的往文件的起始或结束位置加入内容:

Storage::prepend('file.log', 'Prepended Text');Storage::append('file.log', 'Appended Text');

文件可见性

你可以通过使用 getVisibility 和 setVisibility 方法来进行文件可见性的检索和设置。可见性是跨平台的文件权限的抽象:

Storage::getVisibility('file.jpg');Storage::setVisibility('file.jpg', 'public');

另外,你可以在使用 put 方法的同时设置文件的可见性。有效的可见性值是 public 和 private:

Storage::put('file.jpg', $contents, 'public');

删除文件

delete 方法可以接受一个文件名或者文件名所组成的数组,它将从磁盘中删除相应的文件:

Storage::delete('file.jpg');Storage::delete(['file1.jpg', 'file2.jpg']);

目录

从目录中获取所有文件

files 方法会返回所给定目录中所有的文件所组成的数组。如果你想要在检索到的文件中包含所给定目录的子目录。那么你需要使用 allFiles 方法:

$file = Storage::files($directory);$files = Storage::allFiles($directory);

从给定的目录中获取所有的目录

directories 方法可以返回所给定目录下的所有子目录所组成的数组。另外你可以使用 allDirectories 方法递归检索子目录:

$directories = Storage::directories($directory);// Recursive...$directories = Storage::allDirectories($directory);

创建目录

makeDirectory 方法将创建给定的目录,包括其所需要的子目录:

Storage::makeDirectory($directory);

删除一个目录

最后,deleteDirectory 方法可以用来删除一个目录,并且其删除磁盘中该目录下所有的文件:

Storage::deleteDirectory($directory);

自定义文件系统

laravel 的文件系统对几种常见的存储系统提供了开箱即用的支持。事实上,文件系统并没有限制你只使用所提供的这些。你可以自己创建一个适配器来构建一个自定义的驱动去支持你所期望使用的文件存储系统。

你需要创建一个服务提供者来进行自定义文件存储系统的构建。比如 DropboxServiceProvider。在提供者的 boot 方法中,你需要使用 Storage 假面的 extend 方法来定义你自己的驱动:

<?phpnamespace App\Providers;use Storage;use League\Flysystem\Filesystem;use Dropbox\Client as DropboxClient;use Illuminate\Support\ServiceProvider;use League\Flysystem\Dropbox\DropboxAdapter;class DropboxServiceProvider extends ServiceProvider{  /**   * Perform post-registration booting of services.   *   * @return void   */   public function boot()   {     Storage::extend('dropbox', function ($app, $config) {       $client = new DropboxClient(        $config['accessToken'], $config['clientIdentifier']       );             return new Filesystem(new DropboxAdapter($client));     });   }   /**    * Register bindings in the container.    *    * @return void    */    public function register()    {      //    }}

extend 方法中的第一个参数应该是驱动的名称,第二个参数是一个闭包,闭包接受 $app 和 $config 变量。被解析的闭包必须返回一个 League\Flysystem\Filesystem 的实例。$config 变量包含了 config/filesystems.php 文件中指定磁盘的值。

一旦你创建了服务提供者并且注册了这个扩展,你就可以在 config/filesystem.php 配置文件中使用 dropbox 驱动了。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

同時性については、PHP 8.1の繊維を説明します。同時性については、PHP 8.1の繊維を説明します。Apr 12, 2025 am 12:05 AM

繊維はPhp8.1で導入され、同時処理機能が改善されました。 1)繊維は、コルーチンと同様の軽量の並行性モデルです。 2)開発者がタスクの実行フローを手動で制御できるようにし、I/O集約型タスクの処理に適しています。 3)繊維を使用すると、より効率的で応答性の高いコードを書き込むことができます。

PHPコミュニティ:リソース、サポート、開発PHPコミュニティ:リソース、サポート、開発Apr 12, 2025 am 12:04 AM

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。

PHP対Python:違いを理解しますPHP対Python:違いを理解しますApr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの未来:適応と革新PHPの未来:適応と革新Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。