I have the following problem:
I need connect to FTP and read one CSV file. The main problem it's password has @, $, %... How can I connect with especials characters? I tried the following ways to connect:
FILE OPEN
$filename = 'ftp://user:p@s($word@ftp.myftp.url/file.csv';
$handle = fopen($filename, "r") or die("Error");
FTP LOGIN
$ftp_server = "ftp.myftp.url/file.csv";
$ftp_user = "user";
$ftp_pass = "p@s($word";
$conn_id = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login_result = ftp_login($ftp_server, $ftp_user, $ftp_pass) or die("Could not connect to 2");
$data = file_get_contents('ftp.myftp.url/file.csv');
Thanks for all!
You should replace hexadecimal value for @(at) char. Try this,
@ -> %40, $ -> %24
$ftp_pass = "p%40s(%24word";
You have two distinct problems with your two pieces of code.
Here, the problem is the
@
, as you have correctly guessed, as it has a meaning in the URL syntax (as a separator between credentials and hostname).You have to URL-encode the
@
to%40
:You mentioned that the actual password also has
%
. That has to be URL-encoded to%25
.Here, the problem is not
@
, as no URL is involved (neither%
would be a problem). Here, the problem is the$
, as you are using double-quotes, so$word
is replaced with a value of (probably undefined) variableword
, effectively making the password bep@s(
only.Use single quotes to avoid the
$
being interpreted as a variable:Or escape the
$
with\
: