我使用cURL来获取一个站点的状态,如果它是打开/关闭或重定向到另一个站点.我想把它尽量简化,但效果不太好.

<?php
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

return $httpcode;
?>

我把它包装在一个函数中.它工作正常,但性能不是最好的,因为它下载整个页面,如果我删除$output = curl_exec($ch);,它会一直返回0.

有人知道如何提高性能吗?

推荐答案

首先确保URL是否真的有效(一个字符串,不是空的,语法正确),这样可以快速判断服务器端.例如,先这样做可以节省很多时间:

if(!$url || !is_string($url) || ! preg_match('/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(\/.*)?$/i', $url)){
    return false;
}

确保只获取标题,而不是正文内容:

@curl_setopt($ch, CURLOPT_HEADER  , true);  // we want headers
@curl_setopt($ch, CURLOPT_NOBODY  , true);  // we don't need body

有关获取URL状态http代码的更多详细信息,请参阅我的另一篇帖子(这也有助于以下重定向):


总体而言:

$url = 'http://www.example.com';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);    // we want headers
curl_setopt($ch, CURLOPT_NOBODY, true);    // we don't need body
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo 'HTTP code: ' . $httpcode;

Php相关问答推荐

来自另一个表的SQL过滤器

如果活动订阅者的购物车中有订阅项目,则在WooCommerce签出中显示通知

如果再次调用SESSION_START(),会话.gc-max是否会重新启动?或者它是从第一次创建会话开始计算的?

过滤WooCommerce管理员订单列表(+HPOS)中包含其作者产品的订单

以编程方式更改新订单、已取消订单和失败订单的邮箱WooCommerce通知

在Google云存储对象上从PHP设置缓存控制TTL会更改错误的元数据

我必须对所有的SQL查询使用预准备语句吗?

是否重新排序多维数组元素以将所有子数组中的子数组移动到元素列表的底部?

当配置的URL为空时禁用Laravel Slack日志(log)记录

如何从Laravel中的Spatie\Dns\Records\A对象中提取IP地址

如何使用barryvdh/laravel-Snappy在两个打印页面上将表格分成两部分?

如何在 apache Laragon - laravel 10 中允许方法 DELETE?

execute_query 和prepare+execute 有什么区别?

从插件更改主题功能,function_exists 不起作用

为什么 debug_backtrace() 不返回任何内容?

来自 GoDaddy 的邮箱在 Gmail 中显示为via

htaccess php 文件,然后是文件夹

适当的时区处理 Laravel / Carbon

按前 3 列对二维数组中的行数据进行分组,然后用逗号连接每组中的其余列

Eloquent 的模型更新了它应该 laravel php 的更多行