ホームページ >CMS チュートリアル >&#&プレス >WordPressファイルシステムAPIの紹介

WordPressファイルシステムAPIの紹介

Jennifer Aniston
Jennifer Anistonオリジナル
2025-02-17 08:38:10636ブラウズ

WordPressファイルシステムAPIの紹介

ローカルファイルへの書き込みは、多くのプラグインとテーマがさまざまな目的に必要な機能の1つです。セキュリティは最も重要な問題であり、プラグインとテーマはローカルファイルシステムに書き込む際に注意を払わなければなりません。 WordPressはさまざまなホスティングサービスと構成を実行しているため、開発者がセキュリティを損なうことなく、さまざまな種類の環境で動作するローカルファイルシステムにアクセスするプラグインとテーマを作成することが困難になります。 このチュートリアルでは、WordPress Files -System APIを使用して、適切なファイル許可を処理するローカルファイルシステムにアクセスする方法を学びます。その過程で、Textareaのコンテンツをファイルに保存する管理ページにTextareaを含むフォームを表示するプラグインを作成します。

キーテイクアウト

WordPressファイルシステムAPIは、プラグインとテーマがローカルファイルシステムに書き込み、ファイルアクセス許可を自動的に処理するための安全な方法を提供します。これは、WordPressが動作するさまざまなホスティングサービスと構成を考えると重要です。

APIは、システム呼び出しを介してシステムにファイルに書き込むことができ、ファイル許可と使用可能なPHP拡張機能に基づいて最も適切な方法を選択できます。また、FTPまたはSSH接続のユーザー資格情報を保存することもできます。
    チュートリアルでは、APIを使用してプラグインを作成する方法を示しています。プラグインは、管理ページにフォームを表示し、テキストアレアのコンテンツをファイルに保存します。チュートリアルでは、プラグインファイルとディレクトリを作成し、管理ページの作成、ファイルへの書き込みと読み取りのためのコードを提供します。
  • wp_filesystemクラスのインスタンスである$ wp_filesystemオブジェクトは、ファイルの読み取り、作成、書き込み、削除の方法を公開します。利用可能なその他の方法には、削除、mkdir、移動、サイズ、およびchmodが含まれます。
  • WordPressは、デフォルトではFTPまたはSSH資格情報を永続的に保存しませんが、WP-Config.phpファイルを使用して永続的に保存できます。これにより、プラグインがファイルシステムと対話するたびに資格情報を再入力する必要性が回避されます。
  • なぜWordPress Files -System APIを使用しますか?
  • PHPのファイルシステム機能を使用して、まったく新しいAPIのセットを学習して使用する代わりにローカルファイルを読み書きするだけではないのか疑問に思うかもしれません。
  • PHPファイルシステムAPIを使用する問題は、ファイル権限を自動的に処理しないことです。共有ホスティングサービスを使用してWordPressサイトをホストし、ホスティングWebサーバーが「管理者」オペレーティングシステムアカウントとして実行されているとします。 PHPを使用してファイルを作成するたびに、「管理者」ユーザーとして所有されています。したがって、同じ共有ホスティングでホストされている他のWebサイトは、「管理者」ユーザーとして実行されているため、Webサイトファイルにアクセスし、サイトにセキュリティの問題を提起します。この問題から私たちを保護するには、PHPを使用してファイルの所有者と権限を手動で変更する必要があります。

    しかし、SSHまたはFTP/SFTPを使用してログインしてファイルを作成すると、ログインしているオペレーティングシステムのユーザーアカウントが所有しています。 FTPサーバーが「管理者」ユーザーとして実行され、「narayanprusty」ユーザーとしてログインしている場合、新しく作成されたファイルには、「管理者」ではなく「narayanprusty」として所有者がいます。

    WordPressは、ファイルのアクセスを自動的に処理できるFilesystem APIを導入しました。ファイルシステムAPIは、WordPress 2.6でリリースされました。 WordPressは、実際にプラグイン、テーマ、コアアップデートシステムをサポートするためにリリースしましたが、後でプラグインとテーマを使用して独自の目的で使用し始めました。

    ファイルシステムAPIはどのように機能しますか?

    ファイルシステムAPIは、システムコール(つまり、Direct、FTP、FTPソケット、またはSSH2)を使用してファイルシステムに書き込むことができます。適切なファイル権限を持つファイルを作成し、どのPHP拡張を使用できるかに基づいて、どのメソッドに基づいてメソッドの1つを選択します。ファイルシステムAPIは、最初に直接メソッドをチェックし、次にFTP、そして最後にSSH2をチェックします。

    FTPまたはSSHを使用しているときに、ユーザーから資格情報を取得する必要があります。ファイルシステムAPIが機能を提供すると、フォームを表示して資格情報を取得して保存しやすくなります。

    プラグインファイルとディレクトリの作成

    次に、ページにTextareaを表示するプラグインを作成しましょう。フォームを送信すると、Textareaの内容がローカルファイルに保存されます。

    プラグインのディレクトリ構造は次のとおりです

    WordPressインストールのWPコンテンツ/プラグインディレクトリにこれらのファイルとディレクトリを作成します。

    プラグインをインストール可能にするには、このコードをfilesystem.phpファイルに掲載します:

    管理パネルにアクセスして、プラグインをインストールしてください

    管理ページの作成
    --filesystem
    	--filesystem.php
    	--filesystem-demo
    		--demo.txt

    次に、模範が存在する管理者にページが必要です。このページを作成してTextareaを表示するコードは次のとおりです。このコードをfilesystem.phpファイルに配置するだけです:

    コードの仕組みは次のとおりです
    <span><span><?php
    </span></span><span>  
    </span><span><span>/*
    </span></span><span><span>Plugin Name: Filesystem API
    </span></span><span><span>Plugin URI: http://www.sitepoint.com
    </span></span><span><span>Description: A sample plugin to demonstrate Filesystem API
    </span></span><span><span>Version: 1.0
    </span></span><span><span>Author: Narayan Prusty
    </span></span><span><span>*/</span></span>

    最初に「設定」メニューにページを追加しました。 DEMO_PAGEは、ページコンテンツを表示するためのコールバックです

    ページ内には、テキストアレアとノンセフィールドを備えたHTMLフォームを表示しています。フォームを送信するための送信ボタンもあります。 Textarea名はファイルデータです。 CSRF攻撃を防ぐために、nonceが追加されます。

    ページが開いている場合、read_file_demo関数を使用して保存されたファイルデータを取得します。フォームが送信されると、write_file_demo関数を使用して、textareaのコンテンツをファイルに保存します。

    read_file_demoまたはwrite_file_demoがwp_errorオブジェクトのインスタンスを返す場合、代わりにエラーメッセージを表示します。

    function menu_item()
    {
      add_submenu_page("options-general.php", "Demo", "Demo", "manage_options", "demo", "demo_page"); 
    }
     
    add_action("admin_menu", "menu_item");
    
    function demo_page()
    {
      ?>
          <span><span><span><div</span> class<span>="wrap"</span>></span>
    </span>         <span><span><span><h1</span>></span>Demo<span><span></h1</span>></span>
    </span>         <span><span><span><form</span> method<span>="post"</span>></span>
    </span>          <span><span><?php
    </span></span><span>            <span>$output = "";
    </span></span><span>
    </span><span>            <span>if(isset($_POST["file-data"]))
    </span></span><span>            <span>{
    </span></span><span>              <span>$output = write_file_demo($_POST["file-data"]);
    </span></span><span>            <span>}
    </span></span><span>            <span>else
    </span></span><span>            <span>{
    </span></span><span>              <span>$output = read_file_demo();
    </span></span><span>            <span>}
    </span></span><span>
    </span><span>            <span>if(!is_wp_error($output))
    </span></span><span>            <span>{
    </span></span><span>            	<span>?></span>
    </span>            		<span><span><span><textarea</span> name<span>="file-data"</span>></span><span><?php echo $output; ?></span><span><span></textarea</span>></span>
    </span>		          	<span><span><?php wp_nonce_field("filesystem-nonce"); ?></span>
    </span>		          	<span><span><span><br</span>></span>
    </span>		          	<span><span><span><input</span> type<span>="submit"</span>></span>
    </span>            	<span><span><?php
    </span></span><span>            <span>}
    </span></span><span>            <span>else
    </span></span><span>            <span>{
    </span></span><span>              <span>echo $output->get_error_message();
    </span></span><span>            <span>}
    </span></span><span>          <span>?></span>
    </span>         <span><span><span></form</span>></span>
    </span>      <span><span><span></div</span>></span>
    </span>   <span><span><?php
    </span></span><span><span>}</span></span>
    注、上記のコードは、read_file_demoとwrite_file_demo関数をまだ作成していないため、WordPressサイトを破壊します。今すぐ作成しましょう!

    ファイルへの書き込み
    • write_file_demo関数の実装:
    • を次に示します
    --filesystem
    	--filesystem.php
    	--filesystem-demo
    		--demo.txt

    コードの仕組みは次のとおりです

      最初に、関数内のグローバル$ wp_filesystemオブジェクトを参照しました。このオブジェクトは、wp_filesystemクラスのインスタンスです。ファイルの読み取り、作成、書き込み、削除のためのさまざまな方法の公開を担当しています。
    • 次に、フォームページのNonce URLと、フォームのフィールド名を含む配列を作成します。
    • 最後に、connect_fs関数を使用してファイルシステムに接続します。
    • connect_fsは、WordPressによって提供されるrequest_filesystem_credentials関数を使用して、ファイルシステム(Direct、FTP、またはSSH)に接続する適切な方法を見つけます。 FTPまたはSSHの場合、ユーザーから資格情報を要求するフォームをエコーし​​ます。直接的な方法の場合、それは単にtrueを返します。
    • textareaフォームが送信され、request_filesystem_credentialsがftpまたはsshメソッドを選択した場合、資格情報を表示し、資格情報形式のファイルデータフィールドを隠します。
    • request_filesystem_credentials functionの最初のパラメーターは、正しい資格情報が得られたらリダイレクトするためのURLを使用します。リダイレクトは、型inpostリクエストのものです。 request_filesystem_credentials最後のパラメーターは、リダイレクトURLに投稿するフィールド名の配列です。
    • 資格情報フォームが送信されたら、元のフォームにリダイレクトして、適切なフィールド名とユーザーが入力した値でURLを送信します。
    • 繰り返しますが、プロセス全体が始まり、write_file_demoを実行します。今回は、request_filesystem_credentialsに資格情報があります。したがって、単にtrueを返すだけです。
    • 次に、$ wp_filesystem-> find_folderを使用して、フォルダーを参照します。次に、demo.txtファイルの完全なパスを構築します。
    • $ wp_filesystem-> put_contentsを使用して、ファイルにデータを書き込みます
    • 注:資格情報を要求して検証せずに$ wp_filesystemオブジェクトのメソッドを使用しようとすると、それらは機能しません。
    • ファイルを読む
    • ここにread_file_demo関数の実装があります。
    • コードの仕組みは次のとおりです
    • demo.txtファイルを読んでいるときに、最初にrequest_filesystem_credentials関数を使用してファイルシステムに接続します。
    今回は、フォームが送信されないため、最後のパラメーターでフォームフィールドを通過しません。資格情報が取得されるとリダイレクトされるように、リダイレクトURLを渡すだけです。

    $ wp_filesystem-> exists関数を使用してファイルが存在するかどうかを確認します。ファイルは存在しませんエラーを表示します。それ以外の場合は、$ wp_filesystem-> get_contents関数を使用してファイルを読み取り、コンテンツを返します。

    WordPressがFTPをファイルを作成するのに適した方法として選択したと仮定して、プロセス全体のスクリーンショットを次に示します。

    最初にデモページを開くと、このフォームが表示されます。WordPressファイルシステムAPIの紹介

    ここでは、FTPまたはFTPS資格情報を入力して送信する必要があります。送信したら、このフォームを表示します:

    WordPressファイルシステムAPIの紹介

    空のテキストが表示されました。 「HelloWorld !!!」というテキストを入力してくださいフォームを送信します。再び資格情報フォームが表示されます。

    WordPressファイルシステムAPIの紹介 WordPressはデフォルトでFTPパスワードを保存しないため、

    再度入力する必要があります(これをWP-Config.phpで行うことができます。詳細は後で説明します)。したがって、プラグインがファイルシステムを使用する必要があるたびに、資格情報を尋ねる必要があります。次に、以前に送信されたフィールド名と値を使用して、リダイレクトURLにリダイレクトされます。 Textareaの表示方法は次のとおりです

    WordPressファイルシステムAPIの紹介ここでは、ファイルの内容を読んで表示します。

    $ wp_filesystemオブジェクトのその他のメソッド

    $ wp_filesystemオブジェクトは、ファイルやディレクトリで他のさまざまな操作を実行するための他の多くの方法を提供します。 nファイルの書き込みと読み取りを見ました。 wp_filesystem_base()ドキュメントページでできることのリスト全体を見つけることができます。

    重要なもののいくつかをチェックしてみましょう:

    $ wp_filesystem-> delete:deleteは、ファイルまたはディレクトリを削除するために使用されます。パスを表す文字列を渡す必要があります

    $ wp_filesystem-> mkdir:mkdirは、ディレクトリの作成に使用されます。親ディレクトリを表す文字列が必要です
      $ wp_filesystem-> move:移動はファイルの移動に使用されます。つまり、最初のパラメーターはファイルのパスであり、2番目はファイルのパスです。
    • $ wp_filesystem-> size:サイズは、ファイルのサイズをバイト単位で返します。ファイルのパスを通過する必要があります。
    • $ wp_filesystem-> chmod:chmodは、ファイルの権限を変更するために使用されます。 3つの引数、つまりファイルのパス、許可オクタル数、および再帰を表すブール波が必要です。
    • $ wp_filesystem-> method public propertyを使用してファイルシステムにアクセスするためにWordPressが使用する接続方法を見つけることができます。 資格情報の永続的な保存
    • WordPressはFTPまたはSSH資格情報を永続的に保存しないことがわかりました。何度も何度も詳細を求めるのはユーザーフレンドリーではありません。 WP-config.phpファイルを使用して、資格情報を永続的に保存する方法があります。
    • これらのオプションを使用してFTPとSSHの資格情報を保存します:
      • ftp_host:サーバーのホスト名。
      • ftp_user:接続中に使用するユーザー名
      • ftp_pass:接続中に使用するパスワード
      • ftp_pubkey:ssh2接続を使用している間に使用される公開鍵のパス。
      • FTP_PRIKEY:SSH2接続を使用している間に使用される秘密鍵のパス。
      • 結論
      • この記事では、WordPressファイルシステムAPIを使用してファイルシステムにアクセスする管理ページを設計するプロセスを見ました。バックグラウンドプロセスでファイルシステムにアクセスしようとしている場合(Cronジョブの使用など)、必要に応じて資格情報を表示することはできません。その場合、ユーザーに通知する必要があります。資格定数をWP-config.phpファイルに配置します。 このAPIをさらに試して、以下であなたの経験を共有することができます。 WordPress Filesystem API
      に関するよくある質問(FAQ)

      WordPressファイルシステムAPIとは何ですか?なぜ重要なのか? 。それは、サーバー上のファイルシステムと対話するための安全で信頼できる方法を提供するため、重要です。これは、ファイルとディレクトリの作成、変更、削除、メディアファイルのアップロード、WordPressのインストールの更新などのタスクにとって重要です。WordPressファイルシステムAPIはどのように機能しますか? APIは、サーバー上のファイルシステムと対話するために使用できる一連の機能を提供することで機能します。これらの機能は、基礎となるファイルシステム操作を抽象化し、サーバーのオペレーティングシステムまたはファイルシステムに関係なく、一貫したインターフェイスを提供します。つまり、同じ機能を使用して、WindowsサーバーのようにLinuxサーバー上のファイルシステムと対話できます。 > 独自のプラグインまたはテーマでWordPress Filesystem APIを使用するには、最初にAPIの機能を含むファイル「WP-Admin/include/file.php」を含める必要があります。その後、APIの関数を使用してファイルシステムと対話できます。たとえば、「wp_filesystem()」関数を使用してファイルシステムを初期化し、 'get_contents()'、 'put_contents()'、または 'delete()などの他の関数を使用できます。ファイルを削除します。

      従来のPHPファイルシステム関数を介してWordPress Files -System APIを使用することの利点は何ですか?サーバーのオペレーティングシステムまたはファイルシステムの。これは、異なるファイルシステム間の違いを心配することなく、任意のサーバーで動作するコードを記述できることを意味します。さらに、APIは、すべてのファイル操作が正しい権限で実行されるようにすることにより、より高いレベルのセキュリティを提供します。 WordPress Files -SystemAPIを使用してファイルをアップロードします。 APIは、ファイルの種類をチェックし、ファイルが大きすぎないようにし、ファイルを正しいディレクトリに移動するなど、アップロードプロセス全体を処理する「wp_handle_upload()」と呼ばれる関数を提供します。これにより、ファイルのアップロードを安全で信頼できる方法で簡単に処理できます。

      WordPressファイルシステムAPIを使用する場合、エラーを処理するにはどうすればよいですか? ) '関数がエラーを返したかどうかを確認するために使用できること。エラーが発生した場合、「get_error_message()」関数を使用して、人間が読み取れるエラーメッセージを取得できます。これにより、エラーを簡単に処理し、ユーザーに便利なフィードバックを提供できます。 .htaccessファイルを変更します。 APIは、特定のマーカー間で.htaccessファイルに行に行を挿入できる「insert_with_markers()」と呼ばれる関数を提供します。これにより、.htaccessファイルに安全で信頼できる方法でカスタムルールを簡単に追加できます。これにより、すべてのファイル操作が正しい権限で実行されることを保証し、ファイル名とパスを消毒する機能を提供します。これにより、ディレクトリトラバーサル攻撃などの一般的なセキュリティの問題を防ぐのに役立ちます。

      WordPressファイルシステムAPIを使用してディレクトリを作成できますか? APIは、ディレクトリと必要なすべての親ディレクトリを作成する「wp_mkdir_p()」と呼ばれる関数を提供します。これにより、信頼できる方法で複雑なディレクトリ構造を簡単に作成できます。ファイルとディレクトリ。 APIは、ファイルとディレクトリの両方を削除できる「delete()」と呼ばれる関数を提供します。これにより、自分の後に簡単にクリーンアップし、プラグインやテーマがサーバー上に不要なファイルを残さないようにします。

以上がWordPressファイルシステムAPIの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。