在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行
更多信息:
220 Microsoft FTP Service
和215 Windows_NT
filesize($url);
会产生Warning: filesize(): stat failed for...
allow_url_fopen
设置为On
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代码中尝试了两个网址,但我仍然遇到同样的错误。(我输错了)
答案 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