我有以下问题:
我需要连接到FTP并读取一个CSV文件。主要问题是它的密码有@,$,%...我怎样才能与特殊人物建立联系?我尝试了以下连接方式:
文件打开
$filename = 'ftp://user:p@s([email protected]/file.csv';
$handle = fopen($filename, "r") or die("Error");
FTP登录
$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');
谢谢大家!
2条答案
按热度按时间cyvaqqii1#
这两段代码有两个明显的问题。
文件打开
这里,问题出在
@
上,正如您所猜测的那样,因为它在URL syntax中有意义(作为凭证和主机名之间的分隔符)。您必须将URL-encode从
@
转换为%40
:您提到实际密码也有
%
。URL必须编码为%25
。FTP登录
这里,问题不是
@
,因为不涉及URL(%
也不是问题)。这里,问题是$
,因为您使用了双引号,所以$word
被替换为(可能未定义的)变量word
的值,实际上使密码仅为p@s(
。使用单引号避免
$
被解释为变量:或者用
\
转义$
:nue99wik2#
您应该将@(at)char替换为十六进制值。试试这个
@ -> %40, $ -> %24
$ftp_pass = "p%40s(%24word";