PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (24): « 1 2 3 4 [5] 6 7 8 9 ... » В конец

> Найдено сообщений: 359
Hapson Отправлено: 11 Марта, 2014 - 18:28:54 • Тема: Аномальное поведение Rename • Форум: Вопросы новичков

Ответов: 8
Просмотров: 307
OrmaJever пишет:
вы вначале перейменовываете файл, а затем открываете файл со старым именем

Именно так и нужно. Старый переименовать и создать новый со старым именем переименованого. Новое имя мне не нужно. Он переименовался и все - больше он мне не нужен.
(Добавление)
PS то есть есть файл

error.log ___ 100kB

Размер превышает 100kB и должно получиться так

error.дата-время.log ___ 100kB
error.log _____________ 0kB
Hapson Отправлено: 11 Марта, 2014 - 18:18:08 • Тема: Аномальное поведение Rename • Форум: Вопросы новичков

Ответов: 8
Просмотров: 307
LIME пишет:
$this->log_file
$this->log_file_php
что там лежит убедился?

Полные пути к файлам
Hapson Отправлено: 11 Марта, 2014 - 17:57:27 • Тема: Аномальное поведение Rename • Форум: Вопросы новичков

Ответов: 8
Просмотров: 307
Вчера наткнулся на необычный глюк.
Вобщем так: есть скрипт - обработчик ошибок, который пишет ошибки в лог файл - error.log.
Пишет он значит пишет... и если размер файла превышает 100кБ, он его переименовывает в
error.время-дата.log и создает новый error.log.
PHP:
скопировать код в буфер обмена
  1.  
  2. private function WriteToLog($string){
  3.         $this->CheckWeightLogs($this->log_file);
  4.         $this->CheckWeightLogs($this->log_file_php);
  5.         $file = fopen($this->log_file, "ab"); flock($file, LOCK_EX | LOCK_NB);
  6.         fwrite($file, $string);
  7.         flock($file, LOCK_UN); fclose($file);
  8.         array_pop($this->log_collection);
  9. }
  10.  
  11. private function CreateLogFile($path){
  12.         $file = fopen($path, "wb");
  13.         if($file){fclose($file); return true;}
  14.         return false;
  15. }
  16.  
  17. private function CheckWeightLogs($file){
  18.         if(filesize($file) > 100 * 1024){
  19.                 $date = date("Y-m-d_H-i-s", time());
  20.                 $new = preg_replace("#^(.+)log$#u", "\${1}". $date .".log", $file);
  21.                 rename($file, $new);
  22.                 $this->CreateLogFile($file);
  23.         }
  24. }
  25.  


Так вот, время от времени наблюдал такое (открыл браузер на пол монитора и проводник):

  • файл переименовывается
  • создается новый нулевого размера
  • тут же пропадает новый
  • переименованый опять переименовывается на старое имя
  • сообщение для лога теряется

Закономерности не обнаружил никакой. То работает, то нет. Это че, глюк винды?
Hapson Отправлено: 11 Марта, 2014 - 15:59:28 • Тема: Применение хеширования md5 в ajax • Форум: Вопросы новичков

Ответов: 8
Просмотров: 465
Gekatonheyr
Что за функция хеширует на стороне клиента?
Какая кодировка файлов?

PS и нахрена столько хешировать??? Один раз достаточно, а более одного раза - это уже параноя, которая приводит к вот таким проблемам.
Hapson Отправлено: 11 Марта, 2014 - 15:43:20 • Тема: Установка Apache в windows. • Форум: Вопросы новичков

Ответов: 7
Просмотров: 338
Сайга-12
Апач кидай в X:\Users\Public\
Вот тебе PHP и Апач
Hapson Отправлено: 11 Марта, 2014 - 15:32:19 • Тема: try...catch Ошибки и Исключения • Форум: Вопросы новичков

Ответов: 36
Просмотров: 1690
Мелкий пишет:
А пользовательский ввод исключением не является, это штатная работа.

А если пользователь решил удалить из формы пару полей - штатная работа?
Hapson Отправлено: 10 Марта, 2014 - 21:59:25 • Тема: try...catch Ошибки и Исключения • Форум: Вопросы новичков

Ответов: 36
Просмотров: 1690
А я вот че придумал:
https://www[dot]dropbox[dot]com/s/3nhpnx[dot][dot][dot]ErrorHandler.php
Hapson Отправлено: 09 Марта, 2014 - 23:48:37 • Тема: try...catch Ошибки и Исключения • Форум: Вопросы новичков

Ответов: 36
Просмотров: 1690
Чет я не понял, почему методы вызываются автоматически..?
Работает, но непонятно как. Просматривал выполнение пошагово - как они вызываются сами?
(Добавление)
Да, и при запросе наверно лучше устанавливать null , а не пустую строку.
Hapson Отправлено: 09 Марта, 2014 - 22:37:23 • Тема: try...catch Ошибки и Исключения • Форум: Вопросы новичков

Ответов: 36
Просмотров: 1690
OrmaJever пишет:
хотя вот сидел я смотрел на свой код и понял что бессмысленно в обработчике ошибок кидать исключение.
Ну вот давайте подумаем когда может (в продакшене) вылезть нотис или варнинг? Если скрипт правильно написано то ошибки вылезти просто не могут, и соответственно забивать скрипт кучей try - catch блоков ради непонятно какой ошибки как то дико. А если вдруг предположить что я мог что-то упустить и нотис всё таки вылезет то можно просто в обработчике ошибок его записать в файл и идти дальше.
Если я не прав - поправьте.

Ну да, исключения и ошибки все же разные вещи.
DelphinPRO пишет:
Вот неудачный ты пример выбрал. Совсем неудачный.

Ну почему, удачный.
Я так и делаю в принципе. Либо через isset проверяю, либо сразу инициализирую массив с полями для возврата в форму.
Просто хотелось красивее и проще, но не получилось.
Hapson Отправлено: 09 Марта, 2014 - 21:03:24 • Тема: try...catch Ошибки и Исключения • Форум: Вопросы новичков

Ответов: 36
Просмотров: 1690
Мелкий пишет:
Hapson пишет:
То есть Notice может прервать скрипт.

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

Вобщем-то да, при нормальной работе Notice не вылазит. А тот кусок где ожидается Notice можно обернуть в try...catch
Например установка переменных из $_POST. Чем каждое поле проверять на isset и !empty, лучше обернуть все в try, а в catch переадресовать юзера
Hapson Отправлено: 09 Марта, 2014 - 20:09:33 • Тема: try...catch Ошибки и Исключения • Форум: Вопросы новичков

Ответов: 36
Просмотров: 1690
Не... фигня это все.
Если написать свой обработчик ошибок и в нем кидать исключение, то тогда в блоках try будут отлавливаться ошибки - это круто.
НО! Если вывалился Notice посреди кода - вне блока try, то в этом случае все - капут. После try выполняется блок catch, а если его нет, то скрипт закончится.
То есть Notice может прервать скрипт.
Конечно можно смотреть в обработчике на тип ошибки и не бросать исключение при Notice.
Блин... я даже не знаю, что лучше. Наверно все же лучше проверять по старинке через if...else
Hapson Отправлено: 09 Марта, 2014 - 14:35:14 • Тема: try...catch Ошибки и Исключения • Форум: Вопросы новичков

Ответов: 36
Просмотров: 1690
[quote=OrmaJever][/quote]
Да, удобно, но злоупотреблять наверное не стоит.
Конечно если код работает без ошибок, то все ОК. Но если ошибки есть, то каждая ошибка будет генерировать исключение, что накладно.
(Добавление)
И если есть @ в коде, то их сразу отсеивать в обработчике через error_reporting()
Hapson Отправлено: 09 Марта, 2014 - 14:23:30 • Тема: try...catch Ошибки и Исключения • Форум: Вопросы новичков

Ответов: 36
Просмотров: 1690
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if($_SERVER['REQUEST_METHOD'] == 'POST'){
  3.         try{
  4.                 $email = $_POST['email'];
  5.                 $password = $_POST['password'];
  6.         }catch(ErrorException $e){
  7.                 var_dump($e);
  8.         }
  9. }
  10. ?>


Если в $_POST чего-то нет, то возникнет Notice, сработает мой обработчик ошибки, в котором бросается исключение, которое можно поймать в catch, если оно нужно конечно.
А можно просто сделать что нужно, например вывести юзеру ошибку.
Короче при ошибках в try сработает catch
Hapson Отправлено: 09 Марта, 2014 - 14:13:43 • Тема: try...catch Ошибки и Исключения • Форум: Вопросы новичков

Ответов: 36
Просмотров: 1690
OrmaJever пишет:
set_error_handler устанавливает пользовательский обработчик именно ошибок

А в пользовательском обработчике ошибок мы помимо обработки ошибки кидаем исключение:

Таким образом можно по своему обрабатывать ошибки, а также ловить их в блоках try
http://www.php.net/manual/ru/cla...rorexception.php
(Добавление)
То есть по сути ошибки становятся исключениями, но и ошибками не перестают быть...
как-то так
Hapson Отправлено: 09 Марта, 2014 - 14:06:47 • Тема: try...catch Ошибки и Исключения • Форум: Вопросы новичков

Ответов: 36
Просмотров: 1690
Кажись понял, нужно как-то так делать:
PHP:
скопировать код в буфер обмена
  1.  
  2. function ErrorToException($errNo, $errStr, $errFile, $errLine){
  3.         $message = <<<MESS
  4. <div style="background-color:#fff; margin: 10px; padding: 10px; border: 1px solid #000; border-radius: 5px;">
  5. Error: $errStr
  6. File: $errFile
  7. Line: $errLine
  8. </div>
  9. MESS;
  10.         echo $message;
  11.         throw new ErrorException($errStr, $errNo, 0, $errFile, $errLine);
  12. }
  13.  
  14. set_error_handler("ErrorToException");
  15.  

Прикольно Улыбка

Страниц (24): « 1 2 3 4 [5] 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB