Модераторы: 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   Вверх
IZ@TOP
Дата 21.4.2008, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



alexandra231525480, какими тестами пользуетесь? В UnitTest'ах все отлично работает - если эта ошибка запланированная; для того и придуман assertError.

Это сообщение отредактировал(а) IZ@TOP - 21.4.2008, 18:44


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
ST_Falcon
Дата 22.4.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 14.11.2003
Где: Львов

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



Цитата(Fortop @  10.4.2008,  19:03 Найти цитируемый пост)
Пожалейте мои мозги и сердце. 

+1  smile 

alexandra231525480
Цитата

умно. только это не для кода, а для тестов 

Цитата

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

зачем? в тестах проблема с производительностью или что? 

@ стандартный оператор подавления ошибок. менять его на другую конструкцию считаю не логичным - во первых не читабельно, во вторых быстрее работать не будет (как уже вам указали выше). 

ps. тема очень похожа на стёб smile
PM MAIL ICQ   Вверх
Fortop
Дата 23.4.2008, 01:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(ST_Falcon @  22.4.2008,  22:33 Найти цитируемый пост)
зачем? в тестах проблема с производительностью или что? 

У нее проблема с умением писать тесты.

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


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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