Wordpressメディアアップローダーを使用して画像をアップロードしていますが、ローカルサーバーではなくリモートサーバーにアップロードする方法があるかどうか疑問に思いました。例:私のワードプレスブログはサーバーAでホストされており、メディアアップローダーを使用してサーバーAではなくサーバーBに画像をアップロードしたいと考えています。
どちらのサーバーもnginxをウェブサーバーとしてUbuntu 10.04 LTSを実行しており、どちらもftpとsftpをサポートしています。
Wordpressメディアアップローダーを使用して画像をアップロードしていますが、ローカルサーバーではなくリモートサーバーにアップロードする方法があるかどうか疑問に思いました。例:私のワードプレスブログはサーバーAでホストされており、メディアアップローダーを使用してサーバーAではなくサーバーBに画像をアップロードしたいと考えています。
どちらのサーバーもnginxをウェブサーバーとしてUbuntu 10.04 LTSを実行しており、どちらもftpとsftpをサポートしています。
回答:
これを行うプラグインを作成しました。それは完璧ではありませんが、その仕事をします。
あなたは私のGithubでそれを見つけることができます:https://github.com/pontusab/wp-ftp-media-library
したがって、行28のファイル内のいくつかを変更する必要があります。
/**
* Change this to match your server
* You only need to change the those with (*)
* If marked with (-) its optional
*/
$settings = array(
'host' => 'ip or hostname', // * the ftp-server hostname
'user' => 'username', // * ftp-user
'pass' => 'password', // * ftp-password
'cdn' => 'cdn.example.com', // * This have to be a pointed domain or subdomain to the root of the uploads
'path' => '/', // - ftp-path, default is root (/). Change here and add the dir on the ftp-server,
'base' => $upload_dir['basedir'] // Basedir on local
);
このプラグインが行うことは、アップロード構造を/ year / monthから変更し、私たちのケースではサーバーAのローカルマシンにのみアップロードするようにします。次に、phpを使用してftp_connect経由でftpに接続します。この関数は、wp_generate_attachment_metadataの実行時に起動されます。次に、アップロードフォルダーでチェックを実行して、画像があるかどうかを確認します。画像がある場合は、それらすべてをftp_put経由でftpサーバーにアップロードします。アップロードが完了すると、ファイルは関数unlinkを使用してローカルマシンから削除されます。
次に、プラグインは、イメージのURLを「パブリック」IPまたはFTPサーバーを指すホスト名に変更します。static.mydomain.comやcdn.mydomai.comなどを使用することをお勧めします。ftpサーバー(サーバーB)をポイントする必要があります。これにより、ftpサーバーからイメージをロードできます。
他のメンバーは、これにはftpサーバーを使用する必要があると言っていますが、実際のcdn、fuseまたはAmazon S3のようなものでマウントした方が良いでしょう。
WPがファイルをアップロードする方法を理解する必要があります。POSTリクエストは、ファイルをサーバーに送信し、一時フォルダーに保存されます。その後、WPはアップロードされたファイルをテストし、コンテンツディレクトリにコピーして一時ファイルを削除します。
これは非常に複雑なプロセスです。画像の場合は、「media_upload_file」にフックして、画像かどうかを確認できます。画像の場合は、WP_Filesystemを使用してそれを外部サーバーにコピーし(メソッドftpextを使用し、オプション内でFTP資格情報を提供します)、それ以外の場合はWPにアップロードを処理させますwp_handle_upload()
。ファイルを外部サーバーにコピーする場合は、WPにデータなどを設定できるように、URLをWPに提供する必要があります(添付ファイルの投稿など)。
この仕事は、コードでいっぱいの手で行われるのではありません。あなたが開発者でないなら、もっと雇うべきです。または、これを行うプラグインを検索します。
SSHFSまたはFTPFSを使用して、アップロードディレクトリ用のリモートサーバー上のディレクトリをマウントできます。このようにして、WordPress自体を変更する必要はありません。
欠点は、アップロードされたファイルへのすべてのアクセスが、サーバーBがどこにあるかに応じて遅くなることです。