【问题标题】:Getting images onto server from separate web host从单独的 Web 主机获取图像到服务器
【发布时间】:2016-03-02 19:50:56
【问题描述】:

我有 GoDaddy 共享网络空间,可通过 FTP 访问,其中包含一个包含图像的文件夹。这些图像每天都在变化。

我正在寻找有关如何将这些图像放到工作场所的服务器上的建议,可能每隔一小时左右。服务器没有安装 IIS 有没有其他方法可以做到这一点?

我能做一个 PHP 脚本,可以使用 ip 或其他东西将所有图像放到服务器上吗?

【问题讨论】:

  • 嗯,是的。如果您知道一些很棒的搜索网站,您会立即发现 PHP 集成了各种 FTP 功能。
  • 接收文件的服务器没有IIS,是windows。我在想更多的 bat 文件来使用 windows 集成的 ftp?
  • 您认为为什么需要 IIS 才能使用 FTP?在此处查看 FileZilla 服务器:例如filezilla-project.org
  • 我说的是每小时完成一次,而不是手动完成。
  • 这里也一样。当然,您可以编写一个 PHP 脚本来为您执行此操作。我只是以为您在一台机器上缺少 FTP? ..那你的问题是什么?

标签: php web ftp server


【解决方案1】:

我遇到了同样的问题,因为我在远程服务器上有两个图像,我需要在每天的预定义时间将它们复制到我的本地服务器,这是我能够想出的代码......

try {
    if(@copy('url/to/source/image.ext', 'local/absolute/path/on/server/' . date("d-m-Y") . ".gif")) {
    } else {
        $errors = error_get_last();
        throw new Exception($errors['type'] . " - " . $errors['message']);
    };
} catch(Exception $e) {
    //An Error Occurred Downloading The Requested Image
    //Place exception handling code here
};

然后我创建了一个 cron 作业,该作业每天运行此文件,但您可以根据源服务器上源图像更改的频率尽可能频繁地运行。

代码解释几点...

  1. 由于代码在后台运行,我使用@ 符号来消除对复制命令出现的任何错误的视觉引用,因为它们无论如何都不会被查看。相反,如果复制导致错误,它会返回 false 并触发抛出一个新异常,该异常接受错误类型和错误消息并为其抛出一个新异常,然后可以在 catch 块中处理该异常,并且可以按照您的需要执行操作,例如本地日志条目,发送错误电子邮件,无论您需要什么。
  2. 作为复制命令中的第二个参数,您将看到路径导致文件名基于当前日期命名。此名称可以是任何名称,但在目的地中必须是唯一的才能正常工作。如果您计划在每次复制完成时覆盖图像,那么您可以将名称静态编码为相同的名称,但如果您想维护历史记录,那么您需要在本地服务器上提供文件命名解决方案以确保确保每次 cron 运行时文件都不会被覆盖。
  3. 复制语句的第一个参数是在假定源图像文件每次都命名相同的情况下编写的,如果名称更改,您将需要确定命名是如何实现的,并编写一个变量来构建它命名并将其作为源文件名插入。
  4. 此代码不会更改源图像文件的格式,因此为确保不会发生损坏并且图像在复制后仍然可以显示您需要确保源图像文件和图像文件的本地副本具有相同的文件扩展名,因此如果源图像文件是 .gif 文件,那么您需要确保第二个复制参数中的文件扩展名也设置为 .gif

【讨论】:

  • 有没有办法将打开的文件夹提取为 zip?基本上我不会有一个绝对路径,我可能需要每天拾取几个包含 40-50 张图像的文件夹
  • 如果你能澄清你的意思,请。您是在谈论获取远程服务器上的现有文件夹,将其压缩,下载,然后提取图像吗?
【解决方案2】:

我将尝试在这里回答,而不是继续垃圾评论;)
你的网站空间可以通过 FTP 访问。我们就叫它网络空间
然后你在你的工作场所得到了你的服务器。我们就叫它工作场所
毕竟你需要一台服务器(例如也可以是webspace),你可以在其中运行PHP。我们称之为php-server

第 1 步
工作场所设置一个 FTP 服务器,例如FileZilla。您设置您的 FTP 服务器,以便您可以连接到它。因此,请创建一个帐户并进行设置,以便您可以访问要保存图像的文件夹。还要确保您可以从工作场所外部访问 - 防火墙设置等。

第 2 步
如果您可以在 webspace 上运行 PHP 脚本,这将是最简单的方法。您可以直接访问图像文件,在 workplace 建立与您的 FTP 服务器的连接并上传文件。
如果 PHP 服务器在其他地方,您必须建立从 php-server 到您的 webspace 的连接;将您的文件下载到您的php-server;将您的文件上传到您工作场所的 FTP 服务器。

如您所见,这将是一些工作,但应该可以做到。

【讨论】:

  • 这太复杂了。您不必为了将文件推送到本地就必须在目标机器上安装 FTP 服务器。更不用说工作场所的机器可能会在防火墙后面,并且在打开端口和托管 FTP 服务与仅与网络空间建立传出 FTP 连接时会有问题。拉式设计比推式设计更能解决这个问题。
【解决方案3】:

创建一个 .bat 文件,该文件使用 ftp 命令行函数来get 从服务器获取您想要的数据。将该 .bat 文件保存在某处并创建一个计划任务以每小时运行一次脚本。

您甚至可以将 ftp 命令的实际序列存储在单独的文件中(例如ftpcmd.dat)并从脚本中调用它们

ftp -n -s:ftpcmd.dat SERVERNAME.COM

ftp 命令文件示例:

user MyUserName
Password
bin
cd \your\path\images
mget * C:\Temp\
quit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    相关资源
    最近更新 更多