get_headers()
会发出警告。如,
get_headers('http://nonexistingrubbish-url.com');
警告:get_headers():php_network_getaddresses:getaddrinfo失败:没有这样的主机已知
是否可以使用@
?
我的主要目标是检查网址是否存在,但我不想使用@
抑制器。
答案 0 :(得分:2)
您可以使用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";
}
答案 1 :(得分:1)
我认为您希望以不会干扰error_reporting
和log_errors
指令的方式处理它。我能想到的唯一方法就是写custom error handler。这是PhpMailer库中的一个例子:
/**
* Reports an error number and string.
*
* @param int $errno The error number returned by PHP
* @param string $errmsg The error message returned by PHP
* @param string $errfile The file the error occurred in
* @param int $errline The line number the error occurred on
*/
protected function errorHandler($errno, $errmsg, $errfile = '', $errline = 0)
{
$notice = 'Connection failed.';
$this->setError(
$notice,
$errmsg,
(string) $errno
);
$this->edebug(
"$notice Error #$errno: $errmsg [$errfile line $errline]",
self::DEBUG_CONNECTION
);
}
// Begin encrypted connection
set_error_handler([$this, 'errorHandler']);
$crypto_ok = stream_socket_enable_crypto(
$this->smtp_conn,
true,
$crypto_method
);
restore_error_handler();
如果有必要,可以在set_error_handler()
调用和处理程序代码本身中进行微调。这是Guzzle使用匿名函数的另一个例子:
$errors = null;
set_error_handler(function ($_, $msg, $file, $line) use (&$errors) {
$errors[] = [
'message' => $msg,
'file' => $file,
'line' => $line
];
return true;
});
$resource = $callback();
restore_error_handler();
答案 2 :(得分:0)
在功能之前更改错误报告的级别,在功能之后将其还原。
// 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);
为什么这会得到-1?此代码适用于[PHP 5.6.3]。试试吧。
代码示例(复制,上传和欣赏):
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!";
此代码仅输出与第5行相关的两条错误消息。 它还将在下面输出&#34; done&#34;。