Forum Webscript.Ru

Программирование => PHP => Тема начата: Nikman от 18 Июня 2003, 18:22:58

Название: Зачем перед некоторыми функциями ставят @ ???
Отправлено: Nikman от 18 Июня 2003, 18:22:58
Зачем перед некоторыми функциями ставят @ ???
Что от этого меняеться?

Например

include(PATH);
@include(PATH);

в чём тут разница?
Название: Зачем перед некоторыми функциями ставят @ ???
Отправлено: Xander от 18 Июня 2003, 18:25:18
читай мануал
а вообще так подавляется вывод варнингов.
Название: Зачем перед некоторыми функциями ставят @ ???
Отправлено: Меняздесьдавнонет от 18 Июня 2003, 18:31:19
Это ужасный, очень вредный и опасный оператор.
подавляет он вывод не варнингов, а любых сообщений об ошибках.
перед инклюде - это просто глобальная засада, которую программист сам себе устраивает.

@ используют только дураки, которые не понимают, что они делают.

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

@ ставят в том случае, если не хотят, чтобы пользователь видел сообщение об ошибке.
но для этого есть гораздо более эффективные способы.
1. такой же неправильный, как и сама собака, но более удобный.
Вместо того, чтобы ставить перед каждой функцией собаку (а потом убирать, если что-то не работает), можно написать сразу в начале скрипта
error_reporting(0);

но правильнее, написать так
ini_set(\'display_errors\',0);
ini_set(\'log_errors\',1);

тогда пользователь ошибок не увидит, а программист - в логах - увидит!
Название: Зачем перед некоторыми функциями ставят @ ???
Отправлено: Nikman от 18 Июня 2003, 18:31:43
Да вот в этом и фигня что в мануале чё то этого нет :(
Название: Зачем перед некоторыми функциями ставят @ ???
Отправлено: Меняздесьдавнонет от 18 Июня 2003, 18:35:09
Лучше тебе воздержаться от таких высказываний.
В мануале это ЕСТЬ, и ты это прекрасно понимаешь.
Наяти трудно, если не знаешь, про что оно - да.
но не надо так заявлять. проблема-то не в мануале ведь
Название: Зачем перед некоторыми функциями ставят @ ???
Отправлено: Neter от 18 Июня 2003, 22:34:55
Спасибо за тему! Я сижу, кайфую, думаю в кой-то веке без очепяток код стал писать, а у меня в пхп.ини вывод варнингов был отключен.. :(

Хотя в принцепе не такая уж это и плохая собака, в некоторых некритичных местах я её юзаю, например при проверке переменных полученных из формы, когда надо узнать заполнено то или иное поле, не важно чем, как альтернатива
if(!empty($_POST[\'var\'])) проще записать как if(@$_POST[\'var\']), особенно когда переменных много..
Название: Зачем перед некоторыми функциями ставят @ ???
Отправлено: Меняздесьдавнонет от 18 Июня 2003, 23:00:04
Когда переменных много, их надо обрабатывать массивом.
В цикле.
Название: Зачем перед некоторыми функциями ставят @ ???
Отправлено: AlieN от 19 Июня 2003, 13:13:16
Вот когда я делаю какой-нить сайт на локальной машине, я перед всеми функциями mail ставлю @ т.к. stmp сервера нету %)
Название: Зачем перед некоторыми функциями ставят @ ???
Отправлено: Alexandr от 20 Июня 2003, 11:30:44
Напиши в php.ini
sendmail_path = c:\\path\\perl.exe c:\\path\\sendmail.pl

sendmail.pl
#!/usr/bin/perl -w

## Path to result file.
## You may edit it if you want.

my $out = "c:/path/tmp/!sendmail.txt";


open(local *F, ">>$out") or die "Couldn\'t open \\"$out\\"\\n";
my $cmd = "[".localtime()."] sendmail ".join(" ",@ARGV);
print F $cmd."\\n";
print F ("-" x max(75,length($cmd)))."\\n";

my $len = 0;
my $sn;
while(defined($s=)) {
last if $s=~/^\\.[\\r\\n]*$/s;
print F $s;
$sn = $s=~/\\n/s;
$len = length($s) if length($s)>$len;
}
print F "\\n" if !$sn;
print F ("=" x max(75,$len))."\\n\\n";

close(F);

sub max
{ my ($a,$b) = @_;
return $a>$b? $a : $b;
}

Очень круто помогает!