Проверка на возникновение ошибки

stinol

Guest
Проверка на возникновение ошибки

Здравствуйте!

У меня вопрос про ошибки. :)

В mySQL понятно ставим @ перед функцией и потом получаем текст сообщения mysql_error()

А как же быть с другими функциями. Например unlink() и подобными?


Приятного Вам программирования!
 

KR

alive in new life
Точно также.
Но лучше для подобных "узких" мест делать дополнительные проверки, а не прибегать к использованию собаки
для случая с unlink() будет что-то типа

if(file_exists($filename) && is_writable($filename))
unlink($filename);
 

SA739

Cogito, ergo sum
Во-первых: @ действует с точностью до наоборот
Во-вторых: @ не является функцией и тем более функцией mysql
В-третьих: @ подавляет ошибки выдаваемые НЕ только функциями для работы с mysql
В-четвертых: читай error_reporting()

ЗЫ. и вообще побольше читай, благо сейчас уйма доки, причем очень много и на русском, если с англицким туго.
 

stinol

Guest
На счет @ понятно что она действует на все функции.
Я хочу узнать какое сообщение выдала система.

Если например я напишу unlink() без @, то если у меня нет прав, я получу Permission denied или что-то в этом духе.
Вот я и хочу получить это сообщение только используя @. Что бы по человечески написать почему функция не отработала.

Удачи
 

tony2001

TeaM PHPClub
сам это проверяй, а не жди сообщения об ошибках.
[m]is_writable[/m]
[m]is_readable[/m]
[m]file_exists[/m]
[m]is_file[/m]
etc.
 

Фанат

oncle terrible
Команда форума
О!
моя любимая тема.

Значит, так.
@ ставить перед функциями - неправильно.
Перед любыми.
Запомни это навсегда.

Какой смысл в этой собаке, если она давит сообщение об ошибке НЕ ТАМ, где ошибка произошла?
ведь ошибка-то у тебя была выше - в mysql_query, а собака давит сообщение у mysql_fetch_array

Это во-первых.
во-вторых, не проще поставить ОДНУ КОМАНДУ, которая подавляет вывод ошибок, чем ставить сотни собак перед каждой функцией?

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

Фанат

oncle terrible
Команда форума
неувязочка
Что бы по человечески написать почему функция не отработала.
mysql_error сообщает "не по человечески".
или я что-то не понимаю в ходе твоих рассуждений.

А вообще, чтобы разобраться в этой теме, надо четко для себя понимать различие между ОШИБКОЙ, СООБЩЕНИЕМ об ошибке и АДРЕСАТОМ этого сообщения.

Сейчас, заботясь о юзере, ты забываешь о себе.
Это неправильно.
 

KR

alive in new life
Хе, вот мы и возвратились к ручной обработке ошибок.

к моему примеру дописываешь ветку else

либо можно еще так:
@unlink($filename) OR echo "Файл $filename удалить невозможно";
 

stinol

Guest
Еще раз попытаюсь объяснить!

Мне нужно узнать какая ошибка возникла при выполнении той или иной операции(текст ошибки). При этом не выводить эту ошибку.
И какой смысл во всех проверках типа
is_writable
is_readable
file_exists
is_file
Если в итоге окажется что у меня просто нет прав на удаление. И ошибка все равно возникнет.
Проще ее поймать и сообщить пользователжю о том, что не хватает прав.

Или я что-то не понимаю?
 

stinol

Guest
Originally posted by KR
Хе, вот мы и возвратились к ручной обработке ошибок.

к моему примеру дописываешь ветку else

либо можно еще так:
@unlink($filename) OR echo "Файл $filename удалить невозможно";
То что у далить не возможно и так понятно если ошибка выскачила. А ПОЧЕМУ не возможно?
 

Фанат

oncle terrible
Команда форума
KR, ты тоже наступаешь на те же грабли.
собака в этом случае - вредна.

выводить сообщение об ошибке надо обязательно! чтобы ПРОГРАММИСТ его прочел.

А вот юзеру его видеть совсем не обязательно.
 

tony2001

TeaM PHPClub
Originally posted by stinol
И какой смысл во всех проверках
Если в итоге окажется что у меня просто нет прав на удаление. И ошибка все равно возникнет.
Проще ее поймать и сообщить пользователжю о том, что не хватает прав.

Или я что-то не понимаю?
ДА, ты не понимаешь.
Если ты проверишь - можешь is_writable, то ты уже не получишь ошибку access denied при unlink.
Я достаточно ясно излагаю?
 

Фанат

oncle terrible
Команда форума
stinol, что ты подразумеваешь под словами "какая ошибка выскочила"?
сам текст ошибки?
а чем он тебя не устраивает?
текст ошибки на русском языке? Извини - РНР не поддерживает.

ты хоть скажи русским языком - что должно скрываться за этими тремя словами?
 

stinol

Guest
Originally posted by tony2001
ДА, ты не понимаешь.
Если ты проверишь - можешь is_writable, то ты уже не получишь ошибку access denied при unlink.
Я достаточно ясно излагаю?
ДА, в полне.
И все же(вот прикапался!) слишком много проверко для одной команды unlink(). Проще поймать и сообщить.

Ну да ладно. Видимо других способов, кроме описанных tony2001, нет
 

Фанат

oncle terrible
Команда форума
stinol, я не пойму никак - что ты хочешь поймать? то же самое сообщение, которое выдается без собаки?
просто, чтобы оформить его покрасивее?

а по поводу "слишком много" - ты не поверишь, но для unlink тужна только одна проверка.
 

stinol

Guest
Originally posted by Фанат
stinol, что ты подразумеваешь под словами "какая ошибка выскочила"?
сам текст ошибки?
а чем он тебя не устраивает?
текст ошибки на русском языке? Извини - РНР не поддерживает.

ты хоть скажи русским языком - что должно скрываться за этими тремя словами?
Я хочу что выводить ошибки вроде:
Невозможно удалить файл $filename.
Оригинальный текст сообщения: <orig_error>.
<orig_error> - это как раз текст об ошибке который выдает php

Понятно?
 

Фанат

oncle terrible
Команда форума
Да, и ты всерьез хочешь выводить на экран mysql_error? Всем, кто смотрит твой сайт?
Ты хорошо подумал?
 

stinol

Guest
Originally posted by Фанат
Да, и ты всерьез хочешь выводить на экран mysql_error? Всем, кто смотрит твой сайт?
Ты хорошо подумал?
Зачем это нужно? Это мое личное дело!
Если Вы не против
 

KR

alive in new life
Фанат, смотри мой первый пост и время его последнего редактирования, чтобы воторой раз также не облажаться.
 

stinol

Guest
Originally posted by Фанат
Да, и ты всерьез хочешь выводить на экран mysql_error? Всем, кто смотрит твой сайт?
Ты хорошо подумал?
Можно это сообщение на мыло отправлять администратору.
В конце концов.
 
Сверху