将图像上传到远程服务器


11

我正在使用Wordpress媒体上传器上传图像,我想知道是否有一种方法可以将其上传到远程服务器而不是本地服务器?示例:我的wordpress博客托管在服务器A上,并且我想使用媒体上传器将图像上传到服务器B而不是服务器A。

这两台服务器都运行带有nginx作为网络服务器的Ubuntu 10.04 LTS,并且都支持ftp和sftp。


您如何选择如何连接服务器?FTP,API或SSH?在您要存储内容的服务器上
Pontus Abrahamsson

我唯一连接到服务器的选项是FTP和SSH
Ruriko 2013年


我了解OP指出,API访问不是一种选择,但是在大多数可访问的网站上,新的WordPress API始终可用。由于这是一个老话题,所以我想为其他访问者提到这一点。例如,如果您可以访问网站,则通常可以访问API。有关媒体的示例:developer.wordpress.org/rest-api/reference/media
ryanm

Answers:


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更改为仅在我们的案例Server A中在本地计算机上上载。然后,它使用php通过ftp_connect连接到ftp 。当wp_generate_attachment_metadata运行时,该函数将触发。然后,它在上载文件夹中运行检查以查看是否有任何图像,如果有,它将通过ftp_put所有图像上载到ftp服务器。上传完成后,将使用unlink功能从本地计算机中删除文件。

然后,插件将图像的URL更改为指向ftp服务器的“公共” ip或主机名。我建议使用诸如static.mydomain.com或cdn.mydomai.com之类的东西。它们需要指向ftp服务器(服务器B),这使您能够从ftp服务器加载图像。

正如其他成员所说,您应该为此使用ftp服务器,最好是使用真实的CDN,通过保险丝或类似Amazon S3的方式安装。


上传效果很好,但是出现错误警告:ftp_put()[function.ftp-put]:无法创建文件。在第99行的/home/xxx..../plugin_file.php中
Fatih Toprak

@Pontus Abrahamsson,感谢您提供的出色解决方案。但是,如何禁用它开始将服务器上的每个媒体文件发送到另一台服务器呢?我只希望新上传的文件通过ftp传输。
user3605780 '16

0

听起来好像您只想使用CDN。大多数CDN的工作方式是在本地加载图像,并且它们会在CDN位置进行镜像。然后,设置一个指向CDN内容的域,并重写图像URL以使用该域而不是常规URL。

尽管我只有W3TC和Cloudfront的经验,但有几个不错的插件和服务。


是的,它与CDN相似,除了服务器A上没有足够的空间,因为它只有5GB,而服务器B有1TB的空间。
Ruriko

0

您必须了解WP如何上传文件。POST请求将文件发送到服务器,该文件将存储在一个临时文件夹中。之后,WP将测试上传的文件,将其复制到内容目录中并删除临时文件。

这是一个非常复杂的过程。对于图像,您可以挂钩到“ media_upload_file”,然后检查它是否为图像。如果是图像,则将其与WP_Filesystem一起复制到外部服务器(使用方法ftpext并在选项中提供您的ftp凭据),否则让WP使用来处理上传wp_handle_upload()。如果将文件复制到外部服务器,则必须向WP提供url等,以便WP可以设置数据(例如,用于附件发布)。

这项工作不是用满满的代码完成的。如果您不是开发人员,最好雇用一个。或搜索将为您完成此操作的插件。


-1

您可以使用SSHFSFTPFS在远程服务器上为您的上载目录安装目录。这样,您将不需要在WordPress本身中进行任何更改。

缺点是,根据服务器B所在的位置,对上载文件的每次访问都会变慢。


我不能使用SSHFS或FTPFS,因为我的主机不支持FUSE
Ruriko

然后切换主机。实现您的请求的最大问题不是上传到其他服务器部分(只是从上传到CDN的插件中复制代码),而是如何从那里获取请求以进行服务。如果没有文件系统级别的访问服务器B的权限,apache将无法提供文件,因此您将必须使服务器B可以通过网络访问,但是您只能将WordPress移动到那里。您确实没有提供足够的详细情况。如果您想获得解答,请用所有相关的详细信息更新问题。
马克·卡普伦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.