Télécharger des images sur un serveur distant


11

J'utilise Wordpress Media Uploader pour télécharger des images et je me demandais s'il y avait un moyen de le télécharger sur mon serveur distant au lieu de mon serveur local? Exemple: Mon blog wordpress est hébergé sur le serveur A et je veux utiliser le téléchargeur de médias 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 ftp et sftp.


Quelles sont vos options pour vous connecter au serveur? FTP, API ou ssh? sur le serveur sur lequel vous souhaitez stocker votre contenu
Pontus Abrahamsson

Mes seules options pour se connecter au serveur sont FTP et SSH
Ruriko

Utilisez le plugin hacklog-remote-attachment https://wordpress.org/plugins/hacklog-remote-attachment/
saman m

Je comprends que l'OP a indiqué que l'accès à l'API n'est pas une option, mais sur la plupart des sites accessibles, la nouvelle API WordPress est toujours disponible. Puisque c'est un vieux fil, j'ai pensé le mentionner pour les autres visiteurs. Par exemple, si vous pouvez accéder au site Web, vous pouvez généralement accéder à l'API. Exemples concernant les médias: developer.wordpress.org/rest-api/reference/media
ryanm

Réponses:


14

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

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

Vous devez donc modifier certaines choses dans le fichier sur 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 
    );

Qu'est - ce que ce plugin fait est, il change la structur de téléchargement de / année / mois seulement télécharger sur la machine locale dans notre cas le serveur A . Ensuite, il utilise php pour se connecter au ftp via: ftp_connect . La fonction se déclenche lorsque wp_generate_attachment_metadata s'exécute. Il exécute ensuite une vérification dans le dossier de téléchargement pour voir s'il y a des images , le cas échéant, il les téléchargera toutes sur le serveur ftp via ftp_put . Une fois le téléchargement terminé, les fichiers seront supprimés de la machine locale à l'aide de la fonction de dissociation .

Ensuite, le plugin change l'url des images en ip "public" ou nom d'hôte pointé vers 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 depuis le serveur ftp.

Comme les autres membres disent que vous ne devriez pas utiliser un serveur ftp pour cela, c'est mieux avec un vrai cdn, monté par fusible ou quelque chose comme Amazon S3.


cela a bien fonctionné le téléchargement est correct mais a obtenu une erreur Avertissement: ftp_put () [function.ftp-put]: Impossible de créer le fichier. dans /home/xxx..../plugin_file.php sur la ligne 99
Fatih Toprak

@Pontus Abrahamsson, Merci pour cette excellente solution. Cependant, comment puis-je désactiver qu'il commence à envoyer chaque fichier multimédia du serveur à l'autre serveur? Je veux juste qu'un fichier nouvellement téléchargé soit transféré via ftp.
user3605780

0

Il semble que vous souhaitiez simplement utiliser un CDN. La plupart des CDN fonctionnent: vous chargez vos images localement et elles sont reflétées à l'emplacement CDN. Ensuite, vous configurez un domaine qui pointe vers le contenu 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 le W3TC et Cloudfront.


Oui, c'est similaire à CDN, sauf que je n'ai pas assez d'espace sur le serveur A car il n'a que 5 Go tandis que le serveur B a 1 To d'espace.
Ruriko

0

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.

Il s'agit d'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 fournissez 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 et ainsi de suite à WP, afin que WP puisse configurer les données (par exemple pour les articles joints).

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


-1

Vous pouvez utiliser SSHFS ou FTPFS pour monter un répertoire sur le serveur distant pour votre répertoire de téléchargements. De cette façon, vous n'aurez pas besoin de changer quoi que ce soit dans WordPress lui-même.

L'inconvénient est que chaque accès au fichier téléchargé sera plus lent selon l'endroit où réside le serveur B.


Je ne peux pas utiliser SSHFS ou FTPFS car mon hôte ne prend pas en charge FUSE
Ruriko

Ensuite, changez d'hôtes. Le plus gros problème avec la mise en œuvre de votre demande n'est pas le téléchargement vers l'autre partie du serveur (copiez simplement le code des plugins qui se téléchargent sur CDN), mais comment le récupérer à partir de là pour le servir. Sans accès au niveau du système de fichiers au serveur B, apache ne sera pas en mesure de servir les fichiers, vous devrez donc rendre le serveur B accessible sur le Web, mais vous pourrez simplement y déplacer votre WordPress. Vous n'avez vraiment pas donné suffisamment de détails sur votre situation. Veuillez mettre à jour la question avec tous les détails pertinents si vous souhaitez avoir une chance d'obtenir une réponse.
Mark Kaplun
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.