AMcoder - javascript, python, java, html, php, sql

կարո՞ղ եմ փոխել $_SERVER['DOCUMENT_ROOT'] արժեքը:

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

Այժմ, ներառված բոլոր ֆայլերը չեն գտնվել, քանի որ դրանք հղում են կատարվում

include($_SERVER['DOCUMENT_ROOT'].'/Includes/Connect.php'); 

Եվ այսպես շարունակ։

Եթե ​​ստեղծեք ամբողջովին նոր հոսթինգ հաշիվ հենց այս կոնկրետ հաճախորդի համար փորձարկման նպատակով, կարո՞ղ եմ ինչ-որ կերպ փոխել $_SERVER['DOCUMENT_ROOT']-ի արժեքը՝ ներառելով iftc ենթաթղթապանակը, որում գտնվում են ֆայլերը:

php
02.12.2011

  • Եթե ​​դուք կարող եք ստեղծել ենթադոմեյն ձեր հոստինգի հաշվում, այն պետք է ստանա իր սեփական փաստաթղթի արմատը: 03.12.2011
  • Կարծում եմ՝ դա այն է, ինչ ես պատրաստվում եմ անել՝ ի վերջո վերագրելով կոդը՝ համաձայն իմ նախընտրած լուծման՝ ստորև 03.12.2011
  • Ես սկսեցի օգտագործել __dir__-ը որպես իմ ուղիները նախանշելու միջոց, որը գոնե որոշակի հետևողականություն է բերում հարաբերական ուղիներին, քանի դեռ ամեն ինչ օգտագործում է __dir__ 03.12.2011

Պատասխանները:


1

Իմ նախընտրած լուծումը

Դա անելու մի քանի եղանակ կա, բայց լավագույնը պարզապես գտնել և փոխարինել $_SERVER['DOCUMENT_ROOT']-ի բոլոր կիրառությունները պարզ ֆունկցիայի կանչով:

Այսպիսով, ձեր օրինակը կդառնա.

include(get_my_path() . '/Includes/Connect.php');

Սահմանեք ձեր ընթացիկ գործարկման ռեժիմը.

define('RUN_MODE_PRODUCTION', true); // in live mode
define('RUN_MODE_PRODUCTION', false); // debug mode

Հիմա ֆունկցիայի սահմանման համար.

function get_my_path() {
    if(RUN_MODE_PRODUCTION === true) {
        return '/my/path/';
    }
    return '/my/other/path';
}

$_SERVER-ի իրական արժեքները վերացնելը վատ գաղափար է: Եթե ​​հետո մեկ ուրիշը գա նախագծի վրա աշխատելու, պարզ չի լինի, թե ինչ է կատարվում։

Սա միջավայրերի bootstrapping-ի շատ պարզեցված տարբերակ է, որը ես օգտագործում եմ արտադրության մեջ ամեն օր:

Այնտեղ, որտեղ դուք չեք կարող դա անել

Մեկ այլ միջոց, որը դուք կարող եք դա անել

Երբ ես ստեղծեցի իմ զանգվածային վիրտուալ միջավայրը զարգացման համար, ես հանդիպեցի այս խնդրին: Տես http://blog.simonholywell.com/post/1516566788/team-development-server#virtual_document_root

Քանի որ ես չկարողացա վերացնել $_SERVER['DOCUMENT_ROOT']-ը՝ օգտագործելով վերը նշված մեթոդներից որևէ մեկը, ես ստիպված էի դա անել auto_prepend_file-ում:

Ես խորհուրդ չեմ տա օգտագործել այս տեխնիկան այս կոնկրետ խնդիրը լուծելու համար, սակայն, քանի որ այս դեպքում այն ​​ավելի լավ է լուծել կիրառական մակարդակում:

02.12.2011
  • Բացառությամբ, որ դուք խնդիր ունեք դեպի ֆայլի ճանապարհը, որը ներառում է get_my_path() 25.04.2021

  • 2

    Դուք չեք կարող փոխել DOCUMENT_ROOT միջավայրի փոփոխականը PHP-ից առաջ: (Եթե դուք չեք զբաղվում CGI փաթաթման սցենարով):
    Apache-ն ունի SetEnv հրահանգ, բայց դա չի աշխատի DOCUMENT_ROOT-ի համար (CGI env-ի հատուկ պահանջ): Կարող է դրան այլընտրանքային անուն տալ, սակայն DOC_ROOT2 և այլն:

    Բայց դուք կարող եք գլոբալ կերպով վերացնել այդ փոփոխականը PHP-ի ներսում՝ օգտագործելով php.ini auto_prepend_file պարամետրը, որը նույնպես կարող է սահմանվել՝ օգտագործելով կրկին .htaccess:

    php_value auto_prepend_file ./override_docroot.php
    

    Եվ այդ սցենարն այնուհետև «գլոբալ կերպով» կհարմարեցնի ձեր միջավայրը.

    <?php
       $_SERVER["DOCUMENT_ROOT"] = "..."; 
    
    02.12.2011

    3

    Դա կազմաձևված է վեբ սերվերի միջոցով, ոչ թե PHP-ի միջոցով: Օրինակ, Apache-ում դա DocumentRoot հրահանգն է:

    Ինչո՞ւ փոխարենը չօգտագործել հարաբերական ուղիներ: Դուք կարող եք լիովին անկախ լինել հավելվածի գտնվելու վայրից, եթե օգտագործեք այնպիսի ուղիներ, ինչպիսին ../Includes/Connect.phpն է:

    02.12.2011

    4

    Պարզապես փոխեք DocumentRoot /your/desired/path/-ը Apache-ի կազմաձևման VirtualHost բաժնում այս կայքի համար: Փաստաթղթերը այստեղ են:

    07.06.2018
    Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..