2013-03-22 41 views
0

当我使用requestAction($ url)时,当我的应用程序中请求的url不存在时,我尝试捕获错误; 与try-catch块,请求的错误URL继续加载;当url不存在时CakePHP requestAction捕获错误

请告诉我,如果有其他的解决办法,以测试是否存在的URL,或者如果在文件中CakePHP的目录存在(我的网址可以由插件名称)。

我的实际代码:

$url = $appliUrl . $cron['Cron']['plugin'] . '/'. $cron['Cron']['controller'] . '/' . $cron['Cron']['action']; 
if (!empty($cron['Cron']['params'])) { 
    $params = explode(',', $cron['Cron']['params']); 
    foreach ($params as $param) 
     $url .= '/' . $param; 
} 
try{ 
    $output = $this->requestAction($url); 
}catch (Exception $e){ 
    $output = "error in the url : ".$url; 
} 
+0

什么是你期待requestAction返回?如果它不存在,它将返回一个404页面,这仍然是一个有效的请求。 – 2013-03-22 13:44:29

回答

1

您可以使用各种方法来做到这一点。在这个例子中,使用cURL。

function url_exists($url) { 
    if (!$fp = curl_init($url)) return false; 
    return true; 
} 

然后你可以将你的$输出包裹在if块中检查url。

if (url_exists($url)) { 
    $output = $this->requestAction($url); 
} 

编辑

确保你把函数在一个lib或引导文件进行访问。不要只是在你的控制器一样,:)

ANOTHER编辑

<?php 
$ch = curl_init('http://yoururl/'); 
curl_setopt($ch, CURLOPT_NOBODY, 1); 
$c = curl_exec($ch); 
echo curl_getinfo($ch, CURLINFO_HTTP_CODE); 
+0

这个功能总是让我真实。也许是因为cakephp生成错误的HTML页面?! 任何其他解决方案? – FAjir 2013-03-22 16:00:33

+0

检查您从其获取的标题响应。你在寻找404错误吗? – 2013-03-22 18:07:00

+0

是的,我想抓到404错误,也许我必须在requestAction之前发送头请求?任何想法? – FAjir 2013-03-26 14:37:37