Tải hình ảnh lên máy chủ từ xa


11

Tôi đang sử dụng trình tải lên phương tiện Wordpress để tải lên hình ảnh và tôi tự hỏi liệu có cách nào để tải nó lên máy chủ từ xa thay vì máy chủ cục bộ của tôi không? Ví dụ: Blog wordpress của tôi được lưu trữ trên Máy chủ A và tôi muốn sử dụng trình tải lên phương tiện để tải hình ảnh lên Máy chủ B thay vì Máy chủ A.

Cả hai máy chủ đều chạy Ubuntu 10.04 LTS với nginx là máy chủ web và cả hai đều hỗ trợ ftp & sftp.


Tùy chọn của bạn về cách kết nối với máy chủ là gì? FTP, API hay ssh? trên máy chủ nơi bạn muốn lưu trữ nội dung của mình
Pontus Abrahamsson

Tùy chọn duy nhất của tôi để kết nối với máy chủ là FTP & SSH
Ruriko

Sử dụng plugin hacklog-remote-file https://wordpress.org/plugins/hacklog-remote-attachment/
saman m

Tôi hiểu rằng OP chỉ ra rằng quyền truy cập API không phải là một tùy chọn, tuy nhiên trên hầu hết các trang web có thể truy cập, API WordPress mới luôn có sẵn. Vì đây là một chủ đề cũ, tôi nghĩ rằng tôi sẽ đề cập đến điều đó cho những khách truy cập khác. Ví dụ: nếu bạn có thể truy cập trang web, bạn thường có thể truy cập API. Ví dụ về phương tiện truyền thông: developer.wordpress.org/rest-api/reference/media
ryanm

Câu trả lời:


14

Tôi vừa xây dựng một plugin làm điều này. Nó không hoàn hảo nhưng nó làm công việc của nó.

Bạn có thể tìm thấy nó trong Github của tôi: https://github.com/pontusab/wp-ftp-media-l

Vì vậy, bạn cần thay đổi một số thứ trong tệp trên hàng 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 
    );

Những gì plugin này làm là, nó thay đổi cấu trúc tải lên từ / năm / tháng thành chỉ tải lên trên máy cục bộ trong trường hợp Máy chủ A của chúng tôi . Sau đó, nó sử dụng php để kết nối với ftp thông qua: ftp_connect . Hàm kích hoạt khi wp_generate_attachment_metadata chạy. Sau đó, nó chạy một kiểm tra trong thư mục tải lên để xem nếu có bất kỳ hình ảnh nào , nếu vậy nó sẽ tải tất cả chúng lên máy chủ ftp thông qua ftp_put . Khi tải lên hoàn tất, các tệp sẽ bị xóa khỏi máy cục bộ bằng cách hủy liên kết chức năng .

Sau đó, plugin thay đổi url của hình ảnh thành ip "công khai" hoặc tên máy chủ được trỏ đến máy chủ ftp. Tôi đề nghị sử dụng một cái gì đó như static.mydomain.com hoặc cdn.mydomai.com. Chúng cần được trỏ đến máy chủ ftp (Máy chủ B) cho phép bạn tải hình ảnh từ máy chủ ftp.

Như các thành viên khác nói rằng bạn nên sử dụng máy chủ ftp cho việc này, nó tốt hơn với một cdn thực, Được gắn bởi cầu chì hoặc một cái gì đó như Amazon S3.


tải lên tuyệt vời là ổn nhưng gặp lỗi Cảnh báo: ftp_put () [function.ftp-put]: Không thể tạo tệp. trong /home/xxx..../plugin_file.php trên dòng 99
Fatih Toprak

@Pontus Abrahamsson, Cảm ơn giải pháp tuyệt vời này. Tuy nhiên, làm thế nào tôi có thể vô hiệu hóa nó bắt đầu gửi mọi tệp phương tiện trên máy chủ đến máy chủ khác? Tôi chỉ muốn một tập tin mới tải lên được chuyển qua ftp.
user3605780

0

Có vẻ như bạn chỉ muốn sử dụng CDN. Cách thức hoạt động của hầu hết các CDN là bạn tải hình ảnh của mình cục bộ và chúng được nhân đôi tại vị trí CDN. Sau đó, bạn thiết lập một tên miền trỏ đến nội dung CDN và viết lại các url hình ảnh của bạn để sử dụng tên miền đó thay vì url thông thường của bạn.

Có một số plugin và dịch vụ tốt, mặc dù tôi chỉ có kinh nghiệm với W3TC và Cloudfront.


Có, nó tương tự như CDN ngoại trừ tôi không có đủ dung lượng trên Máy chủ A vì nó chỉ có 5GB trong khi Máy chủ B có dung lượng 1TB.
Ruriko

0

Bạn phải hiểu làm thế nào WP tải lên một tập tin. Một yêu cầu POST gửi tệp đến máy chủ nơi nó sẽ được lưu trữ trong một thư mục tạm thời. Sau đó, WP sẽ kiểm tra tệp đã tải lên, sao chép nó vào thư mục nội dung và xóa tệp tạm thời.

Đây là một quá trình rất phức tạp. Đối với hình ảnh, bạn có thể nối vào 'media_upload_file', sau đó kiểm tra xem đó có phải là hình ảnh không. Nếu đó là hình ảnh, hãy sao chép nó bằng WP_Filesystem sang máy chủ bên ngoài (sử dụng phương pháp ftpext và cung cấp thông tin đăng nhập ftp của bạn trong các tùy chọn), nếu không, hãy để WP xử lý việc tải lên bằngwp_handle_upload() . Trong trường hợp sao chép tệp vào máy chủ bên ngoài, bạn phải cung cấp url và vv cho WP, để WP có thể thiết lập dữ liệu (ví dụ: đối với các bài đăng đính kèm).

Công việc này không được thực hiện với một bàn tay đầy mã. Nếu bạn không phải là một nhà phát triển, tốt hơn nên thuê một. Hoặc tìm kiếm một plugin sẽ làm điều này cho bạn.


-1

Bạn có thể sử dụng SSHFS hoặc FTPFS để gắn một thư mục trên máy chủ từ xa cho thư mục tải lên của bạn. Bằng cách này, bạn sẽ không cần thay đổi bất cứ điều gì trong chính WordPress.

Hạn chế là mọi quyền truy cập vào tệp đã tải lên sẽ chậm hơn tùy thuộc vào nơi máy chủ B cư trú.


Tôi không thể sử dụng SSHFS hoặc FTPFS vì máy chủ của tôi không hỗ trợ FUSE
Ruriko

Sau đó chuyển đổi máy chủ. Vấn đề lớn nhất khi thực hiện yêu cầu của bạn không phải là tải lên phần máy chủ khác (chỉ sao chép mã từ các plugin tải lên CDN), nhưng làm thế nào để tìm nạp nó từ đó để phục vụ nó. Nếu không có cấp độ hệ thống tệp truy cập vào máy chủ B, apache sẽ không thể phục vụ các tệp, vì vậy bạn sẽ phải làm cho máy chủ B có thể truy cập vào web, nhưng sau đó bạn có thể di chuyển WordPress của mình đến đó. Bạn thực sự đã không cung cấp đủ chi tiết về tình huống của bạn. Vui lòng cập nhật câu hỏi với tất cả các chi tiết có liên quan nếu bạn muốn có cơ hội nhận được câu trả lời.
Đánh dấu Kaplun
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.