Php 如何在不使用@

Php 如何在不使用@,php,Php,get_headers()如果正在检查的URL无效,则抛出警告。例如: get_头('http://nonexistingrubbish-url.com'); 警告:get_headers():php_network_getaddresses:getaddrinfo失败:未知此类主机 是否可以使用@抑制此错误 我的主要目标是检查URL是否存在,但我不想使用@抑制器。您可以使用curl进行检查,它不会返回任何警告。如果您使用'CURLOPT_NOBODY',则不会尝试下载整个页面 <?php

get_headers()
如果正在检查的URL无效,则抛出警告。例如:

get_头('http://nonexistingrubbish-url.com');

警告:get_headers():php_network_getaddresses:getaddrinfo失败:未知此类主机

是否可以使用
@
抑制此错误


我的主要目标是检查URL是否存在,但我不想使用
@
抑制器。

您可以使用curl进行检查,它不会返回任何警告。如果您使用'CURLOPT_NOBODY',则不会尝试下载整个页面

<?php
$url = "http://nonexistingrubbish-url.com";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_NOBODY, true);
$result = curl_exec($curl);
if ($result !== false) {
    $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    if ($statusCode == 404) {
        echo "URL Not Exists";
    } else {
        echo "URL Exists";
    }
} else {
    echo "URL not Exists";
}

您可以使用curl进行检查,它不会返回任何警告。如果您使用'CURLOPT_NOBODY',则不会尝试下载整个页面

<?php
$url = "http://nonexistingrubbish-url.com";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_NOBODY, true);
$result = curl_exec($curl);
if ($result !== false) {
    $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    if ($statusCode == 404) {
        echo "URL Not Exists";
    } else {
        echo "URL Exists";
    }
} else {
    echo "URL not Exists";
}

我假设您希望它的处理方式不会干扰您的
错误报告
日志错误
指令。我能想到的唯一办法就是写一封信。以下是PhpMailer库中的一个示例:

:

如有必要,在
set\u error\u handler()
调用和处理程序代码本身中总会有额外的内容需要微调。下面是Guzzle使用匿名函数的另一个示例:


我假设您希望它的处理方式不会干扰
错误报告
日志错误
指令。我能想到的唯一办法就是写一封信。以下是PhpMailer库中的一个示例:

:

如有必要,在
set\u error\u handler()
调用和处理程序代码本身中总会有额外的内容需要微调。下面是Guzzle使用匿名函数的另一个示例:


在函数之前更改错误报告级别,在函数之后将其还原

// Show all errors except warnings. 
error_reporting(E_ALL & ~E_WARNING);
get_headers('http://nonexistingrubbish-url.com');
// revert to the above error reporting level. 
error_reporting(E_ALL);

为什么会得到a-1?这段代码[在PHP5.6.3上]有效。试试看

代码示例(复制、上载和享受):

ini\u集(“显示错误”,1);
错误报告(E_全部和~E_警告);
获取标题('http://nonexistingrubbish-url.com'); 
错误报告(E_全部);
获取标题('http://nonexistingrubbish-url.com'); 
打印“

完成!”;
此代码将仅输出两条与第5行相关的错误消息。
它还将在下面输出“完成”

在函数之前更改错误报告级别,在函数之后恢复该级别

// Show all errors except warnings. 
error_reporting(E_ALL & ~E_WARNING);
get_headers('http://nonexistingrubbish-url.com');
// revert to the above error reporting level. 
error_reporting(E_ALL);

为什么会得到a-1?这段代码[在PHP5.6.3上]有效。试试看

代码示例(复制、上载和享受):

ini\u集(“显示错误”,1);
错误报告(E_全部和~E_警告);
获取标题('http://nonexistingrubbish-url.com'); 
错误报告(E_全部);
获取标题('http://nonexistingrubbish-url.com'); 
打印“

完成!”;
此代码将仅输出两条与第5行相关的错误消息。
它还将在下面输出“完成”

您可以使用错误报告(E|u error | E|u PARSE)禁用php警告;或错误报告(0);所以你不需要使用@符号。要使用curl,您可以执行类似curl\u getinfo($curl,CURLINFO\u HTTP\u代码)的操作;与
CURLOPT_标题
CURLOPT_返回传输
选项一起使用。(可能是
CURLOPT_NOBODY
这取决于您想要什么。)看看您可以通过使用错误报告(E_error | E_PARSE)禁用php警告;或错误报告(0);所以你不需要使用@符号。要使用curl,您可以执行类似curl\u getinfo($curl,CURLINFO\u HTTP\u代码)的操作;与
CURLOPT_标题
CURLOPT_返回传输
选项一起使用。(可能是
CURLOPT_NOBODY
取决于你想要什么。)看看IMO,这是最好的方法。也许它在最近的版本中有所改变,但是。IMO这是最好的方法。也许它在最近的版本中有所改变,但是。
// Show all errors except warnings. 
error_reporting(E_ALL & ~E_WARNING);
get_headers('http://nonexistingrubbish-url.com');
// revert to the above error reporting level. 
error_reporting(E_ALL);
ini_set("display_errors",1); 
error_reporting(E_ALL & ~E_WARNING);
get_headers('http://nonexistingrubbish-url.com'); 
error_reporting(E_ALL);
get_headers('http://nonexistingrubbish-url.com'); 
print "<br><Br>done!";