FTP fopen()错误550--不是普通文件


FTP fopen() error 550—not a plain file

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

我正在尝试使用PHP的fopen()feof()流式传输FTP文件,以便将其从一台服务器复制到我自己的服务器。当使用普通的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上不起作用。我完全不知道为什么,也不知道去哪里找。如有任何提示,我们将不胜感激!

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

服务器文件位置:/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");

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