Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация error escaping 
:(
    Опции темы
alexandra231525480
Дата 10.4.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 2.9.2006

Репутация: нет
Всего: нет



привет! как можно игнорить варнинги помимо @my_func() ? так как такая конструкция нехило тормозит код  она делает такое:
Код

<?php
$old = ini_set('error_reporting', E_NONE);
my_func();
ini_set('error_reporting', $old);

PM MAIL   Вверх
bars80080
Дата 10.4.2008, 11:58 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



можно исправить ошибки и никаких варингов не будет вообще
PM MAIL WWW   Вверх
alexandra231525480
Дата 10.4.2008, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 2.9.2006

Репутация: нет
Всего: нет



умно. только это не для кода, а для тестов
PM MAIL   Вверх
Fortop
Дата 10.4.2008, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



не понял. Зачем?
И что собственно нужно сделать?

Добавлено через 57 секунд
Почему не написать свой обработчик ошибок?

Это сообщение отредактировал(а) Fortop - 10.4.2008, 12:13


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
bars80080
Дата 10.4.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



а зачем для тестов их игнорировать? их наоборот нужно выявлять всеми возможными способами
PM MAIL WWW   Вверх
alexandra231525480
Дата 10.4.2008, 13:20 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 2.9.2006

Репутация: нет
Всего: нет



smile объясняю
есть код, есть на него тесты с плохими значениями, в случае , например, битого файла (недокаченного etc) код должен без разных ексепшинов просто вернуть false. а варнинги, которые мне об этом сообщают просто-напросто ломают тесты smile вот и надо их скипать! smile применение @func() юзает ini_set, что есть весьма плохо. ровно в 100 раз быстрее (только что протестила) вот такое:
Код

$old = error_reporting(0);
func();
error_reporting($old);

так шо наверно это и есть наиболее оптимальный вариант, чтоб скипать все эти какашки на участке кода..
PM MAIL   Вверх
WolfON
Дата 10.4.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: 1
Всего: 8



try catch ёпрст!
PM MAIL ICQ   Вверх
Fortop
Дата 10.4.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(WolfON @  10.4.2008,  14:34 Найти цитируемый пост)
try catch ёпрст! 

Он не ловит ошибки, только Exception.
Т.е. нужен еще и свой обработчик ошибок, который будет принудительно кидать Exception


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
alexandra231525480
Дата 10.4.2008, 15:06 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 2.9.2006

Репутация: нет
Всего: нет



 smile  чуваки, я ж грила - никаких ексепшинов  smile 
PM MAIL   Вверх
alexandra231525480
Дата 10.4.2008, 15:48 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 2.9.2006

Репутация: нет
Всего: нет



во-первых, если твое решение просто не подходит человеку - нефиг гнать на его тесты и приложения.
во-вторых, если ты не понял вопроса также нефиг гнать на вопрошаемого
в-третих, @func использовалось в приложении. и я хочу избегать этот оператор. если не использовать вообще никаких скипов ошибок - валятся тесты. вот я и выдвинула пост дабы узнать мнения по поводу как можно подругому избегать варнингов и прочего подобного.

Добавлено через 2 минуты и 10 секунд
и как вообще могло взбрести в голову, что именно в тестах используется @ ??????
PM MAIL   Вверх
MoLeX
Дата 10.4.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 0
Всего: 140




M
MoLeX
так, гонор сбавляем... не знаем - не говорим и не советуем...


Добавлено через 1 минуту и 10 секунд
а грубить - эт последние дело, и причем наказуемое


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Fortop
Дата 10.4.2008, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(alexandra231525480 @  10.4.2008,  15:48 Найти цитируемый пост)
и как вообще могло взбрести в голову, что именно в тестах используется @ ?????? 


процитированное ниже можно было как-то воспринять иначе?
Цитата(alexandra231525480 @  10.4.2008,  11:40 Найти цитируемый пост)
привет! как можно игнорить варнинги помимо @my_func() ? так как такая конструкция нехило тормозит код  она делает такое:

Цитата(alexandra231525480 @  10.4.2008,  12:07 Найти цитируемый пост)
умно. только это не для кода, а для тестов 



Я уже не говорю про 
Код

$old = ini_set('error_reporting', E_NONE);

Который сам по себе генерирует ошибку.


Но, разницы для 
Код

$old = error_reporting(0);
func();
error_reporting($old);

33.961764574051с   940000 итераций   0.000036129536780905 среднее время

Код

@func()

17.399100780487с   1000000  итераций    0.000017399100780487 среднее время

Код

$old = ini_set('error_reporting', 'E_NONE');
func();
ini_set('error_reporting', $old);

40.267714977264с   1060000 итераций     0.00003798841035591 среднее время

Практически нет.

А вот, тот замечательный авторский код который тормозил smile
Код

$old = ini_set('error_reporting', E_NONE);
func();
ini_set('error_reporting', $old);

завершения его работы я не дождался в течении 10ти минут при 100% загрузке процессора

Сами догадаетесь почему? Или подсказать?

Еще вопросы к непрофессионалам будут?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Fortop
Дата 10.4.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



оно таки завершилось
Код

$old = ini_set('error_reporting', E_NONE);
func();
ini_set('error_reporting', $old);


2811.8342983723с   910000 итераций   0.0030899278004091 среднее время

Это сообщение отредактировал(а) Fortop - 10.4.2008, 17:34


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
alexandra231525480
Дата 10.4.2008, 18:29 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 2.9.2006

Репутация: нет
Всего: нет



почитай в манах - использование @ интерпретируется как 
Код

$old = ini_set('error_reporting', E_NONE);
func();
ini_set('error_reporting', $old);


и весь вопрос заключался в том - как этого избежать! вот и решение - error_reporting !

Добавлено через 4 минуты и 40 секунд
и в конечном итоге вместо 
Код

return @imagecopyresized($newImg, $imgRes, 0, 0, 0, 0, $this->thumbWidth, $this->thumbHeight, $sourceWidth, $sourceHeight)


имеем
Код

return self::escapeErrorReporting('imagecopyresized', array($newImg, $imgRes, 0, 0, 0, 0, $this->thumbWidth, $this->thumbHeight, $sourceWidth, $sourceHeight))

...

public static function escapeErrorReporting($callback, $paramsArray) {
        $oldErrorReporting = error_reporting(0);
        $result = null;
        try {
            $result = call_user_func_array($callback, $paramsArray);
        }catch (Exception $e) {
            $result = false;
        }
        error_reporting($oldErrorReporting);
        return $result;
    }


Это сообщение отредактировал(а) MoLeX - 10.4.2008, 18:33
PM MAIL   Вверх
Fortop
Дата 10.4.2008, 19:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(alexandra231525480 @  10.4.2008,  18:29 Найти цитируемый пост)
почитай в манах - использование @ интерпретируется как 
Выделить всёкод PHP
$old = ini_set('error_reporting', E_NONE);
func();
ini_set('error_reporting', $old);

Не соблаговолите ли указать прямой линк на такую трактовку?
Поскольку сам я всегда пользовался http://ua2.php.net/manual/ru/language.oper...rrorcontrol.php

А теперь еще раз и вдумчиво читаем то, что написано ниже.

Для того чтобы не работало в 100 раз медленнее 
Надо
Код

$old = ini_set('error_reporting', 'E_NONE');


В коде автора
Код

$old = ini_set('error_reporting', E_NONE);


Все еще не понятно?
E_NONE вызывает NOTICE за счет чего и замедляется обработка!
Для просмотра предопределенных констант настоятельно рекомендую пользоваться следующим кодом 
Код

var_dump(get_defined_constants());



Цитата(alexandra231525480 @  10.4.2008,  18:29 Найти цитируемый пост)
и в конечном итоге вместо 
Код

return @imagecopyresized($newImg, $imgRes, 0, 0, 0, 0, $this->thumbWidth, $this->thumbHeight, $sourceWidth, $sourceHeight)
имеем

Код

return self::escapeErrorReporting('imagecopyresized', array($newImg, $imgRes, 0, 0, 0, 0, $this->thumbWidth, $this->thumbHeight, $sourceWidth, $sourceHeight))


Пожалейте мои мозги и сердце.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0641 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.