чем URL-кодирование.

я есть следующая проблема:

Мне нужно подключиться к FTP и прочитать один файл CSV. Основная проблема в том, что в пароле есть @, $,% ... Как я могу соединиться с особенными символами? Я попробовал следующие способы подключения:

ФАЙЛ ОТКРЫТ

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

FTP ЛОГИН

$ftp_server = "ftp.myftp.url/file.csv";
$ftp_user = "user";
$ftp_pass = "[email protected]($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');

Спасибо за все!

 Frein07 нояб. 2017 г., 12:59
Да, с помощью fopen и ftp_login. Но не работает.
 BadMiscuit07 нояб. 2017 г., 12:56
Вы пытались избежать этого, например, используя\@ ?

Ответы на вопрос(2)

Решение Вопроса

ФАЙЛ ОТКРЫТ

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

Здесь проблема заключается в@Как вы правильно догадались, это имеет значение вСинтаксис URL (как разделитель между учетными данными и именем хоста).

Вы должныURL-кодирование @ в%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 = "[email protected]($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эффективно сделать пароль[email protected]( только.

использованиеодинарные кавычки чтобы избежать$ интерпретируется как переменная:

 $ftp_pass = '[email protected]($word';

Или сбежать$ с участием\:

 $ftp_pass = "[email protected](\$word";
 Frein08 нояб. 2017 г., 09:43
Хорошо, я вижу, но если у меня есть% 99 в пароле. Как я могу сбежать, используя fopen?
 Frein08 нояб. 2017 г., 09:49
С кодировкой% с% 25 работает. Спасибо
 Funk Forty Niner07 нояб. 2017 г., 13:25
Хорошо, я (теперь) понимаю, что вы подразумеваете под@ в URL.

уй это,

@ -> %40, $ -> %24

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

 Martin Prikryl07 нояб. 2017 г., 13:28
@ это не проблема в$ftp_pass, И есть лучшие способы борьбы с$ чем URL-кодирование.

Ваш ответ на вопрос