web-dev-qa-db-ja.com

リモートサーバーに画像をアップロードする

私は画像をアップロードするのにWordpressメディアアップローダを使っています、そしてそれを私のローカルサーバーの代わりに私のリモートサーバーにアップロードする方法があるかどうか疑問に思いましたか?例:私のwordpressブログはサーバーAでホストされており、メディアアップローダーを使用してサーバーAではなくサーバーBに画像をアップロードしたいと思います。

どちらのサーバもWebサーバとしてnginxを使用してUbuntu 10.04 LTSを実行し、両方ともftpとsftpをサポートしています。

11
Ruriko

これを行うプラグインを作成しました。それは完璧ではありませんが、その仕事をします。

あなたは私の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からローカルマシンのみにアップロードするように変更しますServer A。次に、phpを使用して、 ftp_connect 経由でftpに接続します。この関数は、wp_generate_attachment_metadataが実行されると起動します。次に、 アップロードフォルダーをチェックして画像があるかどうかを確認します を実行します。その場合は、 ftp_put を介してすべてをftpサーバーにアップロードします。アップロードが完了すると、関数 nlink を使用してローカルマシンからファイルが削除されます。

次に、プラグインは、イメージのURLを「パブリック」IPまたはFTPサーバーを指すホスト名に変更します。 static.mydomain.comやcdn.mydomai.comなどを使用することをお勧めします。 ftpサーバー(サーバーB)を指す必要があります。これにより、ftpサーバーからイメージをロードできます。

他のメンバーは、このためにftpサーバーを使用するべきだと言っていますが、実際のcdn、FuseまたはAmazon S3のようなものを使用する方が良いでしょう。

14

CDNを使いたいだけのようです。ほとんどのCDNが機能する方法は、イメージをローカルにロードしてCDNの場所にミラーリングすることです。次に、CDNコンテンツを指すドメインを設定し、通常のURLではなくそのドメインを使用するように画像のURLを書き換えます。

私はW3TCとCloudfrontでの経験しかありませんが、いくつかの良いプラグインとサービスがあります。

0
Ed Burns

WPがファイルをどのようにアップロードするかを理解する必要があります。 POST要求はファイルをサーバーに送信し、そこでファイルは一時フォルダーに保管されます。その後、WPはアップロードされたファイルをテストし、それをコンテンツディレクトリにコピーして一時ファイルを削除します。

これは非常に複雑なプロセスです。画像の場合は、「media_upload_file」にフックして、それが画像かどうかを確認できます。それがイメージの場合は、WP_Filesystemを使用して外部サーバーにコピーし(オプションftpextを使用し、オプション内でftp認証情報を指定します)、それ以外の場合はWPをwp_handle_upload()で処理します。ファイルを外部サーバーにコピーする場合は、URLなどをWPに提供する必要があるため、WPでデータを設定できます(添付ファイルの投稿など)。

この仕事はコード一杯では終わらない。あなたが開発者ではない場合は、より良いものを雇ってください。またはあなたのためにこれを行いますプラグインを検索してください。

0
Ralf912