Вы можете использовать
echo 'wahegru.com mail is handled by 1 ASPMX.L.GOOGLE.com. wahegru.com mail is handled by 10 ALT4.ASPMX.L.GOOGLE.com. wahegru.com mail is handled by 5 ALT1.ASPMX.L.GOOGLE.com. wahegru.com mail is handled by 10 ALT3.ASPMX.L.GOOGLE.com. wahegru.com mail is handled by 5 ALT2.ASPMX.L.GOOGLE.com.' | \
grep -o '10 [^ .]*\(\.[^ .][^ .]*\)*' | head -1 | sed 's/^10 //'
. См. Демонстрацию grep
онлайн
Подробности
o
извлекает совпадения, найденные во входной строке 10 [^ .]*\(\.[^ .][^ .]*\)*
совпадения 10
- литеральная подстрока [^ .]*
- 0+ символов кроме пробел и .
\(\.[^ .][^ .]*\)*
- 0 или более повторений \.
- точка li> [^ .][^ .]*
- 1 или более символов, отличных от [ 1110] и пробел li> ul> head -1
- получает первое совпадение sed 's/^10 //'
удаляет исходную подстроку 10
. [ 1123] Установить и восстановить обработчик ошибок
Одна из возможностей - установить собственный обработчик ошибок перед вызовом и восстановить предыдущий обработчик ошибок позже с помощью restore_error_handler ()
.
set_error_handler(function() { /* ignore errors */ });
dns_get_record();
restore_error_handler();
Вы могли бы развить эту идею и написать повторно используемый обработчик ошибок, который регистрирует ошибки для вас.
set_error_handler([$logger, 'onSilencedError']);
dns_get_record();
restore_error_handler();
Преобразование ошибок в исключения
Вы можете использовать set_error_handler ()
и класс ErrorException
, чтобы превратить все ошибки php в исключения.
set_error_handler(function($errno, $errstr, $errfile, $errline, $errcontext) {
// error was suppressed with the @-operator
if (0 === error_reporting()) {
return false;
}
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
});
try {
dns_get_record();
} catch (ErrorException $e) {
// ...
}
при использовании собственного обработчика ошибок важно отметить, что он будет обходить параметр error_reporting
и передавать все ошибки (уведомления, предупреждения и т. д.) в обработчик ошибок. Вы можете установить второй аргумент в set_error_handler ()
, чтобы определить, какие типы ошибок вы хотите получать, или получить доступ к текущим параметрам, используя ... = error_reporting ()
внутри обработчика ошибок.
Подавление предупреждения
Другая возможность - подавить вызов с помощью оператора @ и впоследствии проверить возвращаемое значение dns_get_record ()
. Но я бы не советовал это , поскольку ошибки / предупреждения запускаются для обработки, а не для подавления.
Подавление предупреждения
Другая возможность - подавить вызов с помощью оператора @ и впоследствии проверить возвращаемое значение dns_get_record ()
. Но я бы не советовал это , поскольку ошибки / предупреждения запускаются для обработки, а не для подавления.
Подавление предупреждения
Другая возможность - подавить вызов с помощью оператора @ и впоследствии проверить возвращаемое значение dns_get_record ()
. Но я бы не советовал это , поскольку ошибки / предупреждения запускаются для обработки, а не для подавления.
FolderStructure
index.php //Script File
logs //Folder for log Every warning and Errors
CustomException.php //Custom exception File
CustomException.php
/**
* Custom error handler
*/
function handleError($code, $description, $file = null, $line = null, $context = null) {
$displayErrors = ini_get("display_errors");;
$displayErrors = strtolower($displayErrors);
if (error_reporting() === 0 || $displayErrors === "on") {
return false;
}
list($error, $log) = mapErrorCode($code);
$data = array(
'timestamp' => date("Y-m-d H:i:s:u", time()),
'level' => $log,
'code' => $code,
'type' => $error,
'description' => $description,
'file' => $file,
'line' => $line,
'context' => $context,
'path' => $file,
'message' => $error . ' (' . $code . '): ' . $description . ' in [' . $file . ', line ' . $line . ']'
);
$data = array_map('htmlentities',$data);
return fileLog(json_encode($data));
}
/**
* This method is used to write data in file
* @param mixed $logData
* @param string $fileName
* @return boolean
*/
function fileLog($logData, $fileName = ERROR_LOG_FILE) {
$fh = fopen($fileName, 'a+');
if (is_array($logData)) {
$logData = print_r($logData, 1);
}
$status = fwrite($fh, $logData . "\n");
fclose($fh);
// $file = file_get_contents($filename);
// $content = '[' . $file .']';
// file_put_contents($content);
return ($status) ? true : false;
}
/**
* Map an error code into an Error word, and log location.
*
* @param int $code Error code to map
* @return array Array of error word, and log location.
*/
function mapErrorCode($code) {
$error = $log = null;
switch ($code) {
case E_PARSE:
case E_ERROR:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
$error = 'Fatal Error';
$log = LOG_ERR;
break;
case E_WARNING:
case E_USER_WARNING:
case E_COMPILE_WARNING:
case E_RECOVERABLE_ERROR:
$error = 'Warning';
$log = LOG_WARNING;
break;
case E_NOTICE:
case E_USER_NOTICE:
$error = 'Notice';
$log = LOG_NOTICE;
break;
case E_STRICT:
$error = 'Strict';
$log = LOG_NOTICE;
break;
case E_DEPRECATED:
case E_USER_DEPRECATED:
$error = 'Deprecated';
$log = LOG_NOTICE;
break;
default :
break;
}
return array($error, $log);
}
//calling custom error handler
set_error_handler("handleError");
просто включают выше файла в Ваш файл сценария как это
index.php
error_reporting(E_ALL);
ini_set('display_errors', 'off');
define('ERROR_LOG_FILE', 'logs/app_errors.log');
include_once 'CustomException.php';
echo $a; // here undefined variable warning will be logged into logs/app_errors.log
Вы не можете определять полнотекстовые индексы (или любые другие индексы) для нескольких таблиц в MySQL. Каждое определение индекса ссылается только на одну таблицу. Все столбцы в заданном полнотекстовом индексе должны быть из одной и той же таблицы.
Столбцы, названные в качестве аргументов функции MATCH ()
, должны быть частью одного полнотекстового индекса. Вы не можете использовать один вызов MATCH ()
для поиска по всем столбцам, которые являются частью всех полнотекстовых индексов в вашей базе данных.
Полнотекстовые индексы только индексируют столбцы, определенные с помощью CHAR
, VARCHAR
и TEXT
типы данных.
Если dns_get_record ()
завершается неудачно, он должен вернуть FALSE
, поэтому вы можете подавить предупреждение с помощью @
, а затем проверить возвращаемое значение.