ANisus
ANisus

Reputation: 78075

"failed to open stream: FTP server reports 550" when accessing file on Microsoft FTP Service using wrapper

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:

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

Answers (1)

ANisus
ANisus

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

Related Questions