用PHP连接到FTP,密码为@

问题描述 投票:1回答:2

我有以下问题:

我需要连接到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');

谢谢大家!

php ftp special-characters
2个回答
2
投票

您的两段代码有两个明显的问题。


文件打开

$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-encoded%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(%都不是问题)。在这里,问题是$,因为你是using double-quotes, so $word is replaced with a value of (probably undefined) variable word,有效地使密码只有p@s(

使用single quotes来避免将$解释为变量:

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

或者用$逃离\

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

0
投票

您应该替换@(at)char的十六进制值。试试这个,

@ -> %40, $ -> %24

$ftp_pass = "p%40s(%24word";

© www.soinside.com 2019 - 2024. All rights reserved.