“未能打开流:FTP服务器报告550”使用访问微软FTP服务的文件时,包装(“failed to o

2019-10-19 05:08发布

在PHP中,你必须为FTP包装和FTPS允许您访问使用FTP文件的fopen 。

我想使用包装下载文件流。

我的简化代码:

// 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:系统不能找不到指定的路径。 在第4行/var/www/ftp.php

更多信息:

  • 当用于相同的URL工作正常的wget在同一台机器上。
  • 使用PHP的FTP扩展下载文件工作正常
  • FTP服务器响应220 Microsoft FTP Service215 Windows_NT
  • FTP服务器可以处理被动模式
  • 使用filesize($url); 结果Warning: filesize(): stat failed for...
  • allow_url_fopen设置为On
  • 相同的代码工作得很好针对不同的FTP服务器, 215 UNIX Type: L8

什么可能是造成问题的原因?

编辑:

我已经注意到了Microsoft FTP Service ,当您连接到FTP不把你的根文件夹,但在子文件夹:

/用户名

该子文件夹不能是在URL中当您使用wget或Web浏览器:

FTP://用户名:password@server.com/username/directory-with-dash/file.mp3 //无法在Chrome中使用FTP://用户名:password@server.com/directory-with-dash/file.mp3 //在Chrome中工作正常

我试图在PHP代码这两个URL,但我得到了同样的错误依然。 (我输入错了)

Answer 1:

问题是由FTP服务器没有连接到根(引起/ ),而是到子文件夹( /username )。

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

对于浏览器,wget的,等:

FTP://用户名:password@server.com/directory-with-dash/file.mp3

对于PHP的FTP包装:

FTP://用户名:password@server.com/username/directory-with-dash/file.mp3



文章来源: “failed to open stream: FTP server reports 550” when accessing file on Microsoft FTP Service using wrapper
标签: php ftp fopen