嗯,这是我以前从未见过的问题。
我正在尝试使用PHP的fopen()
和feof()
来传输FTP文件,以便将其从一台服务器复制到我自己的服务器。这在使用普通http://
网址时效果很好。但是,使用ftp://
协议时,我收到以下错误:
fopen(ftp://.../streaming/planted2.mp4) [0function.fopen0]: failed to open stream: FTP server reports 550 /streaming/planted2.mp4: not a plain file.
请记住,我已确认网址是否正确。
如果我将其弹出到浏览器的搜索栏中,它总是正确加载。
发生此错误后,任何在包装器上使用feof()
或fread()
的尝试都会导致错误,抱怨相应的函数需要资源,但是提供了一个布尔值。如果fopen()
没有失败,情况就不是这样了。
由于文件非常大(有时几千兆字节),因此必须使用流式传输。此外,由于服务器的配置,我需要一种循环每个块的方法,以缓冲一些输出。如果不这样做,服务器就会支持。这是Rackspace的一个奇怪的配置。这就是我使用feof()
的原因。
所以,不用多说,我的问题是: 550错误是什么意思,什么是“普通文件”?如果我尝试下载的服务器配置有问题,鉴于我的限制,我有哪些选择?
我已经确定这是一个服务器问题。但是,问题仍然没有得到解决。
我联系了我的老板和我们的服务器管理员,服务器人告诉我在不同的基于Windows的服务器上测试它,而不是我正在玩的基于Linux的服务器。我的脚本适用于Windows服务器,所以我确认我的脚本没有错误。
不幸的是,我的老板仍然希望我弄清楚问题,并找出为什么它不能在Linux机器上工作。我完全不知道为什么,也不知道在哪里看。任何提示将不胜感激!
答案 0 :(得分: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");
我不确定这是否会为你解决,但对我有用。