提问者:小点点

使用包装器访问Microsoft FTP服务上的文件时“无法打开流:FTP服务器报告550”


在PHP中,您有ftp和ftps的包装器,允许您使用fopen访问ftp上的文件。

我想使用包装器将文件作为流下载。

我的简化代码:

// eg. $url = "ftp://username:password@server.com/directory-with-dash/file.mp3";
$url = 'ftp://' . urlencode($username) . ':' . urlencode($password) . '@' . $server . $path . '/' . $filename;
$ctx = stream_context_create(array('ftp' => array('resume_pos' => 0)));
$fin = fopen($url, 'r', false, $ctx);

错误:

警告:福朋(ftp://...@服务器。com/目录和dash/文件。mp3):无法打开流:FTP服务器报告550/目录和破折号/文件。mp3:系统找不到指定的路径。在/var/www/ftp中。php在线4

更多信息:

  • 同一个url在同一台机器上与wget一起使用时运行良好。
  • 使用PHP的FTP扩展下载文件工作正常
  • FTP服务器响应220 Microsoft FTP Service215Windows_NT
  • FTP服务器可以处理被动模式
  • 使用filesize($url);导致警告:filesize(): stat失败...
  • allow_url_fopen设置为On
  • 相同的代码在不同的FTP服务器上运行良好,215 UNIX类型: L8

是什么导致了这个问题?

编辑:

我注意到,当您连接到FTP时,Microsoft FTP Service不会将您放置在根文件夹中,而是放置在子文件夹中:

/用户名

使用wget或web浏览器时,此子文件夹不得位于URL中:

ftp://username:password@server.com /username/directory-with-dash/file.mp3//Chrome不可用ftp://username:password@server.com /directory-with-dash/file.mp3//在<--plhd中工作正常##############################################################################################################

<罢工> 我在PHP代码中尝试了两个网址,但我仍然得到相同的错误。 (我打错了)


共1个答案

匿名用户

该问题是由于FTP服务器未连接到根目录(/),而是连接到子文件夹(/username)。

与Chrome和wget不同,PHP中的FTP包装器似乎需要完整路径,而不是相对路径:

对于Chrome,wget等:

ftp://username:password@服务器。com/目录和dash/文件。mp3

对于PHP的FTP包装器:

ftp://username:password@服务器。com/username/directory和dash/file。mp3