Je souhaite imprimer le chemin actuel de l'URL, mais mon code ne fonctionne pas correctement.
Je l'utilise dans mon fichier.php
echo "http://".$_SERVER['HTTP_Host'].$_SERVER['SCRIPT_NAME'];
Quand j'ouvre l'URL http://sub.mydomain.com/file.php il semble bien fonctionner, et il imprime "http://sub.mydomain.com/file.php"
Mais si je supprime l'extension .php pour que l'url soit http://sub.mydomain.com/file à la place , il imprime "http://sub.mydomain.com/sub/file.php"
ce qui est faux.
Il imprime le sous-domaine deux fois, et je ne sais pas pourquoi?
Dans mon fichier .htaccess, j'ai une réécriture qui permet de supprimer les extensions .php.
Quelqu'un qui peut/veut m'aider s'il vous plaît? :)
Vous avez besoin $_SERVER['REQUEST_URI']
au lieu de $_SERVER['SCRIPT_NAME']
, cos $_SERVER['SCRIPT_NAME']
vous donnera toujours le fichier qui fonctionne actuellement.
De manuel:
SCRIPT_NAME: contient le chemin du script actuel. Ceci est utile pour les pages qui doivent se désigner. Le
__FILE__
constante contient le chemin d'accès complet et le nom du fichier actuel (inclus). .
Je suppose que cela vous aide à obtenir l'URL actuelle pleinement.
echo 'http://'. $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
Avis: ne comptez pas sur les clients HTTP_Host
, UTILISATION SERVER_NAME
AU LIEU! VOIR: Quelle est la différence entre HTTP_Host et SERVER_NAME en PHP?
Vous devez filtrer (désinfecter) $_SERVER['REQUEST_URI']
si vous l’utilisez n'importe où (pour imprimer ou stocker dans une base de données), cela n’est pas sûr.
// ie: this could be harmfull
/user?id=123%00%27<script...
Par conséquent, filtrez toujours les entrées utilisateur avant de les utiliser. Utilisez au moins htmlspecialchars
, htmlentities
, strip_tags
etc..
Ou quelque chose comme ça;
function get_current_url($strip = true) {
// static sanitizer, 'cos function could be called many times
static $filter; if ($filter == null) {
$filter = function($input) use($strip) {
$input = trim($input);
if ($input == '/') {
return $input;
}
// add more chars if needed
$input = str_ireplace(["\0", '%00', "\x0a", '%0a', "\x1a", '%1a'], '',
rawurldecode($input));
// remove markup stuff
if ($strip) {
$input = strip_tags($input);
}
// or any encoding you use instead of utf-8
$input = htmlspecialchars($input, ENT_QUOTES, 'utf-8');
return $input;
};
$scheme = isset($_SERVER['REQUEST_SCHEME']) ? $_SERVER['REQUEST_SCHEME']
: ('http'. (($_SERVER['SERVER_PORT'] == '443') ? 's' : ''));
$Host = $_SERVER['SERVER_NAME'];
$port = ($_SERVER['SERVER_PORT'] != '80' && $scheme != 'https')
? (':'. $_SERVER['SERVER_PORT']) : '';
}
}
return sprintf('%s://%s%s%s', $scheme, $Host, $port, $filter($_SERVER['REQUEST_URI']));
}
$main_folder = str_replace('\\','/',dirname(__FILE__) );
$document_root = str_replace('\\','/',$_SERVER['DOCUMENT_ROOT'] );
$main_folder = str_replace( $document_root, '', $main_folder);
if( $main_folder ) {
$current_url = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['SERVER_NAME']. '/' . ltrim( $main_folder, '/' ) . '/';
} else {
$current_url = $_SERVER['REQUEST_SCHEME'].'://'.rtrim( $_SERVER['SERVER_NAME'], '/'). '/';
}