Istifadəçi |
2013-02-23 02:27 GMT |
|
|
|
Pr0grammer |
|
Mesaj Sayı : 1677 |
Mövzu Sayı : |
Rep Ver : |
Rep Sayı : 62 |
Indi Saytda : |
Cinsiyyət : Oğlan |
|
Şəhər : KARABAKH IS AZERBAIJAN! |
Ölkə : |
Məslək : |
Yaş : |
Mesaj : |
|
Sitat error_reporting(0); yazsaq sadə xətalar gizlənər.
Düzdür.
Amma
Sitat Ancaq fayl açmaq kimi vacib əməliyyatlar yenə xəta verir,
Səhv fikirdir.
Real Misal:
Kod: ssher@ubuntu:~/13$ cat -n 3.php
1 <?php
2 error_reporting(0);
3 echo file_get_contents('bufaylyoxdur.txt');
4 exit;
5
6
7
8
9 ?>
ssher@ubuntu:~/13$ php -l 3.php
No syntax errors detected in 3.php
ssher@ubuntu:~/13$ php 3.php
ssher@ubuntu:~/13$
Nəsə error gördün?Yox.
Amma error_reporting(E_ALL) etsəydin görərdin:
Kod: ssher@ubuntu:~/13$ cat -n 3.php
1 <?php
2 error_reporting(E_ALL);
3 echo file_get_contents('bufaylyoxdur.txt');
4 exit;
5
6
7
8
9 ?>
ssher@ubuntu:~/13$ php 3.php
PHP Warning: file_get_contents(bufaylyoxdur.txt): failed to open stream: No such file or directory in /home/ssher/13/3.php on line 3
strlen() əvəzinə isset() o da səhv fikirdir.
Kod: ssher@ubuntu:~/13$ cat -n 1.php
1 <?php
2 error_reporting(E_ALL);
3 $nik=str_repeat('A',15);
4
5 if (strlen($nik)>11)
6 {
7 echo 'NIK UZUNDUR!'. PHP_EOL;
8 }
9 exit;
10
11
12
13 ?>
14
ssher@ubuntu:~/13$ php -l 1.php
No syntax errors detected in 1.php
ssher@ubuntu:~/13$ php 1.php
NIK UZUNDUR!
ssher@ubuntu:~/13$ cat -n 2.php
1 <?php
2 error_reporting(E_ALL);
3 $nik=str_repeat('A',15);
4
5 if(isset($nick[11])) echo "Uzun nik";
6
7 ?>
ssher@ubuntu:~/13$ php -l 2.php
No syntax errors detected in 2.php
ssher@ubuntu:~/13$ php 2.php
ssher@ubuntu:~/13$
Fikir ver output yoxdur 2-ci skriptdə. strlen() string-ə aid funksiyadır.Sən isə onu $nik[11] etməklə ümumiyyətlə aləmi qatdın biri birinə.
Onu etməklə sən $nik-i string deyil massiv (yəni array-in 11-ci elementinə tətbiq etdin.
$nik ayrı şeydir $nik[11] ayrı şey.Cİn ayrı şeytan ayrı bir sözlə.
Həmçinin digər tərəfdən isset() variablenin mövcudluğunu yoxlamaq üçündür.
strlen() isə variablenin variablenin value-sinin uzunluğunu ölçmək üçündür.
Biri var deyimki:
Otaqda filan adlı adam var? isset()
Biri də var deyirəm otaqda filan adlı adamın neçə yaşı var? strlen()
İnisializə etməmiş variableni avtomatik keçmisən uzunluğunu yoxlamağa.
Fərqi gördün?
Kod: if($a==5){ $b=2; }else{ $b=7 } yazmaq əvəzinə $b=($a==5)?2:7; de]
Bu isə düzdür.
Həmçinin variablenin qarşısını @ işarəsi atmaq da (aka suppress) də məsləhət görülmür.
O halda skriptdə nə error-un getdiyini görməyəcəksən.
Gəl ondan sonra debug elə kodu tap görüm hardadır səhv.
Gözəl yazılmış skript heç vaxt işi zamanı NOTİCE~~ WARNING Göstərməməlidir.
Ona görə də DEVELOPMENT vaxtı
error_reporting(E_ALL); məsləhətlidir.
Production serverlərdə isə bəli error-ları clientdən gizlətməlisən.Amma serverdə loglaşdırmalısan ki, biləsən problemi haradadır skriptin.
|
Anti-armenia.ORG |
|
Istifadəçi |
2013-02-23 09:12 GMT |
|
|
|
Creative |
|
Mesaj Sayı : 199 |
Mövzu Sayı : |
Rep Ver : |
Rep Sayı : 16 |
Indi Saytda : |
Cinsiyyət : Oğlan |
|
Şəhər : |
Ölkə : |
Məslək : |
Yaş : 29 |
Mesaj : |
|
Sitat #23036 BlackMinD :
Kod: ssher@ubuntu:~/13$ cat -n 2.php
1 <?php
2 error_reporting(E_ALL);
3 $nik=str_repeat('A',15);
4
5 if(isset($nick[11])) echo "Uzun nik";
6
7 ?>
ssher@ubuntu:~/13$ php -l 2.php
No syntax errors detected in 2.php
ssher@ubuntu:~/13$ php 2.php
ssher@ubuntu:~/13$
Burda outputun boş gəlməsinin səbəbi: $nik=str_repeat('A',15); ..$nick[11].. bax birində $nik yazmısan birində $nick...
TheLock əslində düz qeyd edibdi, sadəcə orda bir xırda səhv var oda:
Tutaqki:
Kod: $ad="abcdefgh";
burada $ad-ın 1-ci simvolunu almaq istəyiriksə $ad[1] yox $ad[0]-dan istifadə edəcəyik... Yəni:
Kod: print $ad[0]; // Output a
print $ad[1]; // Output b
TheLock-un yazdıqı nümunədə nickin 10 simvoldan böyük olmamasını istəyir...
Kod: if(isset($nick[11])) echo "Uzun nik";
Bu səhfdi, çünki burda 11 simvolda yazsan qəbul edəcək...
Kod: if(isset($nick[10])) echo "Uzun nik";
yazsan ancaq düz olar.
Sitat
print "əməliyyat nəticəsi: $rəqəm dir";
burda cüt dırnaq işarəsi olması məcburidi amma onun yerinə bu istifadə edilsə daha sürətli olar:
print 'əməliyyat nəticəsi:' . $rəqəm . 'dir';
+ bu yazıyla razı deyiləm... Əslində özüm durub test eləməmişəmki hansı halda script daha tez işləyəcək... php.net-dən oxumuşam, orda test eləyib saniyələrini yazmışdılar hərbir hal üçün...
Yazılana görə ən sürətli bu şəkildə olardı:
Kod: print <<<METIN
əməliyyat nəticəsi: {$rəqəm} dir
METIN; /code]
+ 1-ci yazdıqın nümunə 2-ciyə görə daha sürətli olacaq... Sən tərsini yazmısan... Yenə deyirəm bunu mən test eləməmişəm, sadəcə php.net-dən götürdüyüm bir məlumatdı...
|
Anti-armenia.ORG |
|