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

时间:2014-01-10 11:10:34

标签: php ftp fopen

在PHP中,您wrappers for ftp and 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);

错误:

  

警告:fopen(ftp://...@server.com/directory-with-dash/file.mp3):无法打开流:FTP服务器报告550 /directory-with-dash/file.mp3:系统找不到指定的路径。在/var/www/ftp.php第4行

更多信息:

  • 在同一台计算机上与wget一起使用时,相同的网址可以正常工作。
  • 使用PHP的FTP extension下载文件正常
  • FTP服务器以220 Microsoft FTP Service215 Windows_NT
  • 回复
  • FTP服务器可以处理被动模式
  • 使用filesize($url);会产生Warning: filesize(): stat failed for...
  • allow_url_fopen设置为On
  • 对于不同的FTP服务器215 UNIX Type: L8
  • ,相同的代码运行良好

可能导致问题的原因是什么?

修改

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

  

/用户名

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

  

ftp://username:password@server.com/username/directory-with-dash/file.mp3 // Chrome中不可用   ftp://username:password@server.com/directory-with-dash/file.mp3 //在Chrome中运行良好

我在PHP代码中尝试了两个网址,但我仍然遇到同样的错误。(我输错了)

1 个答案:

答案 0 :(得分:1)

问题是由于FTP服务器没有连接到root(/)而是连接到子文件夹(/username)。

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

适用于Chrome,wget等:

  

ftp://username:password@server.com/directory-with-dash/file.mp3

对于PHP的FTP包装器:

  

ftp://username:password@server.com/username/directory-with-dash/file.mp3