使用PHP连接到FTP,密码为@

u3r8eeie  于 2023-09-29  发布在  PHP
关注(0)|答案(2)|浏览(121)

我有以下问题:
我需要连接到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');

谢谢大家!

cyvaqqii

cyvaqqii1#

这两段代码有两个明显的问题。
文件打开

$filename = 'ftp://user:p@s([email protected]/file.csv'; 
$handle = fopen($filename, "r") or die("Error");

这里,问题出在@上,正如您所猜测的那样,因为它在URL syntax中有意义(作为凭证和主机名之间的分隔符)。
您必须将URL-encode@转换为%40

$filename = 'ftp://user:p%40s([email protected]/file.csv';

您提到实际密码也有%。URL必须编码为%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(
使用单引号避免$被解释为变量:

$ftp_pass = 'p@s($word';

或者用\转义$

$ftp_pass = "p@s(\$word";
nue99wik

nue99wik2#

您应该将@(at)char替换为十六进制值。试试这个
@ -> %40, $ -> %24
$ftp_pass = "p%40s(%24word";

相关问题