PHP로 프로그램을 작성할 때 현재 페이지의 URL을 알고 싶은 경우가 많습니다. 다음은 현재 페이지 URL을 가져오는 기능과 사용 방법을 제공합니다.
예 1:
<?php // 说明:获取完整URL 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; } ?>
이 함수를 정의한 후 직접 호출할 수 있습니다.
<?php echo curPageURL(); ?>
위 함수는 브라우저 주소 표시줄에 표시되는 현재 페이지의 전체 URL을 가져올 수 있습니다. 그러나 때때로 http://www.ludou.org/hello.html?u=123과 같이 URL(? 번호 뒤의 내용)에 매개변수가 포함되는 것을 원하지 않는 경우가 있습니다. http://www.ludou.org/hello.html을 얻으려면 위의 함수를 예제 2와 같이 수정할 수 있습니다.
예 2:
<?php // 说明:获取无参数URL function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") { $pageURL .= "s"; } $pageURL .= "://"; $this_page = $_SERVER["REQUEST_URI"]; // 只取 ? 前面的内容 if (strpos($this_page, "?") !== false) { $this_pages = explode("?", $this_page); $this_page = reset($this_pages); } if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $this_page; } else { $pageURL .= $_SERVER["SERVER_NAME"] . $this_page; } return $pageURL; } ?>
물론 $_SERVER['PHP_SELF'](이 변수는 URL의 매개변수를 반환하지 않음)를 사용할 수도 있습니다.
예 3:
<?php // 说明:获取无参数URL function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") { $pageURL .= "s"; } $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":" . $_SERVER["SERVER_PORT"] . $_SERVER['PHP_SELF']; } else { $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER['PHP_SELF']; } return $pageURL; } ?>
또한 $_SERVER['REQUEST_URI'] 및 $_SERVER['REQUEST_URL']은 약간 다릅니다.
$_SERVER["REQUEST_URI"] 매개변수를 포함한 전체 경로를 반환합니다(/directory/file.ext?query=string)
$_SERVER['REQUEST_URL'] 매개변수를 제외한 파일 경로(/directory/file.ext)만 반환합니다. 이는 $_SERVER['PHP_SELF']와 유사합니다. $_SERVER['REQUEST_URL'] 일부 서버에서는 사용할 수 없습니다!
참고: URL이 다시 쓰기 규칙을 사용하는 경우 $_SERVER['PHP_SELF'] 및 $_SERVER["REQUEST_URL"]가 원하는 것을 반환하지 않을 수 있습니다
마지막 알림, $_SERVER["REQUEST_URI"]는 Apache에서만 지원됩니다. $_SERVER['REQUEST_URI'] 값을 얻으려면 다음 해결 방법을 사용할 수 있습니다.
<?php // 说明:获取 _SERVER['REQUEST_URI'] 值的通用解决方案 function request_uri() { if (isset($_SERVER['REQUEST_URI'])) { $uri = $_SERVER['REQUEST_URI']; } else { if (isset($_SERVER['argv'])) { $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['argv'][0]; } else { $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING']; } } return $uri; } ?>
두 가지 솔루션을 더 공유해 드리겠습니다.
첫 번째 방법:
<?php /** * 获取当前页面完整URL地址 */ function get_url() { $sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://'; $php_self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']; $path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : ''; $relate_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $php_self.(isset($_SERVER['QUERY_STRING']) ? '?'.$_SERVER['QUERY_STRING'] : $path_info); return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '').$relate_url; } echo get_url(); ?>
두 번째 방법:
top.location.href 顶级窗口的地址 this.location.href 当前窗口的地址
#测试网址: http://localhost/blog/testurl.php?id=5 //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br>"; #localhost //获取网页地址 echo $_SERVER['PHP_SELF']."<br>"; #/blog/testurl.php //获取网址参数 echo $_SERVER["QUERY_STRING"]."<br>"; #id=5 //获取用户代理 echo $_SERVER['HTTP_REFERER']."<br>"; //获取完整的url echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']; #http://localhost/blog/testurl.php?id=5 //包含端口号的完整url echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; #http://localhost:80/blog/testurl.php?id=5 //只取路径 $url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]; echo dirname($url); #http://localhost/blog
이 기사가 PHP 프로그래밍을 배우는 모든 사람에게 도움이 되기를 바랍니다.