ՆԱՎԱՎԱՐ ջան,
Երկու նորություն ունեմ քո համար մեկը լավ մեկը վատ։ Կարծում եմ տեղին կլինի սկսել լավից։
Շատ լավ է, որ հենց սկսել ես PHP+MySQL սովորել ու նույնիսկ սերվեր ունես հատուկ դրա համար։ Դա շատ խոստումնալից սկիզբ է։ Բացի այդ կարող ես այստեղ հարցնես ցանկացած հարց, որի պատասխանը չես գտնում տարբեր գրականությունների մեջ (շատ խորհուրդ կտամ կարդալ կամ պնտրել պատասխանները, նախքան հարցնելը, դա կօգնի ավելի արագ սովորելու)։
Վատ նորությունն ել այն է, որ ծրագրում սխալ կա, սակայն չի ցուցադրվում և չգիտենք որտեղ փնտրել այն (ես գլխի եմ ընկնում ինչումն է խնդիրը)։
Հիմա սկսենք ամենահետաքրքիր մասից՝ դեբագինգից, կամ հայերեն ասած սխալների ուղղումից։
Նախ և առաջ, ասեմ, որ եթե ոչ մի բան չես տեսնում բրոուզերի պատուհանում, ապա դրա ամենահավանական պատճառը ծրագրային սխալն է, որը խոչընդոտում է ծրագրի կատարմանը ինչ որ մի փուլում (տվյալ դեպքում ամենասկզբում, երբ ոչինչ չի ուղարկվել բռոուզերին) և դրանից բացի համոզված եմ, որ PHP կոնֆիգուրացիայում անջատված է սխալների ցուցադրումը display_errors=Off կամ error_reporting=0:
Այս պարզելու համար նոր ֆայլ սարքի սերվերիտ սկզբնական դիրեկտորիայում (root directory) phpinfo.php և հետևյալ բովանդակությամբ։
<?php phpinfo(); ?>
Աշխատեցնելով այն (բրոուզերի հասցեում գրելով նրա հասցեն ասենք www.myhost.com/phpinfo.php) կտեսնես PHP կոնֆիգուրացիոն տվյալները։ Այնտեղ կգտնես նաև display_errors և error_reporting ու կտեսնես, որ դրանցից մեկը անջատված է։ Սովորաբար արտադրական միջավայրում սերվերներում անյատվում է display_errors և դրա փոխարեն միացվում է log_errors, որը գրում է սխալների մասին ինֆորմացիան ֆայլի մեջ, հետագա ուսումնասիրման ու սխալների ուզզման համար։
Ի՞նչպես փոխել դրանց արժեքները։
Կա մի քանի ձևեր դրա համար։
Ողղակի փոփոխման մեթոդ
Քիչ առաջ ստեղծած phpinfo.php աշխատեցնելով, PHP կոնֆիգուրացիոն տվյալների ամենասկզբում գտնում ենք "Configuration File (php.ini) Path" դիրեկտիվը և կարդում թե որտեղ գտնել կոնֆիգուրացիոն ֆայլը (օրինակ իմ տան սերվերի համար դա /etc/php.ini). Բացելով այդ ֆայլը տեքստային խմբագրիչով (editor) փոփոխում ենք մեր ցանկացած դիրեկտիվը և հիշում (save) ֆայլը։ Մնում է վերագործարկենք (restart) սերվերը և բոլոր փոփոխությունները կսկսեն գործել։
Այս մեթոդի միակ վատ կողմը նրանում է, որ գրեթե միշտ հոստինգի օգտագործողները իրավունք չունեն ուղղել այդ կոնֆիգուրացիոն ֆայլը քանի որ այն կազդի բոլոր հաշիվների վրա, որոնք գտնվում են այդ սերվերի վրա։
Ծրագրային մեթոդ
PHP–ում կա ini_set() ֆունկցիան, որի միջոցով հնարավոր է ռեալ ռեժիմում (ծրագրի աշխատանքի ընթացքում) փոփոխել կոնֆիգուրացիոն դիրեկտիվները։ Քո ծրագրի ամենասկզբում կանչելով այս ֆունկցիան համապատասխան պարամետրերով, կարելի է փոփոխել այդ արժեքները, նախքան բուն ծրագրի աշխատանքը, որը հնարավորություն կտա մեզ տվյալ դեպքում տեսնել բոլոր սխալները և ուղղել դրանք։
<?php
ini_set('display_errors','On');
ini_set('error_reporting','E_ALL');
... մնացած կոդը
Apache–ի htaccess ֆայլի միջոցով
Եթե դուք իրավունք ունեք ոգտագործելու այս ֆայլը սերվերի վրա (շատ անգամ սա նույնպես անջատում են Apache–ի AllowOverride none դիրեկտիվի միջոցով), ապա տվյալ դիրեկտորիայում, որտեղ գտնվում է ֆայլը, որի վրա ուզում եք ազդել, ստեղծեք .htaccess անեւնով մի ֆայլ (նկատեք դիմացի կետը, որը ըստ պայմանավորվածության սերվերի ֆայլային համակարգում ունեն թագնված ֆայլերը, որոնք տեսանելի չեն Linux–ի ls հրամանի դեպքում)։
Այդ ֆայլի մեջ մնում է ավելացնել հետևյալ դիրեկտիվները և ամեն ինչ պատրաստ է։
php_value display_errors On
php_value error_reporting E_ALL
ՆԱՎԱՎԱՐ ջան,
Եթե սրանցից մեկը անես, ապա այնպայման կտեսնես սխալի տեքստը, որը շատ կոգնի քեզ լուծելու այն։ Փորձի, հետո գտնելով սխալը փորձի այն նույնպես լուծել, հետո կպատմես ստացվեց թե ոչ։ Որպես հուշում ասեմ, որ իմ կարծիքով քո ծրագրի սխալը կայանում է տվյալների բազայի օգտագործողի իրավունքների հետ։
Քանի դեռ սովորում ես, կարող ես միացրած պահել սխալները, երբ արտդրական միջավայրի անցնես, չմոռանաս անջատել այն քանի որ կարող է շատ վտանգավոր ինֆորմացյա ցուցադրել հաճախորդներին սխալի դեպքում (հակերները կանխամտածված սխալներ կանեն դրանք ստանալու համար)։
Բացի այդ շատ կարևոր մի խորհուրդ։
Quote
Երբեք մի օգտագործիր ծրագրերիտ աշխատանքում root օգտագործողին։ Դա այն օգտագործողն է, որը ունի անսահմանափակ իրավունքներ ու եթե այն ընկնի ինչ որ մեկի ձեռքը ապա կարող ես սերվերտ գցել հոսող ջրի մեջ, որ տանի գլխացավանքն ել հետը։ Նման դեպքում փրկություն չկա՛։ Նույնը կասեմ նաև օպերացիոն համակարգեր օգտագործելու համար։ Միշտ ստեղծիր նոր օգտագործող մինիմալ իրավունքներով, որը կբավարարի տվյալ խնդրին (օրինակ եթե ծրագրում չես օգտագործում DELETE հարցումը, ապա կարող ես արգելել այդ օգտագործողին այն աշխատացնելու իրավունքից, դրանով իսկ ավելի ապահովվելով անվտանգությունը)։