원격 서버에 이미지 업로드


11

Wordpress 미디어 업 로더를 사용하여 이미지를 업로드하고 있는데 로컬 서버 대신 원격 서버에 업로드하는 방법이 있는지 궁금합니다. 예 : 워드 프레스 블로그가 서버 A에서 호스팅되고 미디어 업 로더를 사용하여 서버 A 대신 서버 B에 이미지를 업로드하려고합니다.

두 서버 모두 웹 서버로 nginx를 사용하여 Ubuntu 10.04 LTS를 실행하며 ftp 및 sftp를 모두 지원합니다.


서버에 연결하는 방법에 대한 옵션은 무엇입니까? FTP, API 또는 ssh? 컨텐츠를 저장하려는 서버에서
Pontus Abrahamsson

서버에 연결하는 유일한 옵션은 FTP & SSH입니다.
Ruriko

hacklog-remote-attachment 플러그인 사용 https://wordpress.org/plugins/hacklog-remote-attachment/
saman m 08-08-19

OP는 API 액세스가 옵션이 아니라고 표시했지만 대부분의 액세스 가능한 사이트에서는 항상 새로운 WordPress API를 사용할 수 있습니다. 이것은 오래된 스레드이기 때문에 다른 방문객들에게 언급 할 것이라고 생각했습니다. 예를 들어 웹 사이트에 액세스 할 수 있으면 일반적으로 API에 액세스 할 수 있습니다. 미디어 관련 예제 : developer.wordpress.org/rest-api/reference/media
ryanm ryanm

답변:


14

방금 플러그인을 만들었습니다. 완벽하지는 않지만 그 일을합니다.

내 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에서 로컬 서버 에만 업로드하도록 변경 하는 것 입니다. 그런 다음 php를 사용하여 ftp_connect 를 통해 ftp에 연결합니다 . wp_generate_attachment_metadata가 실행될 때이 함수가 실행됩니다. 그런 다음 업로드 폴더에서 검사 를 실행하여 이미지가 있는지 확인합니다. 이미지 가 있으면 ftp_put을 통해 ftp-server에 모두 업로드합니다 . 업로드가 완료되면 unlink 기능을 사용하여 파일이 로컬 시스템에서 제거됩니다 .

그런 다음 플러그인은 이미지의 URL을 "public"ip 또는 ftp-server를 가리키는 호스트 이름으로 변경합니다. static.mydomain.com 또는 cdn.mydomai.com과 같은 것을 사용하는 것이 좋습니다. ftp 서버 (서버 B)를 가리켜 야하므로 ftp 서버에서 이미지를로드 할 수 있습니다.

다른 회원이 말한 것처럼 ftp-server를 사용해야한다고 말하면 퓨즈로 마운트 된 실제 cdn 또는 Amazon S3와 같은 것이 좋습니다.


업로드가 잘되었지만 오류가 발생했습니다. 경고 : ftp_put () [function.ftp-put] : 파일을 만들 수 없습니다. 99 행의 /home/xxx..../plugin_file.php에 있음
Fatih Toprak 2016 년

@ 폰투스 아브라함 손,이 훌륭한 솔루션에 감사드립니다. 그러나 서버의 모든 미디어 파일을 다른 서버로 보내기 시작하지 않도록 어떻게 할 수 있습니까? ftp를 통해 새로 업로드 된 파일을 전송하고 싶습니다.
user3605780

0

CDN을 사용하려는 것처럼 들립니다. 대부분의 CDN이 작동하는 방식은 이미지를 로컬로로드하고 CDN 위치에 미러링되는 것입니다. 그런 다음 CDN 컨텐츠를 가리키는 도메인을 설정하고 일반 URL 대신 해당 도메인을 사용하도록 이미지 URL을 다시 작성하십시오.

W3TC와 Cloudfront에 대한 경험 만 있지만 몇 가지 좋은 플러그인과 서비스가 있습니다.


예, 서버 A에 충분한 공간이 없기 때문에 CDN과 비슷하지만 서버 B에는 1TB의 공간이 있지만 5GB 만 있습니다.
Ruriko

0

WP가 파일을 업로드하는 방법을 이해해야합니다. POST 요청은 파일을 서버로 전송하여 임시 폴더에 저장합니다. 그 후 WP는 업로드 된 파일을 테스트하고 컨텐츠 디렉토리에 복사 한 후 임시 파일을 삭제합니다.

이것은 매우 복잡한 과정입니다. 이미지의 경우 'media_upload_file'에 연결 한 다음 이미지인지 확인할 수 있습니다. 이미지 인 경우 WP_Filesystem을 사용하여 이미지를 외부 서버로 복사하십시오 (ftpext 메소드를 사용하고 옵션 내에 ftp 신임 정보 제공). 그렇지 않으면 WP가 업로드를 처리하도록하십시오.wp_handle_upload() . 파일을 외부 서버로 복사하는 경우 WP에 URL 등을 제공해야하므로 WP가 데이터를 설정할 수 있습니다 (예 : 첨부 파일 게시물).

이 작업은 코드로 가득 찬 손으로 수행되지 않습니다. 개발자가 아닌 경우 개발자를 고용하는 것이 좋습니다. 또는이 작업을 수행 할 플러그인을 검색하십시오.


-1

SSHFS 또는 FTPFS 를 사용 하여 업로드 디렉토리의 원격 서버에 디렉토리를 마운트 할 수 있습니다 . 이런 식으로 WordPress 자체에서 아무것도 변경할 필요가 없습니다.

단점은 서버 B가 상주하는 위치에 따라 업로드 된 파일에 대한 모든 액세스 속도가 느려진다는 것입니다.


호스트가 FUSE를 지원하지 않기 때문에 SSHFS 또는 FTPFS를 사용할 수 없습니다
Ruriko

그런 다음 호스트를 전환하십시오. 요청을 구현할 때 가장 큰 문제는 다른 서버 부분으로 업로드하는 것 (CDN에 업로드하는 플러그인에서 코드를 복사하는 것)이 아니라 서비스를 제공하기 위해 가져 오는 방법입니다. 서버 B에 대한 파일 시스템 레벨 액세스가 없으면 아파치가 파일을 제공 할 수 없으므로 서버 B를 웹에 액세스 할 수 있도록해야하지만 워드 프레스를 그 곳으로 옮길 수 있습니다. 당신은 실제로 당신의 상황에 대한 충분한 세부 사항을 제공하지 않았습니다. 답변을 받으려면 관련된 모든 세부 사항으로 질문을 업데이트하십시오.
Mark Kaplun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.