0

嗯,这是我以前从未见过的问题。

我正在尝试使用 PHP 流式传输 FTP 文件,fopen()并将feof()其从一台服务器复制到我自己的服务器。这在使用普通http://URL 时可以正常工作。但是,在使用该ftp://协议时,我收到以下错误:

fopen(ftp://.../streaming/planted2.mp4) [0function.fopen0]: failed to open stream: FTP server reports 550 /streaming/planted2.mp4: not a plain file.

请记住,我已确认 URL 是正确的。

如果我将它弹出到浏览器的搜索栏中,它总是会正确加载。

feof()在此错误之后,任何在包装器上使用或的尝试都会fread()导致错误,抱怨相应的函数需要资源,但提供的是布尔值。如果fopen()没有失败,情况就不会如此。

由于文件非常大(有时数 GB),流式传输是强制性的。此外,由于服务器的配置,我需要一种方法来循环遍历每个块以缓冲一些输出。如果我不这样做,服务器就会支持。就 Rackspace 而言,这是一个奇怪的配置。这就是我使用feof().

所以,事不宜迟,我的问题是: 550 错误是什么意思,什么是“普通文件”?如果我尝试下载的服务器的配置有问题,鉴于我的限制,我有哪些选择?

编辑

我已经确定这是一个服务器问题。但是,问题仍然没有解决。

我联系了我的老板和我们的服务器管理员,服务器人员告诉我在不同的基于 Windows 的服务器上测试这个,而不是我正在使用的基于 Linux 的服务器。我的脚本适用于 Windows 服务器,所以我确认我的脚本没有错误。

不幸的是,我的老板仍然希望我找出问题所在,并找出它为什么不能在 Linux 机器上运行。我完全不知道为什么,也不知道去哪里找。任何提示将不胜感激!

4

1 回答 1

0

我刚刚在尝试从 sco unix 服务器获取文件时遇到了这个问题。

服务器文件位置:/home/user/data/myfile.csv

我可以将以下内容放入任何浏览器并获取文件。

ftp://user:password@host/data/myfile.csv

但是,如果我运行以下命令,我会收到与您相同的错误

$f = fopen("ftp://user:password@host/data/myfile.csv", "r");

但是,如果我将完整路径放入 fopen - 它工作正常。

$f = fopen("ftp://user:password@host/home/user/data/myfile.csv", "r");

我不确定这是否会为您解决问题,但对我有用。

于 2016-05-10T07:51:40.597 回答