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.

Ruriko
fonte
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.

Pontus Abrahamsson
fonte
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.

Ed Burns
fonte
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ê.

Ralf912
fonte
-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.

Mark Kaplun
fonte
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