试图获得相对路径

时间:2013-07-10 14:05:35

标签: php

我正在努力做到这一点并且遇到很多问题。我知道我是一个完整的PHP菜鸟,但我真的需要弄清楚,所以我很感激你的帮助。

我正在尝试将“已更正”的网址传递到我网站上的小部件,因此如果人们点击按钮,他们将以PDF格式下载他们所在的网页。

我的网站使用友好网址http://www.sample.com/friendly/url/this/thing.html

我需要做的是获取当前网址并将友好更改为pdf并将结果放入按钮。

我想出的是#failsauce在#shitsandch上的#filetofpain上淋漓#/ p>

<?php
function curPageURL() {
$isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on");
$port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] !=          "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443")));
$port = ($port) ? ':'.$_SERVER["SERVER_PORT"] : '';
$url = ($isHTTPS ? 'https://' :    'http://').$_SERVER["SERVER_NAME"].$port.$_SERVER["REQUEST_URI"];
return $url;
}

echo curPageURL();
?>

这会产生我的网址。

我甚至没有更换网址部分,因为我无法弄清楚如何获取网址或将其分解。很遗憾。

就像一个带着锡杯和破布的乞丐,我求救:)

我需要做的是将网址分解成碎片......

如果它返回     “www.mysite.com/01/05/2013/9013/your-mom-wears-combat-boots/”     我需要将其更改为:     “www.mysite.com/pdf/9013/your-mom-wears-combat-boots.pdf”

(可能在http://前面的帖子以及发布机制这里的东西我发布链接而且我没有声誉所以它不会让我把完整的http:// www mysite com放在实施例)

3 个答案:

答案 0 :(得分:3)

您正在对echo echo $current_url;

进行双倍echo $current_url;更改

答案 1 :(得分:0)

您可以使用$_SERVER["HTTP_HOST"]$_SERVER["REQUEST_URI"]来获取请求的网址。

答案 2 :(得分:0)

我还没有尝试过你的代码,但它似乎已经有了一个双echo行..

无论如何,我想给你一个我喜欢使用的非常简单的方法:

function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
         $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
    } 
    else {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}

这个功能的作用是每当你调用curPageURL()时,你会得到当前页面的网址,就像在网址栏中看到的那样。你可以随心所欲地使用它。

我希望这能解决你的问题:)

编辑:

要使用此功能获取网址,而不是将结尾从.html更改为.pdf,您需要做的就是:

$url = curPageURL(); // gets back www.sample.com/page.html
$newurl = str_replace(".html", ".pdf", $url); // changes url to www.sample.com/page.pdf

此代码使用答案顶部的功能

编辑2:

如果它返回您:www.mysite.com/01/05/2013/9013/your-mom-wears-combat-boots/ 比你需要做的更多:

$url = curPageURL(); // gets back www.sample.com/page/
$newurl = substr_replace($url, "", -1) // changes url to www.sample.com/page
$newurl .= ".pdf" // adds the .pdf to the url so you get www.sample.com/page.pdf

编辑3:

首先 - 很高兴你使用wordpress:)

现在,wordpress codex让它变得更容易,实际上更容易实现: 为此,我们需要进行一些更改,同时更改curPageURL函数。

function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
         $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"];
    } 
    else {
        $pageURL .= $_SERVER["SERVER_NAME"];
    }
    return $pageURL;
}

我将解释:
$_SERVER["SERVER_NAME"]为我们提供了域名,例如domain.com
$_SERVER["REQUEST_URI"]返回域之后的所有内容,即路径。 在我们的例子中,例如:01/03/2013/9013/page
所以现在curPageURL函数只返回域名。

现在让我们开始研究下一步:

 $url = curPageURL(); // gets back http://www.sample.com
 $url .= "/pdf"; // we add the /pdf to the url so it is now: http://www.sample.com/pdf
 $postid = get_the_ID(); // gives us the post ID. for example 9013
 $url .= "/" . $postid; // now we take the post ID and add it to the url: http://www.sample.com/pdf/9013
 $the_post = get_post($postid); // get the post by the ID
 $post_slug = $the_post['post_name']; // get the slug of the post 
 $url .= "/" . $post_slug; // adds the slug to the url: http://www.sample.com/pdf/9013/your_mom_wears_combat_boots
 $url .= ".pdf"; // finally add the pdf to the url so now you get: http://www.sample.com/pdf/9013/your_mom_wears_combat_boots.pdf

这里没有评论:

 $url = curPageURL(); 
 $url .= "/pdf";
 $postid = get_the_ID();
 $url .= "/" . $postid;
 $the_post = get_post($postid);
 $post_slug = $the_post['post_name'];
 $url .= "/" . $post_slug;
 $url .= ".pdf";

如果你想最小化线条:

 $url = curPageURL() . "/pdf/" . get_the_ID(); // url is now: www.domain.com/pdf/postid
 $the_post = get_post(get_the_ID());
 $url .= "/" . $the_post['post_name'] . ".pdf"; //url is now: www.domain.com/pdf/postid/post_slug.pdf

现在您可以通过echo

echo $url;添加网址

更新,最后编辑(4):

我犯了一个错误,关于获得slu .. 我使用了$the_post = get_post(get_the_ID());而不是拿了slug,名字:$the_post['post_name']

这是不对的。

取出slu out的最佳方法是运行代码:
$post_slug = basename(get_permalink());

所以这有点像它所希望看的那样:

 $url = curPageURL() . "/pdf/" . get_the_ID(); // url is now: www.domain.com/pdf/postid
 $post_slug = basename(get_permalink()); //gets the post slug
 $url .= "/" . $post_slug . ".pdf"; //url is now: www.domain.com/pdf/postid/post_slug.pdf

我们可以让它更小化:

 $url = curPageURL() ."/pdf/". get_the_ID() ."/". basename(get_permalink()) .".pdf"; 

现在你可以echo $url;

不要忘记:此功能需要在page.phpsingle.php中才能知道帖子的帖子和帖子的ID是什么。
行:$url = curPageURL() ."/pdf/". get_the_ID() ."/". basename(get_permalink()) .".pdf";需要在循环中:<?php if (have_posts()) : while (have_posts()) : the_post(); ?>或您使用的任何其他循环。

这应该做的工作:)