Percebi que às vezes pode ser difícil trabalhar com URIs em PHP. Por exemplo, digamos que você deseja adicionar uma variável de consulta a um URI adicionado pelo usuário. Idéia bem simples, certo? Bem, vamos ver o que você teria que fazer (no código) para conseguir isso:
- Certifique-se de que a entrada do usuário seja realmente um URI válido
- Verifique se já existe uma string de consulta (em caso afirmativo, você precisará encontrar uma maneira de preservá-la ou removê-la completamente).
- Certifique-se de que não haja um fragmento anexado ao final da string de consulta. (talvez você precise preservar isso também)
- Se a variável que você deseja gravar já existe, deseja substituí-la ou renomeá-la?
- Reconstrua a string de consulta e coloque-a de volta no URI
E tudo isso é realmente bobo, considerando que usar e modificar URIs é uma coisa bastante padrão em praticamente qualquer aplicativo PHP. Quero dizer, por que não é tão simples como:
$uri = new uri($user_input);
if (empty($uri->error)) {
$uri->query_add('myVar', 'myValue');
} else {
// invalid URI error
}
Bem, agora é 🙂
Graças à biblioteca PHP-URI , modificar e reunir informações sobre praticamente qualquer URI é realmente simples.
Alguns exemplos:
Operações de Daisy Chaining
$uri = new uri('example@gmail.com');
// Quick and easy email template URI
$uri->chain()
->replace('SCHEME', 'mailto:')
->query_replace('subject', 'Re: [Suggestion Box]')
->query_replace('body', 'More snickers in the break room please!')
;
printf('<a href="%1$s">%2$s</a>', $uri, $uri->authority);
resultado:
<a href="mailto:example@gmail.com?subject=Re%3A%20%5BSuggestion%20Box%5D&body=More%20snickers%20in%20the%20break%20room%20please%21">example@gmail.com</a>
Juntando informações
$uri = new uri('http://example.com/path/to/file.ext?q=1');
switch ($uri->scheme_name) {
case 'https':
case 'sftp':
case 'ssh':
echo 'Uses SSL'.PHP_EOL;
break;
default:
echo 'Does not use SSL'.PHP_EOL;
}
// Change to an absolute path
$abs_path = $_SERVER['DOCUMENT_ROOT'].$uri->path;
echo $abs_path.PHP_EOL;
// easier to read links
printf('<a href="%1$s">%2$s</a>', $uri->str(), $uri->host.$uri->path);
// FTP logins
$uri = new uri('ftp://jdoe@example.com/my/home/dir');
$login = array(
'username' => $uri->user,
'password' => $user_input,
'domain' => $uri->host,
'path' => $uri->path
);
resultado:
Does not use SSL
/var/www/path/to/file.ext
<a href="http://example.com/path/to/file.ext?q=1">example.com/path/to/file.ext</a>
Sobre o projeto
The Github Repo
Características
- Analisador altamente preciso (com base no padrão URI )
- Operações fáceis de coluna
- Operações fáceis de consulta
- Variáveis Sincronizadas
- Operações de Daisy Chaining
- Aliases úteis
- Instalação do Composer
- 100% de cobertura de código