从动态获取文件夹名称 URL php
get folder name from dynamic URL php
我的URL可能在关注,
2) www.steptoinstall.com/folder1
3) www.steptoinstall.com/folder1/index.php
4) www.steptoinstall.com/folder1/folder2
5) www.steptoinstall.com/folder1/folder2/
但我想要最后一个文件夹名称,例如
1) none
2) 文件夹 1
3) 文件夹 1
4) 文件夹 2
5) 文件夹 2
6) 文件夹2
7) 文件夹 2
下面我用了,没用
<?php
$url = $_SERVER['REQUEST_URI'];
print_r(dirname($url));
?>
如何在 PHP 而不是 .htaccess 中获得此输出?
也许这对你有用
<?php
$urls = array(
'http://www.steptoinstall.com',
'http://www.steptoinstall.com/folder1',
'http://www.steptoinstall.com/folder1/folder2/index.php?id=12'
);
// The Function for your work
function getFolder($url) {
$res = parse_url($url);
if(!isset($res['path'])) {
return false;
}
$res = explode('/',$res['path']);
$out = false;
foreach($res as $p) {
if(!empty($p) && strpos($p,'.')===false) $out = $p;
}
return $out;
}
// Testing
foreach($urls as $url) {
var_dump(getFolder($url));
}
如果我正确理解你的问题,你可以使用以下自定义函数
function get_arg() {
$arguments = array();
$path = $_SERVER['REQUEST_URI'];
if (isset($path)) {
$arguments = explode('/', $path);
}
$url_len = count($arguments);
return ($arguments[$url_len - 2]) ? $arguments[$url_len - 2] : 'none';
}
希望对您有所帮助。
我使用了正则表达式:
<?php
$data = array(
'www.steptoinstall.com',
'www.steptoinstall.com/folder1',
'www.steptoinstall.com/folder1/index.php',
'www.steptoinstall.com/folder1/folder2',
'www.steptoinstall.com/folder1/folder2/',
'www.steptoinstall.com/folder1/folder2/index.php',
'www.steptoinstall.com/folder1/folder2/index.php?id=12',
);
foreach($data as $url)
{
print $url." ".get_folder($url)."\n";
}
function get_folder($url)
{
$url = preg_replace('/(.*)\/.*\..*/', '', $url);
$url = preg_replace('/\/$/', '', $url);
$matches = array();
if (preg_match('/.*\/(.*)/', $url, $matches))
{
return $matches[1];
}
return '';
}
输出:
www.steptoinstall.com
www.steptoinstall.com/folder1 folder1
www.steptoinstall.com/folder1 folder1
www.steptoinstall.com/folder1/folder2 folder2
www.steptoinstall.com/folder1/folder2 folder2
www.steptoinstall.com/folder1/folder2 folder2
www.steptoinstall.com/folder1/folder2 folder2
这里可能有一个问题:很难区分 "www.steptoinstall.com/folder1" 和 "www.steptoinstall.com/folder1/index.php" - 如果 SEF url 没有 .php 结尾。
$path = 'www.steptoinstall.com/folder1/folder2/';
$folders = explode('/', $path);
$i = 0;
foreach($folders as $folder) {
if (strpos($folder, '.') !== FALSE || empty($folder)) {
unset($folders[$i]);
}
$i++;
}
$what_we_need = end($folders);
echo $what_we_need;
很抱歉,我的第一个回答是错的,这应该可以正常工作。
我的URL可能在关注,
2) www.steptoinstall.com/folder1
3) www.steptoinstall.com/folder1/index.php
4) www.steptoinstall.com/folder1/folder2
5) www.steptoinstall.com/folder1/folder2/
但我想要最后一个文件夹名称,例如
1) none
2) 文件夹 1
3) 文件夹 1
4) 文件夹 2
5) 文件夹 2
6) 文件夹2
7) 文件夹 2
下面我用了,没用
<?php
$url = $_SERVER['REQUEST_URI'];
print_r(dirname($url));
?>
如何在 PHP 而不是 .htaccess 中获得此输出?
也许这对你有用
<?php
$urls = array(
'http://www.steptoinstall.com',
'http://www.steptoinstall.com/folder1',
'http://www.steptoinstall.com/folder1/folder2/index.php?id=12'
);
// The Function for your work
function getFolder($url) {
$res = parse_url($url);
if(!isset($res['path'])) {
return false;
}
$res = explode('/',$res['path']);
$out = false;
foreach($res as $p) {
if(!empty($p) && strpos($p,'.')===false) $out = $p;
}
return $out;
}
// Testing
foreach($urls as $url) {
var_dump(getFolder($url));
}
如果我正确理解你的问题,你可以使用以下自定义函数
function get_arg() {
$arguments = array();
$path = $_SERVER['REQUEST_URI'];
if (isset($path)) {
$arguments = explode('/', $path);
}
$url_len = count($arguments);
return ($arguments[$url_len - 2]) ? $arguments[$url_len - 2] : 'none';
}
希望对您有所帮助。
我使用了正则表达式:
<?php
$data = array(
'www.steptoinstall.com',
'www.steptoinstall.com/folder1',
'www.steptoinstall.com/folder1/index.php',
'www.steptoinstall.com/folder1/folder2',
'www.steptoinstall.com/folder1/folder2/',
'www.steptoinstall.com/folder1/folder2/index.php',
'www.steptoinstall.com/folder1/folder2/index.php?id=12',
);
foreach($data as $url)
{
print $url." ".get_folder($url)."\n";
}
function get_folder($url)
{
$url = preg_replace('/(.*)\/.*\..*/', '', $url);
$url = preg_replace('/\/$/', '', $url);
$matches = array();
if (preg_match('/.*\/(.*)/', $url, $matches))
{
return $matches[1];
}
return '';
}
输出:
www.steptoinstall.com
www.steptoinstall.com/folder1 folder1
www.steptoinstall.com/folder1 folder1
www.steptoinstall.com/folder1/folder2 folder2
www.steptoinstall.com/folder1/folder2 folder2
www.steptoinstall.com/folder1/folder2 folder2
www.steptoinstall.com/folder1/folder2 folder2
这里可能有一个问题:很难区分 "www.steptoinstall.com/folder1" 和 "www.steptoinstall.com/folder1/index.php" - 如果 SEF url 没有 .php 结尾。
$path = 'www.steptoinstall.com/folder1/folder2/';
$folders = explode('/', $path);
$i = 0;
foreach($folders as $folder) {
if (strpos($folder, '.') !== FALSE || empty($folder)) {
unset($folders[$i]);
}
$i++;
}
$what_we_need = end($folders);
echo $what_we_need;
很抱歉,我的第一个回答是错的,这应该可以正常工作。