Carregar imagens no servidor remoto


11

Estou usando o carregador de mídia do Wordpress para fazer upload de imagens e fiquei imaginando se existe uma maneira de fazer o upload para o meu servidor remoto em vez do meu servidor local? Exemplo: Meu blog wordpress está hospedado no Servidor A e quero usar o carregador de mídia para carregar imagens no Servidor B em vez do Servidor A.

Ambos os servidores rodam o Ubuntu 10.04 LTS com o nginx como servidor da Web e ambos suportam ftp e sftp.


Quais são as suas opções de como se conectar ao servidor? FTP, API ou ssh? no servidor onde você deseja armazenar seu conteúdo
— Pontus Abrahamsson

Minhas únicas opções para se conectar ao servidor é FTP e SSH
— Ruriko

Use o plugin hacklog-remote-attachment https://wordpress.org/plugins/hacklog-remote-attachment/
— saman m

Entendo que o OP indicou que o acesso à API não é uma opção, no entanto, na maioria dos sites acessíveis, a nova API do WordPress está sempre disponível. Como esse é um tópico antigo, pensei em mencionar isso para outros visitantes. Por exemplo, se você pode acessar o site, normalmente pode acessar a API. Exemplos sobre mídia: developer.wordpress.org/rest-api/reference/media
— ryanm

Respostas:


14

Acabei de criar um plugin que faz isso. Não é perfeito, mas faz o seu trabalho.

Você pode encontrá-lo no meu Github: https://github.com/pontusab/wp-ftp-media-library

Então, você precisa alterar algumas coisas dentro do arquivo na linha 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 
    );

O que este plugin faz é, ele muda o structur carregamento de / ano / mês para apenas carregar na máquina local no nosso caso Servidor A . Em seguida, ele usa o php para se conectar ao ftp via: ftp_connect . A função é acionada quando o wp_generate_attachment_metadata é executado. Em seguida, ele executa uma verificação na pasta de upload para ver se há alguma imagem ; nesse caso, ele fará o upload de todas elas no servidor ftp via ftp_put . Quando o upload for concluído, os arquivos serão removidos da máquina local usando a função desvincular .

Em seguida, o plugin altera o URL das imagens para o IP ou nome de host "público" apontado para o servidor ftp. Sugiro usar algo como static.mydomain.com ou cdn.mydomai.com. Eles precisam ser apontados para o servidor ftp (servidor B), que permite carregar as imagens do servidor ftp.

Como os outros membros dizem que você não deveria usar um servidor ftp para isso, é melhor usar um CDN real, montado por fusível ou algo como o Amazon S3.


que funcionou bem no carregamento está ok, mas ocorreu um erro Aviso: ftp_put () [function.ftp-put]: Não foi possível criar o arquivo. em /home/xxx..../plugin_file.php na linha 99
— Fatih Toprak

@Pontus Abrahamsson, Obrigado por esta ótima solução. No entanto, como posso desativar o início de envio de todos os arquivos de mídia no servidor para o outro servidor? Eu só quero que um arquivo recém-carregado seja transferido via ftp.
— user3605780

0

Parece que você só quer usar uma CDN. A maneira como a maioria das CDNs funciona é que você carrega suas imagens localmente e elas são espelhadas no local da CDN. Em seguida, configure um domínio que aponte para o conteúdo da CDN e reescreva os URLs da imagem para usá-lo em vez do URL normal.

Existem vários plugins e serviços bons, embora eu só tenha experiência com o W3TC e o Cloudfront.


Sim, é semelhante ao CDN, exceto que não tenho espaço suficiente no servidor A, pois ele possui apenas 5 GB, enquanto o servidor B possui 1 TB de espaço.
— Ruriko

0

Você precisa entender como o WP carrega um arquivo. Uma solicitação POST envia o arquivo para o servidor onde será armazenado em uma pasta temporária. Depois disso, o WP testará o arquivo carregado, copiará no diretório de conteúdo e excluirá o arquivo temporário.

Este é um processo muito complexo. Para imagens, você pode conectar-se a 'media_upload_file' e verificar se é uma imagem. Se for uma imagem, copie-a com o WP_Filesystem para o servidor externo (use o método ftpext e forneça suas credenciais de ftp nas opções); caso contrário, deixe o WP manipular o upload wp_handle_upload(). No caso de copiar o arquivo para um servidor externo, é necessário fornecer o URL e assim por diante ao WP, para que o WP possa configurar os dados (por exemplo, para postagens de anexo).

Este trabalho não é feito com uma mão cheia de código. Se você não é um desenvolvedor, é melhor contratar um. Ou pesquise um plugin que faça isso por você.


-1

Você pode usar SSHFS ou FTPFS para montar um diretório no servidor remoto para o diretório de uploads. Dessa forma, você não precisará alterar nada no próprio WordPress.

A desvantagem é que todo acesso ao arquivo carregado será mais lento, dependendo da localização do servidor B.


Eu não posso usar SSHFS ou FTPFS porque meu anfitrião não suporta FUSE
— Ruriko

Em seguida, alterne os hosts. O maior problema com a implementação de sua solicitação não é o upload para a outra parte do servidor (basta copiar o código dos plug-ins que são enviados para a CDN), mas como buscá-lo a partir daí para servi-lo. Sem o acesso ao servidor B no nível do sistema de arquivos, o apache não poderá veicular os arquivos; portanto, você terá que tornar o servidor B acessível à web, mas basta mover o WordPress para lá. Você realmente não deu detalhes suficientes sobre sua situação. Atualize a pergunta com todos os detalhes relevantes, se quiser ter uma chance de obter uma resposta.
— precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.