Парсинг строки для FTP-соединения
Распростанённый формат передачи настроек FTP-соединения - это ftp://user:password@host:port/path/, где обязательным является только host. Но для работы с FTP надо разбирать эту строку. Я написал себе небольшую функцию для этого.
UPD: Когда я писал это, то забыл о том, что есть стандартная функция parse_url. Зато моя подставляет логин, пароль, порт, если они не указаны, что удобно для подключения к FTP-серверам с анонимным доступом.
-
/**
-
* Parse FTP-connection string
-
*
-
* @param string $url like ftp://user:password@host:port/path/
-
* @return array hash(login, password, host, port, path)
-
*/
-
function parseFtpUrl($url) {
-
'login' => 'anonymous',
-
'password' => 'nobody@nobody.com',
-
'host' => '',
-
'port' => 21,
-
'path' => '',
-
);
-
-
}
-
-
return $result;
-
}
Ограничение - неправильно разбирает, если в имени пользователя содержится @. Если вы знаете, что будут такие логины и всегда будет указываться пароль, то надо заменить регулярное выражение на #^ftp://([^:]+)?(:([^@]+))?@?([^:/]*)(:([^/]+))?(/(.*))?$#i (убралась собачка в недопустимых символах в имени пользователя).
А если попробовать
$url = 'ftp://username:password@hostname/path/dir';
print_r(parse_url($url));
http://ru2.php.net/parse_url
Ура! Я изобрёл велосипед.
@roTuKa: спасибо, забыл о ней
Инфо просто супер как раз искал, а тут все есть, спасибо.
Велосипед удался
и всё же parse_url будет получше ...
parse_url - 0.000155925750732 sec.
parseFtpUrl - 0.000374794006348 sec.
не согласен...
так как parse_url - это универсальная функция, хоть и не без багов,
а parseFtpUrl все таки только для ftp uri.
Ууу.... всегда хотел разобраться в регулярных выражениях.... пошёл разбирать.
Был бы очень благодарен если Вы написали статейку по это делу.
Привет Tamerlan,
по регулярным выражениям миллион статей, а гугл в данном случае помошник номер 1
http://www.google.com.ua/search?q=perl+%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5+%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F&sourceid=navclient-ff&ie=UTF-8&rlz=1B3GGGL_ruUA240UA240&aq=t
я бы советовал
http://www.phpfaq.ru/regexp
а потом
http://php.net/manual/ru/reference.pcre.pattern.syntax.php