@GuitarFan

Как сделать чтобы скрипт продолжал выполнятся не смотря на ошибки?

Допустим мой скрипт выключается из-за ошибок:

Warning: fsockopen() [function.fsockopen]: SSL operation failed with code 1. OpenSSL Error messages: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol in Z:\home\bla.my\www\index.php

Warning: fsockopen() [function.fsockopen]: Failed to enable crypto in Z:\home\bla.my\www\index.php

Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://jshop.cc:443 (Unknown error) in Z:\home\bla.my\www\index.php

Что именно они значат не понятно, ошибку можно искать долго. Как сделать, чтобы скрипт не останавливался а продолжал работать?
  • Вопрос задан
  • 4937 просмотров
Пригласить эксперта
Ответы на вопрос 5
begemot_sun
@begemot_sun
Программист в душе.
1. Обрабатывать нужные ошибки.
2. Непонятно, что может наработать скрипт который предполагает установку соединения, но соединение не устанавливается. И если нет обработки данного события, то что может поделать скрипт в данном случае --- конечно только остановится, и это правильное поведение.
Ответ написан
Комментировать
Во первых,

ssl://jshop.cc:443

читаем документацию

Если установлена поддержка OpenSSL, можно использовать SSL или TLS протоколы соединений поверх TCP/IP при подключении к удаленному хосту.

И здесь про установку
www.php.net/manual/ru/openssl.installation.php

Во-вторых,

А что дальше в скрипте, т.е. дальнейшая работа, что, не зависит от выполнения fsockopen?

В любом случае, есть несколько вариантов:

1. Тупо не выводить ошибку, но знать о ней
if ( ($handle = @fsockopen('ssl://jshop.cc',443,$url,$errno,$errstr)) === false)
{
    //Здесь код в случае возникновения ошибки, ее описание лежит в $errstr
}

2. Переназначить обработчик ошибок для обработки Exception с помощью функции set_error_handler

class ErrorException extends Exception{}
        function myErrorHandler($errno = null, $errstr = null, $errfile = null, $errline = null)
        {
            throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
        }
        set_error_handler('myErrorHandler');

Это позволит не прерывать работу программы, а обработать нужный кусок кода

try
{
//Вызов fsockopen
}
catch(ErrorException $e)
{
//Тут например логирование $e->getMessage();
}
Ответ написан
Комментировать
@Wol_fi
php, js, mysql, highload
Комментировать
вообще-то из за warning ошибок выполнение скрипта не останавливается, другое дело что они отображаются на странице
Ответ написан
Комментировать
m0Hze
@m0Hze
Вахуе. Кардеры вообще не паляца, скупают картон и задают вопросы, дожили.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы