【问题标题】:php remove filename from url if exists [duplicate]php如果存在则从url中删除文件名[重复]
【发布时间】:2015-10-08 18:36:52
【问题描述】:

您好,我想从我的网址中删除所有文件名:

http://website.com/folder1/folder2/filename.php

这是我尝试过的:

$file_info = pathinfo('http://website.com/folder1/folder2/filename.php');
echo $file_info['dirname'];

输出http://website.com/folder1/folder2/ 这是我想要的,但是当我尝试这个时:

   $file_info = pathinfo('http://website.com/folder1/folder2/');
    echo $file_info['dirname'];

它输出http://website.com/folder1/
现在我想要的是,如果 url 包含一个文件名,那么它会被删除,如果 url 只有文件夹,那么什么都不做。
(我不想为此使用 .htaccess)

【问题讨论】:

  • 我看不出这有什么意义。网址来自哪里?它是您要发送的链接吗?换句话说,这里的“我的网址”是什么意思?
  • 我的网站收到很多引荐网址,所以我想从中删除文件名
  • 如果有些没有文件名,那没关系,我不会对它们做任何事情,但如果有些最后有文件名,我想删除它们
  • 我觉得一切都清楚了
  • 您可以在将字符串传递给路径信息之前将其附加到字符串:$file_info = pathinfo($path . 'suffix'); 这将使dirname 正常工作。

标签: php preg-replace pathinfo


【解决方案1】:

这是不可能的,因为您无法检查 stackoverflow.de/post.new/tero.php 是文件名还是文件夹...

在这种情况下,使用 checkup 来检查给定路径是否为 url

【讨论】:

    【解决方案2】:

    假设所有文件名都有扩展名:

    $url1 = 'http://website.com/folder1/folder2/filename.php';
    $url2 = 'http://website.com/folder1/folder2/';
    
    echo removeFilename($url1) . "\n";
    echo removeFilename($url2) . "\n";
    
    function removeFilename($url)
    {
        $file_info = pathinfo($url);
        return isset($file_info['extension'])
            ? str_replace($file_info['filename'] . "." . $file_info['extension'], "", $url)
            : $url;
    }
    

    【讨论】:

    • 这就是我要找的东西,非常感谢。
    【解决方案3】:

    你可以试试dirname()

    echo dirname('http://website.com/folder1/folder2/filename.php');
    

    【讨论】:

    • no dirname 只有在文件名存在时才会删除文件名,但如果文件名在 url 上不存在,它也会删除子目录
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2023-04-05
    • 2013-11-16
    • 2017-07-02
    • 2017-03-05
    相关资源
    最近更新 更多