Մեծացնել սցենարի կատարման ժամանակը: Nginx-ով PHP սկրիպտի կատարման ժամանակի ավելացում: Ինչու՞ չափումներ ծրագրավորման մեջ:

Եթե ​​ունեք մեծ նախագիծ կամ սահմանափակ ռեսուրսներով սերվեր, ապա հաճախ կտեսնեք «504 Gateway Time-out» սխալը:

Դուք կարող եք հետևել ստորև նշված քայլերին, որպեսզի ավելացնեք ժամանակի դադարի արժեքը: PHP-ում կանխադրվածը 30 վայրկյան է:

Փոփոխություններ php.ini-ում

Եթե ​​ցանկանում եք փոխել PHP սկրիպտների առավելագույն կատարման ժամանակը 30 վայրկյանից (կանխադրված) մինչև 300 վայրկյան:

Նանո /etc/php5/fpm/php.ini

Տեղադրել...

Max_execution_time = 300

Apache-ում PHP-ն աշխատում է որպես մոդուլ, այս փոփոխությունները բավական կլինեն: Բայց մեր դեպքում էլի մի քանի տեղ փոփոխություններ պետք է անենք։

Փոփոխություններ PHP-FPM-ում

Սա անհրաժեշտ է, եթե ավելի վաղ չմեկնաբանել եք request_terminate_timeout պարամետրը: Լռելյայնորեն այն մեկնաբանվում է և վերցնում է max_execution_time գտնված արժեքը php.ini-ից

Բացում...

Նանո /etc/php5/fpm/pool.d/www.conf

Տեղադրվում է...

Request_terminate_timeout = 300

Փոփոխություններ Nginx Config-ում

Մեկ տիրույթի համար ժամկետի ավելացում example.com

Nano /etc/nginx/sites-available/example.com գտնվելու վայրը ~ \.php$ (ներառում է /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_read_timeout 300; }

Եթե ​​ցանկանում եք մեծացնել ձեր սերվերի բոլոր տիրույթների ժամկետը, կարող եք խմբագրել հիմնական nginx.conf կազմաձևման ֆայլը.

Նանո /etc/nginx/nginx.conf

http(..) բաժնում ավելացրեք հետևյալ պարամետրը

Http (#... fastcgi_read_timeout 300; #... }

Դուք երբևէ սխալ եք ստացել Ճակատագրական սխալ. կատարման առավելագույն ժամանակը գերազանցել է 30 վայրկյանը WordPress-ում? Այս սխալը նշանակում է, որ գործող PHP սկրիպտը ավարտելու համար ավելի շատ ժամանակ է պահանջել, քան սահմանված սահմանաչափը, և դրա պատճառով սկրիպտը դադարեցվել է: Այս ուղեցույցը կօգնի ձեզ հասկանալ այն հարցը, թե ինչպես ավելացնել PHP-ում սկրիպտի կատարման ժամանակը և դրանով իսկ լուծել առաջացած սխալը:

Նախքան այս ուղեցույցը սկսելը, ստուգեք, որ ունեք.

  • Մուտք գործեք ձեր WordPress կայքի վարչական վահանակ (անգլերեն)

Քայլ 1 – Տեղադրեք WP Maximum Execution Time Exceeded Plugin-ը

WordPress-ն ունի հսկայական համայնք, այնպես որ կա հարմար հավելված կամ մի քանիսը ձեզ անհրաժեշտ յուրաքանչյուր ֆունկցիոնալության համար: Մեր իրավիճակը բացառություն չէ. PHP-ում սկրիպտի կատարման ժամանակը մեծացնելու համար կարող եք օգտագործել WP Maximum Execution Time Exceeded plugin-ը և ուղղել առաջացած սխալը: Մանրամասն հրահանգներ, թե ինչպես տեղադրել WordPress հավելվածը, կարող եք գտնել:

Այս փլագինը փոփոխություններ է կատարում .htaccess ֆայլում և մեծացնում է սցենարի կատարման ժամկետները: Փլագինը տեղադրելուց հետո այլ բան պետք չէ անել, ամեն ինչ արդեն արված է plugin-ի կողմից։ Փլագինը չունի կարգավորումների էջ, այնպես որ, եթե ցանկանում եք վերադարձնել նախկին կարգավորումները, պարզապես ջնջեք plugin-ը և .htaccess-ը կվերադառնա իր սկզբնական ձևին:

Քայլ 2 – .htaccess ֆայլի ձեռքով խմբագրում

Եթե ​​դուք արդեն ունեք շատ պլագիններ տեղադրված, և չեք ցանկանում լրացուցիչ օգտագործել, կամ դա պարզապես չի օգնել ձեզ ազատվել սխալից, ապա կարող եք ձեռքով փոփոխություններ կատարել .htaccess ֆայլում՝ առավելագույն կատարողականը մեծացնելու համար։ ժամկետը. Օգտագործման ամենահեշտ ձևը Ֆայլերի կառավարիչգտնվում է ձեր կառավարման վահանակում: Եթե ​​չգիտեք, թե ինչպես գտնել .htaccess ֆայլը, խնդրում ենք ծանոթանալ մանրամասն հրահանգներին: Դուք պետք է մուտքագրեք հետևյալ կոդը .htaccess ֆայլի ներքևում և պահպանեք այն սեղմելով Պահպանել:

Php_value max_execution_time 60

Սա կավելացնի max_execution_time պարամետրի արժեքը, իսկ PHP-ի համար՝ սկրիպտի կատարման ժամանակը մինչև 60 վայրկյան (1 րոպե): Եթե ​​դուք դեռ ստանում եք այս սխալը, ապա փորձեք ավելացնել այն էլ ավելի՝ մինչև 120/180 վայրկյան և այլն:

Քայլ 3 – Փոխելով max_execution_time արժեքը cPanel-ում

Եթե ​​դուք օգտագործում եք cPanel, ապա կարող եք ավելացնել max_execution_time պարամետրը անմիջապես cPanel-ի միջոցով: Գնացեք բաժին Ընտրեք PHP տարբերակը (Ընտրեք PHP տարբերակը).

Բարձրացրեք այն արժեքը, որը տեսնում եք տողում max_execution_time. Սովորաբար, լռելյայն սահմանվում է 30 վայրկյան, մեր օրինակում մենք այն հասցրեցինք 60 վայրկյանի: Սեղմել Դիմել(Դիմել) փոփոխությունները պահպանելու համար:

Դա բոլորն են, դուք հաջողությամբ բարձրացրել եք սահմանային պարամետրի արժեքը max_execution_timeձեր կայքի համար:

Եզրակացություն

Հետևելով այս ուղեցույցին՝ դուք սովորել եք ավելացնելու 3 եղանակ max_execution_time WordPress-ի համար՝ PHP-ում սցենարի կատարման ժամանակը փոխելու և սխալից ազատվելու համար Ճակատագրական սխալ. կատարման առավելագույն ժամանակը գերազանցվել է. Եթե ​​դուք օգտագործում եք ընդհանուր հոսթինգ, և լուծումներից ոչ մեկը ձեզ համար չի աշխատում, ապա դիմեք ձեր հոսթինգ մատակարարին՝ ստուգելու, թե որոնք են ձեր իրական սահմանափակումները և արդյոք դրանք ընդհանրապես հնարավոր է փոխել:

Եթե ​​դուք մեծ նախագիծ եք մշակում, ապա որոշ տվյալներ մշակելու համար կարող է շատ ժամանակ պահանջվել: Տարբեր հոսթինգ կայքեր ունեն իրենց սահմանները նման գործողությունների համար, և եթե այս ժամանակը մեծացնելու անհրաժեշտությունը բերեց ձեզ այստեղ, ապա ես ձեզ մանրամասն կպատմեմ, թե ինչպես կարելի է դա անել:

Որպեսզի հասկանաք, թե ինչի մասին է խոսքը, մի փոքրիկ օրինակ բերեմ. Եթե ​​դուք դուրս եք գալիս սահմանված ժամկետից, կարող եք ստանալ հետևյալ սխալը.

Ճակատագրական սխալ. 19-րդ տողում site.php-ում գերազանցվել է 30 վայրկյանի առավելագույն ժամանակը

Ես ձեզ կասեմ դրանից ազատվելու 4 եղանակի մասին։

Բայց արժե սկսել այն փաստից, որ յուրաքանչյուր առանձին դեպքում թվարկված բոլոր մեթոդները կարող են չաշխատել, քանի որ որոշ հոստինգ պրովայդերներ արգելում են փոխել այս պարամետրը:

PHP սկրիպտի կատարման ժամանակի ավելացում php.ini կազմաձևման ֆայլի միջոցով

Որպես սցենարի կատարման ժամանակը մեծացնելու առաջին միջոց՝ մենք կօգտագործենք կազմաձևման ֆայլը php.ini.

Պարզելու համար, թե կոնկրետ որտեղ է գտնվում այս ֆայլը, կարդացեք.

Բացեք այն ձեզ հարմար ձևով և ներքևում տեղադրեք.

Max_execution_time = 300;

որտեղ» 300 «նշանակում է 300 վայրկյան (փոխել քոնը): Այս ֆայլը, ցավոք, հասանելի չէ բոլոր հոսթինգ կայքերում օգտագործողների կողմից խմբագրելու համար:

PHP սկրիպտի կատարման ժամանակի ավելացում ներկառուցված «ini_set» ֆունկցիայի միջոցով

Երկրորդ մեթոդը հիմնված է «գործառույթի օգտագործման վրա. ini_set« Դուք տեղադրում եք այն անմիջապես սցենարի ֆայլի մեջ, ցանկալի է հենց վերևում: Օրինակ:

Այստեղ իմաստը հետևյալն է. 300 «Դուք նույնպես փոխվում եք այն, ինչ ձեզ հարկավոր է վայրկյանների ընթացքում: Նշումոր PHP-ն անվտանգ ռեժիմում օգտագործելիս այս ֆունկցիան հասանելի չի լինի։

PHP սկրիպտի կատարման ժամանակի ավելացում ներկառուցված «set_time_limit» ֆունկցիայի միջոցով

Երրորդ մեթոդը, հավանաբար ամենահայտնիներից մեկն է, օգտագործել « սահմանել_ժամանակ_սահմանափակել» սցենարի կատարման ժամանակը փոխելու համար: Նաև օգտագործվում է անմիջապես PHP ֆայլում: Օրինակ:

այստեղ» 300 «Դուք նույնպես փոխվում եք այն արժեքին, որն անհրաժեշտ է: Ցանկալի է տեղադրել կոդը հենց վերևում:

PHP սկրիպտի կատարման ժամանակի ավելացում .htaccess ֆայլի միջոցով

Վերջին տարբերակը ֆայլը խմբագրելն է .htaccess, որը գտնվում է ձեր կայքի արմատում (եթե այն գոյություն չունի, ստեղծեք այն):

Այս ֆայլի հենց վերևում տեղադրեք.

Php_value max_execution_time 300

Իմաստը" 300 «Դուք էլ փոխեք ձերը։

Նշում, որ բոլոր դեպքերում սկրիպտի կատարման ժամանակը նշվում է վայրկյաններով։ Բացի այդ, պարամետրի արժեքը բոլոր մեթոդներում կարող է վերցնել « 0 », ինչը նշանակում է կատարման անսահմանափակ ժամանակ։

Ինչպե՞ս կարող եմ պարզել, թե որքան ժամանակ է հատկացված PHP սկրիպտը գործարկելու համար:

Այն բանից հետո, երբ փորձեցիք փոխել սցենարի կատարման ժամանակը, օգտագործելով մեթոդներից մեկը, դուք պետք է պարզեք, թե արդյոք ձեզ իսկապես հաջողվել է:

Դա անելու համար ստեղծեք PHP ֆայլ ձեր կայքի արմատում, որտեղ դուք կարտադրեք սահմանված ժամանակի արժեքը.

Եթե ​​ժամանակը հավասար է ձեր նշածին, ապա շնորհավորում ենք, դուք հասել եք ձեր ուզած նպատակին։ Հակառակ դեպքում, նորից կարդացեք հոդվածը, գրեք մեկնաբանություններում ձեր խնդրի մասին կամ փոխանցեք այն ձեր հոսթինգ մատակարարին։

Եթե ​​դուք մեծ նախագիծ եք մշակում, ապա որոշ տվյալներ մշակելու համար կարող է շատ ժամանակ պահանջվել: Տարբեր հոսթինգ կայքեր ունեն իրենց սահմանները նման գործողությունների համար, և եթե այս ժամանակը մեծացնելու անհրաժեշտությունը բերեց ձեզ այստեղ, ապա ես ձեզ մանրամասն կպատմեմ, թե ինչպես կարելի է դա անել:

Որպեսզի հասկանաք, թե ինչի մասին է խոսքը, մի փոքրիկ օրինակ բերեմ. Եթե ​​դուք դուրս եք գալիս սահմանված ժամկետից, կարող եք ստանալ հետևյալ սխալը.

Ճակատագրական սխալ. կատարման առավելագույն ժամանակը 30 վայրկյան գերազանցվել է pandoge_com.php տող 19-ում

Ես ձեզ կասեմ դրանից ազատվելու 4 եղանակի մասին։

Բայց արժե սկսել այն փաստից, որ յուրաքանչյուր առանձին դեպքում թվարկված բոլոր մեթոդները կարող են չաշխատել, քանի որ որոշ հոստինգ պրովայդերներ արգելում են փոխել այս պարամետրը:

PHP սկրիպտի կատարման ժամանակի ավելացում php.ini կազմաձևման ֆայլի միջոցով

Որպես սցենարի կատարման ժամանակը մեծացնելու առաջին միջոց՝ մենք կօգտագործենք կազմաձևման ֆայլը php.ini.

Պարզելու համար, թե կոնկրետ որտեղ է գտնվում այս ֆայլը, կարդացեք.

Բացեք այն ձեզ հարմար ձևով և ներքևում տեղադրեք.

Max_execution_time = 300;

որտեղ» 300 «նշանակում է 300 վայրկյան (փոխել քոնը): Այս ֆայլը, ցավոք, հասանելի չէ բոլոր հոսթինգ կայքերում օգտագործողների կողմից խմբագրելու համար:

PHP սկրիպտի կատարման ժամանակի ավելացում ներկառուցված «ini_set» ֆունկցիայի միջոցով

Երկրորդ մեթոդը հիմնված է «գործառույթի օգտագործման վրա. ini_set« Դուք տեղադրում եք այն անմիջապես սցենարի ֆայլի մեջ, ցանկալի է հենց վերևում: Օրինակ:

Այստեղ իմաստը հետևյալն է. 300 «Դուք նույնպես փոխվում եք այն, ինչ ձեզ հարկավոր է վայրկյանների ընթացքում: Նշումոր PHP-ն անվտանգ ռեժիմում օգտագործելիս այս ֆունկցիան հասանելի չի լինի։

PHP սկրիպտի կատարման ժամանակի ավելացում ներկառուցված «set_time_limit» ֆունկցիայի միջոցով

Երրորդ մեթոդը, հավանաբար ամենահայտնիներից մեկն է, օգտագործել « սահմանել_ժամանակ_սահմանափակել» սցենարի կատարման ժամանակը փոխելու համար: Նաև օգտագործվում է անմիջապես PHP ֆայլում: Օրինակ:

այստեղ» 300 «Դուք նույնպես փոխվում եք այն արժեքին, որն անհրաժեշտ է: Ցանկալի է տեղադրել կոդը հենց վերևում:

PHP սկրիպտի կատարման ժամանակի ավելացում .htaccess ֆայլի միջոցով

Վերջին տարբերակը ֆայլը խմբագրելն է .htaccess, որը գտնվում է ձեր կայքի արմատում (եթե այն գոյություն չունի, ստեղծեք այն):

Այս ֆայլի հենց վերևում տեղադրեք.

Php_value max_execution_time 300

Իմաստը" 300 «Դուք էլ փոխեք ձերը։

Նշում, որ բոլոր դեպքերում սկրիպտի կատարման ժամանակը նշվում է վայրկյաններով։ Բացի այդ, պարամետրի արժեքը բոլոր մեթոդներում կարող է վերցնել « 0 », ինչը նշանակում է կատարման անսահմանափակ ժամանակ։

Ինչպե՞ս կարող եմ պարզել, թե որքան ժամանակ է հատկացված PHP սկրիպտը գործարկելու համար:

Այն բանից հետո, երբ փորձեցիք փոխել սցենարի կատարման ժամանակը, օգտագործելով մեթոդներից մեկը, դուք պետք է պարզեք, թե արդյոք ձեզ իսկապես հաջողվել է:

Դա անելու համար ստեղծեք PHP ֆայլ ձեր կայքի արմատում, որտեղ դուք կարտադրեք սահմանված ժամանակի արժեքը.

Եթե ​​ժամանակը հավասար է ձեր նշածին, ապա շնորհավորում ենք, դուք հասել եք ձեր ուզած նպատակին։ Հակառակ դեպքում, նորից կարդացեք հոդվածը, գրեք մեկնաբանություններում ձեր խնդրի մասին կամ փոխանցեք այն ձեր հոսթինգ մատակարարին։

Հեղինակից.ընկերոջս տղան այնքան հետաքրքրվեց քիմիայով, որ սկսեց տանը տարբեր «թեստեր» անցկացնել: Այն բանից հետո, երբ խոհանոցի ջահը դարձավ նրանց «զոհը», հայրը նրան խնդրեց փոխել իր նախասիրությունները։ Արդյունքում երեխան հետաքրքրվել է վիճակագրությամբ և որոշել է հաշվարկել մեկ լուցկի այրման միջին ժամանակը։ Արդյունքն այն է եղել, որ ամբողջ բնակարանը գրեթե հրդեհվել է։ Ես ապագա գիտնականին խորհուրդ տվեցի սկսել ծրագրավորումը և սահմանել PHP սկրիպտի կատարման ժամանակը:

Ինչու՞ չափումներ ծրագրավորման մեջ:

Առաջին հերթին դա ավելի անվտանգ է, քան քիմիան և վիճակագրությունը։ Բայց իրականում ծրագրի կոդի կատարման ժամանակը կարևոր պարամետր է, որն ազդում է ամբողջ ռեսուրսի և նրա առանձին մոդուլների աշխատանքի վրա: Այս պարամետրն ավելի մեծ պահանջարկ ունի օպտիմալացման և փորձարկման ժամանակ:

Եկեք մի փոքր պատկերացնենք. Եկեք պատկերացնենք, որ կա ինչ-որ «տնային գրված» շարժիչ, որը մշակողը «վերբեռնել է» լավ հոսթինգ և գործարկել (դրա հիման վրա) իր կայքը։ Բայց ինչ-ինչ պատճառներով ռեսուրսի բեռնումը օգտագործողի կողմից շատ դանդաղ է ընթանում:

Նման իրավիճակում ի սկզբանե բոլոր բշտիկները կընկնեն հյուրընկալողի վրա: Ամենայն հավանականությամբ, զայրացած ծրագրավորողը բողոք կներկայացնի հոսթինգի աջակցության ծառայությանը: Ասում են՝ պայմանագրի պայմանները չեն կատարվում, կայքը հազիվ «կենդանի» է...

Բայց իրականում դինամիկ ռեսուրսի էջերի դանդաղ բեռնման խնդիրը կարող է թաքնված լինել հենց շարժիչում: Եվ որպեսզի հետագայում «դումմի» չնմանվի, փորձառու մշակողը միշտ չափում է PHP սկրիպտի կատարման ժամանակը նախքան նախագիծը մատուցելը։

PHP-ի առանձնահատկությունները

Ես այն միշտ անվանել եմ ծրագրավորման ամենահարմար լեզուներից մեկը։ Կոդի գործարկման ժամանակին հետևելու համար մշակողը կարիք չունի գրել երկար «թալմուդներ»՝ սցենարի յուրաքանչյուր տող ընդհատելու համար: Այս տեխնոլոգիան իրականացնում է մի քանի մասնագիտացված գործիքներ: Հիմնականը microtime() ֆունկցիան է։ Այն վերադարձնում է 1970 թվականի սկզբից անցած ժամանակը (միլիվայրկյաններով): Այսպես կոչված «Յունիքսի դարաշրջանի սկիզբը»: Եթե ​​get_as_float պարամետրը փոխանցեք true արժեքով ֆունկցիային, ապա այն կվերադարձնի ժամանակաշրջանը ամբողջ վայրկյանների և կոտորակային միլիվայրկյանների տեսքով:

Microtime()-ի օգտագործման սկզբունքը հետևյալն է՝ ֆունկցիան կանչվում է սկրիպտի սկզբում և վերջում։ Այնուհետև սկզբնական արժեքը հանվում է վերջին արժեքից: Ահա թե ինչպես կարելի է հաշվարկել սցենարի կատարման ժամանակը.

"; $last=microtime(true); $value=$last-$first; echo "Սցենարը կատարվում է հետևյալում. "$value; ?>

Կոդի գործարկման ժամանակը փոխելը

PHP-ում սկրիպտի գործարկման ժամանակի արժեքը կարող է սահմանափակվել ծրագրավորմամբ (նվազել կամ ավելացնել): Դա անելու համար օգտագործվում են մի քանի գործառույթներ, որոնցից յուրաքանչյուրը վերագրանցում է կազմաձևման ֆայլում սահմանված պարամետրը (php.ini):
Նախ, եկեք փոփոխենք մեր կոդը և ավելացնենք ցիկլերի կրկնությունների քանակը 20 անգամ մինչև 200 միլիոն: Եթե ​​ամեն ինչ լավ է, ապա սցենարը գործարկելուց հետո դուք պետք է ստանաք ճակատագրական սխալի հաղորդագրություն:

Սա նշանակում է, որ կարգավորումներում max_execution_time պարամետրը դրված է լռելյայն արժեքի վրա (30 վայրկյան): Եկեք PHP-ում սկրիպտի կատարման առավելագույն ժամանակը 3 անգամ ավելացնենք։

set_time_limit (90);

Այժմ մենք սխալի հաղորդագրություններ չենք ստանում: