Reputation: 78075
In PHP, you have wrappers for ftp and ftps to allow you access files on an FTP using fopen.
I want to use the wrapper to download a file as a stream.
My simplified code:
// eg. $url = "ftp://username:[email protected]/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);
Error:
Warning: fopen(ftp://[email protected]/directory-with-dash/file.mp3): failed to open stream: FTP server reports 550 /directory-with-dash/file.mp3: The system cannot find the path specified. in /var/www/ftp.php on line 4
More Info:
220 Microsoft FTP Service
and 215 Windows_NT
filesize($url);
results in Warning: filesize(): stat failed for...
allow_url_fopen
setting is On
215 UNIX Type: L8
What might be causing the problem?
Edit:
I have noticed that the Microsoft FTP Service
doesn't place you in the root folder when you connect to the FTP, but in a subfolder:
/username
This subfolder must not be in the URL when you use wget
or a web browser:
ftp://username:[email protected]/username/directory-with-dash/file.mp3 // Not available in Chrome ftp://username:[email protected]/directory-with-dash/file.mp3 // Works fine in Chrome
I have tried both urls in the PHP-code, but I get the same error still. (I typed it wrong)
Upvotes: 1
Views: 7721
Reputation: 78075
The problem was caused by the FTP server not connecting to root (/
) but rather to a subfolder (/username
).
Unlike Chrome and wget, the FTP wrapper in PHP seems to require to have the full path and not the relative path:
For Chrome, wget, etc.:
ftp://username:[email protected]/directory-with-dash/file.mp3
For PHP's FTP wrapper:
ftp://username:[email protected]/username/directory-with-dash/file.mp3
Upvotes: 1