web-dev-qa-db-fra.com

Télécharger des images sur un serveur distant

J'utilise WordPress Media Uploader pour télécharger des images et je me demandais s'il était possible de le télécharger sur mon serveur distant plutôt que sur mon serveur local. Exemple: mon blog wordpress est hébergé sur le serveur A et je souhaite utiliser l'outil de téléchargement de média pour télécharger des images sur le serveur B au lieu du serveur A.

Les deux serveurs exécutent Ubuntu 10.04 LTS avec nginx comme serveur Web et prennent tous les deux en charge les protocoles ftp et sftp.

11
Ruriko

Je viens de construire un plugin qui fait ça. Ce n'est pas parfait mais ça fait son travail.

Vous pouvez le trouver dans mon Github: https://github.com/pontusab/wp-ftp-media-library

Vous devez donc modifier certains éléments du fichier à la ligne 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 
    );

Ce plugin modifie la structure de téléchargement de/year/month pour ne télécharger que sur la machine locale dans notre cas Server A . Ensuite, il utilise php pour se connecter au ftp via: ftp_connect . La fonction se déclenche lorsque wp_generate_attachment_metadata est exécuté. Il lance ensuite un dans le dossier de téléchargement pour voir s’il existe des images , dans ce cas, il les téléchargera toutes sur le serveur ftp via ftp_put . Lorsque le téléchargement est terminé, les fichiers sont supprimés de la machine locale à l’aide de la fonction unlink .

Ensuite, le plug-in modifie l'URL des images sur l'adresse IP "publique" ou le nom d'hôte pointé sur le serveur FTP. Je suggère d'utiliser quelque chose comme static.mydomain.com ou cdn.mydomai.com. Ils doivent être dirigés vers le serveur ftp (serveur B), ce qui vous permet de charger les images à partir du serveur ftp.

Comme les autres membres disent que vous devez utiliser un serveur ftp pour cela, il vaut mieux utiliser un véritable cdn, Mounted by Fuse ou quelque chose comme Amazon S3.

14
Pontus Abrahamsson

On dirait presque que vous voulez juste utiliser un CDN. La plupart des CDN fonctionnent lorsque vous chargez vos images localement et qu'elles sont reflétées à l'emplacement du CDN. Ensuite, vous configurez un domaine qui pointe vers le contenu du CDN et réécrivez vos URL d’image pour utiliser ce domaine au lieu de votre URL normale.

Il existe plusieurs bons plugins et services, même si je n'ai qu'une expérience avec W3TC et Cloudfront.

0
Ed Burns

Vous devez comprendre comment WP télécharge un fichier. Une demande POST envoie le fichier au serveur où il sera stocké dans un dossier temporaire. Après cela, WP testera le fichier téléchargé, le copiera dans le répertoire de contenu et supprimera le fichier temporaire.

C'est un processus très complexe. Pour les images, vous pouvez vous connecter à 'media_upload_file', puis vérifier s'il s'agit d'une image. S'il s'agit d'une image, copiez-la avec WP_Filesystem sur le serveur externe (utilisez la méthode ftpext et indiquez vos informations d'identification ftp dans les options), sinon laissez WP gérer le téléchargement avec wp_handle_upload(). En cas de copie du fichier sur un serveur externe, vous devez fournir l’URL, etc., à WP, afin que WP puisse configurer les données (par exemple, pour les publications en pièce jointe).

Ce travail n'est pas terminé avec une main pleine de code. Si vous n'êtes pas un développeur, mieux vaut en engager un. Ou recherchez un plugin qui le fera pour vous.

0
Ralf912