Fre*_*ein 1 php ftp special-characters
我有以下问题:
我需要连接到 FTP 并读取一个 CSV 文件。主要问题是它的密码有@、$、%...我如何连接特殊字符?我尝试了以下几种连接方式:
文件打开
$filename = 'ftp://user:p@s($word@ftp.myftp.url/file.csv';
$handle = fopen($filename, "r") or die("Error");
Run Code Online (Sandbox Code Playgroud)
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');
Run Code Online (Sandbox Code Playgroud)
感谢大家!
您的两段代码有两个不同的问题。
文件打开
Run Code Online (Sandbox Code Playgroud)$filename = 'ftp://user:p@s($word@ftp.myftp.url/file.csv'; $handle = fopen($filename, "r") or die("Error");
在这里,问题是,正如您所猜测的那样,因为它在URL 语法@中具有含义(作为凭据和主机名之间的分隔符)。
您必须将 URL@编码为%40:
$filename = 'ftp://user:p%40s($word@ftp.myftp.url/file.csv';
Run Code Online (Sandbox Code Playgroud)
您提到实际密码也有%. 必须将其URL 编码为%25.
FTP登录
Run Code Online (Sandbox Code Playgroud)$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(唯一。
使用单引号以避免$被解释为变量:
$ftp_pass = 'p@s($word';
Run Code Online (Sandbox Code Playgroud)
或者使用以下$命令逃避\:
$ftp_pass = "p@s(\$word";
Run Code Online (Sandbox Code Playgroud)