Php 如何通过Laravel检查URL是否存在?
我确实看到了这个答案:Php 如何通过Laravel检查URL是否存在?,php,url,laravel,Php,Url,Laravel,我确实看到了这个答案: 但是,我想知道Laravel中是否存在一种方法,可以检查URL是否存在(不是404)?我假设您想检查是否存在与特定URL匹配的路由 $routes = Route::getRoutes(); $request = Request::create('the/url/you/want/to/check'); try { $routes->match($request); // route exists } catch (\Symfony\Compone
但是,我想知道Laravel中是否存在一种方法,可以检查URL是否存在(不是404)?我假设您想检查是否存在与特定URL匹配的路由
$routes = Route::getRoutes();
$request = Request::create('the/url/you/want/to/check');
try {
$routes->match($request);
// route exists
}
catch (\Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e){
// route doesn't exist
}
试试这个功能
function checkRoute($route) {
$routes = \Route::getRoutes()->getRoutes();
foreach($routes as $r){
if($r->getUri() == $route){
return true;
}
}
return false;
}
不是特别的laravel函数,但是你可以试试这个
function urlExists($url = NULL)
{
if ($url == NULL) return false;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return ($httpcode >= 200 && $httpcode < 300) ? true : false;
}
函数urlExists($url=NULL)
{
如果($url==NULL),则返回false;
$ch=curl\u init($url);
curl_setopt($ch,CURLOPT_超时,5);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$data=curl\u exec($ch);
$httpcode=curl\u getinfo($ch,CURLINFO\u HTTP\u代码);
卷曲关闭($ch);
返回($httpcode>=200&$httpcode<300)?真:假;
}
既然您提到要检查外部URL(例如
https://google.com
),而不是应用程序中的路由,您可以使用Laravel中的Httpfacade():
你想检查laravel的外部url还是内部路由?@DouglasDC3:我不知道有什么不同。我想检查一个外部url。最好的方法是在你添加的另一篇文章中描述的。@DouglasDC3:那么你是说没有办法通过Laravel做到这一点?据我所知没有。我已经看过了,laravel没有提供这种功能。有没有办法通过laravel检查外部URL?OP提到他想检查外部URL。他没有在应用程序中说明路由。出于某种原因,即使路由不存在,我也无法获得
NotFoundHttpException
。我得到了一个uri为:{fallbackpaceholder}
的路由对象。有什么想法吗?这对路由参数不起作用-使用$routes->match()
可以解决这个问题。
use Illuminate\Support\Facades\Http;
$response = Http::get('https://google.com');
if( $response->successful() ) {
// Do something ...
}