php subdomain.domain предполагается как расширение на str_replace - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь удалить имя файла.extension из моего локального домена

виртуальный хост локального домена: http://cms.local/

и на str_replace я пытаюсь удалить index.php, чтобы сохранить его динамичныммоя главная задача - учесть тот факт, что filename.extension может быть чем угодно.

мой код для этого:

private static function removeFilename($url) { $file_info = pathinfo($url); return isset($file_info['extension']) ? str_replace($file_info['filename'] . "." . $file_info['extension'], "", $url) : $url; }

где $url - непарсированный URLна основе этого поста .

Учитывая, что мой URL-адрес http://cms.local/index.php, все идет гладко, но в случае, если мой URL-адрес просто http://cms.local/;без filename.extension функция str_replace удаляет cms.local, как если бы это было filename.extension, оставляя только http:///.

Заранее спасибо!

1 Ответ

0 голосов
/ 03 марта 2019
private static function removeFilename($url) {
    return substr($url, 0, strrpos($url, '/') + 1);
}

substr() Возвращает часть строки, заданную параметрами start и length.

strrpos() Найти числовую позицию последнегопоявление иглы в строке сена.

Это не будет работать, если url http://cms.local без последней косой черты.

РЕДАКТИРОВАТЬ

Если вам нужно сохранить строку запроса и удалить только имя файла + расширение:

function removeFilename($url) {
    $queryString = parse_url($url, PHP_URL_QUERY);
    return substr($url, 0, strrpos($url, '/') + 1) . "?" . $queryString;
}

parse_url() функция анализирует URL-адрес и возвращает ассоциативный массив, содержащий любой из различныхкомпоненты URL, которые присутствуют.Значения элементов массива не декодируются с помощью URL.

component

Укажите один из следующих вариантов: PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_AGMENT * PHP 10_URL_QUERY *только определенный компонент URL в виде строки (кроме случаев, когда задан PHP_URL_PORT, в этом случае возвращаемое значение будет целым числом).

РЕДАКТИРОВАТЬ 2 Окончательное решение с добавлением завершающегокосая черта, если URL http://cms.local

private static function addTrailingSlash($url) {
    $url = parse_url($url);
    if(!isset($url['path'])) $url['path'] = '/';
    $surl = $url['scheme']."://".$url['host'].$url['path'].'?'.$url['query'];
    return $surl;   
}

private static function removeFilename($url) {
    $url = addTrailingSlash($url);
    $queryString = parse_url($url, PHP_URL_QUERY);
    return substr($url, 0, strrpos($url, '/') + 1) . "?" . $queryString;
}
...