我有以下问题:
我需要连接到 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');
感谢大家!
您的两段代码有两个不同的问题。
文件打开
$filename = 'ftp://user:p@s([email protected]/file.csv';
$handle = fopen($filename, "r") or die("Error");
在这里,问题是@
,正如您所猜对的那样,因为它在网址语法(作为凭据和主机名之间的分隔符)。
你必须URL编码 the @
to %40
:
$filename = 'ftp://user:p%40s([email protected]/file.csv';
您提到实际密码也有%
。那必须是URL编码 to %25
.
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");
这里,问题不在于@
,因为不涉及 URL(也不涉及%
将会是一个问题)。在这里,问题是$
, 就像你一样使用双引号,所以$word被替换为(可能未定义)变量的值word,有效地使密码成为p@s(
only.
Use 单引号以避免$
被解释为变量:
$ftp_pass = 'p@s($word';
或者逃避$
with \
:
$ftp_pass = "p@s(\$word";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)