Tómt $_ENV fylki í krókskrift virðist sönnun þess að OpenVPN hafi ekki sent neitt. Yfirleitt er það sönnun einhvers allt annars: PHP var stillt þannig að fylla ekki þá ofurbreytu, og gildin sátu í umhverfi ferlisins allan tímann. Önnur ranga niðurstaðan er fíngerðari, því tvær fangabreyturnar í tengikrók þýða ólíka hluti og eru notaðar sitt í staðinn fyrir annað. Bæði mistökin kosta síðdegi ef þú byrjar á því ranga.

Tvö netföng, tvær ólíkar fullyrðingar

Ytri endapunkturinn er það sem þjónninn fylgdist með þegar biðlarinn tengdist, fáanlegur sem trusted_ip fyrir IPv4 og trusted_ip6 fyrir IPv6. Sýndarfangið er það sem laugin úthlutaði fyrir þessa lotu, fáanlegt sem ifconfig_pool_remote_ip.

Þau svara ólíkum spurningum, og færsla þarf yfirleitt annað þeirra frekar en bæði. Hið fyrra er hvaðan tengingin kom, sem getur verið sameiginlegt NAT-fang sem hundruð manna nota. Hið síðara er hvar þessi lota lifir inni í göngunum, og hægt er að úthluta því aftur til annarrar lotu síðar. Að rugla þeim saman framleiðir færslur sem virðast trúverðugar og eru rangar.

Lágmarkslestur lítur svona út.

$outer4 = getenv('trusted_ip');
$outer6 = getenv('trusted_ip6');
$inner  = getenv('ifconfig_pool_remote_ip');
$outer  = $outer4 !== false ? $outer4 : $outer6;

Hvort gildið sem er auðkennir ekki manneskju. Annað er netathugun, hitt er leigusamningur, og færsla sem meðhöndlar hvort sem er sem stöðugan auðkenni tækis verður röng í fyrsta skipti sem biðlari tengist aftur frá öðru neti eða fær annað laugfang. Veldu reitinn eftir þeirri spurningu sem færslan á að svara, og skrifaðu þá spurningu við hlið dálksins.

Athugaðu hvernig PHP var ræst, ekki skelina þína

Krókurinn keyrir sem barn VPN-dæmonsins með umhverfi sem dæmoninn byggir. Gagnvirka skelin þín hefur annað, og að keyra skriftina í höndunum prófar umhverfi skeljarinnar frekar en króksins.

Byrjaðu á að staðfesta að krókurinn hafi raunverulega kviknað á því stigi sem þú bjóst við. Skrift sem er tengd við ranga stigið, eða sem keyrði aldrei því tilskipunin bendir á aðra slóð, gefur nákvæmlega sömu einkenni og breyta sem vantar. Bættu við viljandi merkjarlínu efst í skriftina og staðfestu að hún birtist áður en þú skoðar eitthvað annað. Ein tímasett lína í annálnum aðgreinir aldrei keyrð frá keyrð án gildisins.

Staðfestu svo hvaða túlkur og hvaða stillingarskrá sú köllun notar. Að breyta PHP-stillingum fyrir vefþjón breytir engu um CLI-ferli sem OpenVPN ræsir, og þau tvö geta hlaðið gjörólíkum php.ini skrám.

Hvers vegna tómt $_ENV sannar ekkert

PHP-getenv-tilvísunin lýsir beinum lestri á umhverfi ferlisins, sem skilar false þegar nafnið vantar. Ofurbreytan $_ENV er fyllt sérstaklega, og tilskipunin variables_order ræður því hvaða ofurbreytur eru fylltar.

Ef sú tilskipun sleppir E verður $_ENV tómt hvað sem umhverfið inniheldur. Kóði sem skrásetur það tilkynnir þá breytu sem vantar en er í raun til staðar, og rannsóknin stefnir að OpenVPN á meðan svarið er í php.ini. Athugaðu tilskipunina sérstaklega fyrir CLI-stillinguna, ekki vefþjóninn.

Að lesa með getenv forðast allan þennan flokk ruglings, og umbúðaskrift sem hreinsar umhverfið áður en túlkurinn er kallaður kynnir það aftur í annarri mynd.

Geymdu samtengingu, ekki línuuppfærslu

Ákveddu hvaða gildi færslan þarf áður en þú skrifar hana. Ef markmiðið er að taka fram hvaðan lota kom, geymdu ytri endapunktinn og merktu hann sem athugun. Ef markmiðið er að varpa lotu á gangafang meðan á tengingu stendur, geymdu laugfangið og tengdu það lotunni.

Uppfærðu eftir auðkenndu sjálfsmyndinni og núverandi lotu frekar en eftir hverri línu sem deilir gangafangi, því laugföng eru endurnotuð og seint aftengingaratburður getur annars skrifað yfir gögn nýrri tengingar. Meðhöndlaðu IPv6 með skýrum hætti í stað þess að skrifa hljóðlega aðeins IPv4 gildið. Lína með NULL ytra fang er betri en lína með ranga, því sú fyrri er sýnilega ófullnægjandi.

Tengdu skrifin við lotuauðkennið sem OpenVPN útvegar svo endurtenging búi til nýja færslu í stað þess að breyta þeirri gömlu. Notaðu færibreytusettar setningar og reikning með aðeins þeim heimildum sem aðgerðin þarf. Krókur keyrir með valdi dæmonsins, svo gáleysisleg fyrirspurn er víðtækara vandamál en röng annálslína.

Greindu án þess að henda umhverfinu út

Skráðu hvaða nöfn voru til staðar, hvaða stig keyrði og hvaða túlkur var notaður. Prentaðu ekki allt umhverfið, því krókferli getur erft ótengd gildi sem ættu ekki að enda í annálsskrá.

Sannreyndu eina tengingu frá upphafi til enda: lestu ytri endapunktinn, lestu úthlutaða fangið og staðfestu bæði gegn eigin sýn þjónsins á þá lotu. Þegar parið er staðfest fyrir einn biðlara má treysta samtengingunni annars staðar.

Tengdir greinar