Escape — ошибка экранирования PHP @ для производства

Я хочу избежать ошибки, сгенерированной fsockopen и это работает так.

if ($fp = @fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)) { //... }

но я пробовал другие вещи, чтобы избежать @ и мне не удалось.

Есть ли код, который я могу использовать, который эквивалентен этому?

Я попробовал также что-то вроде этого только для целей тестирования:

try{
if ($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)) {
/...
}
//..
} catch (Exception $e){
echo 'Error';
}

Это не работает.
Warning: fsockopen(): unable to connect to localhost:79 (A connection
attempt failed because the connected party did not properly respond after a period of time or established
connection failed because connected host has failed to respond.

0

Решение

использование set_error_handler() преобразовать все ошибки в исключение, которое вы можете отловить впоследствии:

set_error_handler(function($errno, $errstr, $errfile, $errline, array $errcontext) {
if(0 === error_reporting())
return false;

throw new PHPException($errno, $errstr, $errfile, $errline, $errcontext);
});

Так что теперь вы можете поймать ошибку PHP:

try {
if ($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)) {
//...
}
//..
} catch (\Exception $e){
echo 'Connection failed: ' , $e->getMessage();
}

echo 'Don\'t worry... go on!';
0

Другие решения

Вы можете отключить уведомления и предупреждения в производственных системах (вместо записи в журнал):

error_reporting(E_ERROR);

В средах разработки вы, вероятно, захотите, чтобы все ошибки, уведомления и предупреждения касались:

error_reporting(E_ALL);

проверьте уровни сообщений об ошибках здесь: http://php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

РЕДАКТИРОВАТЬ: Чтобы проверить на наличие ошибок:

$fp = @fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
...
}

Я думаю, что если вы работаете со сценариями сбоев, то сознательное подавление предупреждения с помощью @ — это нормально.

-1

По вопросам рекламы [email protected]