Þróun WordPress frá blogging pallur í fullkomlega viðvaningur CMS, samtímis snýr það í traustan ramma fyrir forritara til að byggja framúrskarandi verkefni og forrit á.

The WordPress kjarna, völd ekki aðeins útgáfubúnað notenda heldur einnig veitir verktaki sterkan hóp af bekkjum, API og hjálparmönnum, sem ætlað er að takast á við fjölbreytt úrval af þörfum.

Eitt af falin gems af WordPress sem gerir forritara kleift að framkvæma aðgerðir með staðbundnu skráarkerfi á öruggan og öflugan hátt er WordPress skráarkerfi API. Það dregur úr skráagerð virkni í safn af almennum óskaðum aðferðum svo að hægt sé að nota þau á öruggan hátt í mismunandi hýsingarumhverfi.

Umfang vandans

Það gæti verið nokkrar ástæður fyrir því að vilja skrifa staðbundnar skrár í kóðanum:

  • Skráning á atburðum eða aðgerðum sem gerðar eru
  • Gögn skipti með ekki WordPress máttur kerfi
  • Öryggisafrit

Óháð hvatningum er hægt að skrifa staðbundnar skrár úr PHP kóða sem geta verið áhættusöm aðgerð. Að minnsta kosti tveir mjög mikilvægar fallgardagar skulu teknar til greina þegar framkvæmdar eru þetta fyrir WordPress þema, tappi eða sérsniðna uppsetningu:

  1. Öryggi. Það er hætta á að skrá eignarhald sé rangt þegar þú skrifar staðbundnar skrár með kóða (af vefþjóninum). Þetta vandamál stafar af illa stilltu samnýttu hýsingarumhverfi og gæti leitt til þess að stjórn á skrám sé týnt.
  2. Samhæfni. Vegna fjölbreytni hýsingarfyrirtækja þarna úti, er framreiðslumaður sérstakrar notandans venjulega óþekktur fyrir framkvæmdaraðila. Þannig getur verktaki ekki verið viss um að heimildir sem krafist er til skrifunaraðgerðar séu unnar af notanda tappi eða þema.

Ef WordPress tappi eða þema sem þarf að skrifa staðbundnar skrár er ætlað til opinberrar útgáfu, skal verktaki stöðugt bera þessi mál í huga. Góðu fréttirnar eru þær að WordPress sjálft hefur nú þegar tól til að takast á við þessi vandamál: Skráarkerfi API.

Kynning á WordPress skráakerfi API

Skráarkerfi API var bætt við WordPress í útgáfu 2.6 til að virkja eigin uppfærslu eiginleikar WordPress. Það útskýrir virkni sem þarf til að framkvæma lesa / skrifa aðgerðir á öruggan hátt og á ýmsum tegundum gestgjafa. Það samanstendur af hópaflokkum og gerir þér kleift að velja sjálfkrafa rétta leiðin til að tengjast staðbundinni skráarkerfi, allt eftir því hvaða einstaklingur gestgjafi skipar.

Rökfræði á bak við API er alveg einfalt; það reynir að skrifa staðbundnar skrár beint og ef um er að ræða rangt skráar eignarhald skiptist það á aðra aðferð sem byggir á FTP. Það fer eftir tiltækum PHP bókasöfnum, það finnur viðeigandi leið til að setja upp FTP tengingu (í gegnum tengipunkta eða yfir SSH). Almennt eru eftirfarandi skref nauðsynleg til að vinna með staðbundnum skrám:

Skref 1. Finndu hvaða tengingaraðferð er í boði

WordPress notar get_filesystem_method til að greina framboð á eftirfarandi aðferðum (frá hæsta forgangi að lægsta) Bein, SSH2, FTP PHP Eftirnafn, FTP Sockets.

Skref 2. Fáðu persónuskilríki sem þarf til að finna aðferðina

Ef greindar flutningar þurfa persónuskilríki frá notanda notar WordPress request_filesystem_credentials virka til að sýna beiðni. Aðgerðin er með fjölda breytur sem gerir það kleift að varðveita gögn á milli skjala, biðja um persónuskilríki nokkrum sinnum ef tengingin mistókst og miða á tiltekna möppu inni í WordPress uppsetningu:

request_filesystem_credentials($form_post, $type, $error, $context, $extra_fields);

Með því að gefa upp tómt $ gerð breytu við aðgerðina gætum við neytt það til að framkvæma greiningu á tiltækum tengingaraðferðum, svo það myndi kalla get_filesystem_method fyrir okkur. Á sama tíma getum við þvingað virkni til að nota hvaða tiltekna gerð tengingar með því að tilgreina það með því að nota $ gerðargjaldið.

Þegar ekki er veitt tengingarupplýsingarnar sem krafist er með aðferðinni sem valin er, prenta aðgerðin á formið til að biðja um það:

Conneciton information

Eftir fyrsta beiðni WordPress geymir FTP gestgjafi nafn og notandanafn í gagnagrunninum til framtíðar, en það geymir ekki lykilorðið. Einnig má tilgreina FTP persónuskilríki í wp-config.php skrá með því að nota eftirfarandi stöðvar:

  • FTP_HOST - Hostname miðlarans til að tengjast
  • FTP_USER - notandanafnið til að tengjast
  • FTP_PASS - lykilorðið til að tengjast
  • FTP_PUBKEY - leiðin til almenningslykilsins til að nota fyrir SSH2 tengingu
  • FTP_PRIKEY - leiðin til einkalykilsins til að nota fyrir SSH2 tengingu

Þegar þessi gögn eru geymd í wp-config.php skráin birtist ekki skilríki fyrir beiðnina, en öryggis gallarnir eru verulegar og öryggisaðferðir ættu að vera þrefaldaðar með hæsta athygli sem mögulegt er, ætti að greiða fyrir öryggi þessa skrá.

Skref 3. Upphafðu WordPress skráarkerfið og tengdu við skráarkerfið

Hjarta WordPress skráarkerfisins er WP_Filesystem virka. Það hleðst og frumstillir viðeigandi flutningsflokks, geymir fáanlegt dæmi í heimsvísu $ wp_filesystem mótmæla til frekari notkunar og reynir að tengjast skráarkerfinu með meðfylgjandi persónuskilríki:

WP_Filesystem($args, $context);

Skref 4. Notaðu WordPress skráakerfi aðferðir til að framkvæma lesa / skrifa aðgerðir

A réttur upphaflegur $ wp_filesystem mótmæla hefur sett upp aðferðir til að hafa samskipti við staðbundna skráarkerfið sem hægt væri að nota án frekari kvíða um tengingu. Einkum eru eftirfarandi algengar aðferðir:

  • get_contents - les skrána í streng
  • put_contents - skrifar streng í skrá
  • mkdir - býr til möppu
  • mdir - fjarlægir möppu
  • wp_content_dir - skilar slóðinni á staðbundinni skráarkerfi í wp-innihald möppuna
  • wp_plugins_dir - skilar slóðinni á staðbundnu skráarkerfinu í möppuna
  • wp_themes_dir - skilar slóðinni á staðbundinni skráarkerfi í þemu möppuna

Ef allt er tekið saman, skulum við koma fram dæmi sem framkvæmir ofangreindar skref í einföldu ástandi - við munum skrifa texta sem er lögð inn í textarea í venjulegan .txt skrá.

Athugaðu að þetta dæmi er til sýnis, í raunverulegu ástandi sem þú myndir ekki geyma einfalda texta gögn í .txt skrá, það væri miklu sterkari lausn til að geyma það í gagnagrunninum í staðinn.

The WordPress Skráakerfi API í aðgerð

Við skulum hylja kóðann okkar í sérstökum tappi, sem verður úthlutað eigin skráarkerfi-demómöppu. Það gefur okkur miða möppu til að geyma .txt skrána og athuga skrifleg heimild.

Fyrst af öllu, skulum búa til kynningarsíðuna til að sýna formið okkar undir valmyndinni Verkfæri:

/*** Create Demo page (under Tools menu)***/add_action('admin_menu', 'filesystem_demo_page');function filesystem_demo_page() {add_submenu_page( 'tools.php', 'Filesystem API Demo page', 'Filesystem Demo', 'upload_files', 'filesystem_demo', 'filesystem_demo_screen' );}function filesystem_demo_screen() {$form_url = "tools.php?page=filesystem_demo";$output = $error = '';/*** write submitted text into file (if any)* or read the text from file - if there is no submission**/if(isset($_POST['demotext'])){//new submissionif(false === ($output = filesystem_demo_text_write($form_url))){return; //we are displaying credentials form - no need for further processing}  elseif (is_wp_error ($ framleiðsla)) {$error = $output->get_error_message();$output = '';}  } Annað {// lesið úr fileif (false === ($ output = file system_demo_text_read ($ form_url))) {return;  // við birtum persónuskilríki mynda ekki þörf fyrir frekari vinnslu} elseif (is_wp_error ($ framleiðsla)) {$error = $output->get_error_message();$output = '';}  } $ framleiðsla = esc_textarea ($ framleiðsla);  // sleppa fyrir prentun?> 

Demo síðu skráarkerfis API

Þegar við birtum síðuna okkar (filesystem_demo_screen) við að athuga hvort textinn sé sendur. Ef það er til staðar reynum við að skrifa það í test.txt skrá, annars reynum við að finna slíka skrá í möppu og lesa innihald þess að vera með í textarea. Að lokum prenta út grunnform til að setja inn texta. Af þeim sökum læsileika voru þessar ritunar- og lestaraðgerðir aðskilin í eigin störf.

Filesystem API demo

Til að koma í veg fyrir tvíverknað sömu upphafsstíga hefur samnýtt hjálparstarf verið búið til. Það kallar request_filesystem_credentials fyrst til að greina tiltæka tengingaraðferðina og fá aðgangsorð. Ef það náði árangri kallar það þá WP_Filesystem til að hefja $ wp_filesystem með gefnum gögnum.

/*** Initialize Filesystem object** @param str $form_url - URL of the page to display request form* @param str $method - connection method* @param str $context - destination folder* @param array $fields - fileds of $_POST array that should be preserved between screens* @return bool/str - false on failure, stored text on success**/function filesystem_init($form_url, $method, $context, $fields = null) {global $wp_filesystem;/* first attempt to get credentials */if (false === ($creds = request_filesystem_credentials($form_url, $method, false, $context, $fields))) {/*** if we comes here - we don't have credentials* so the request for them is displaying* no need for further processing**/return false;}/* now we got some credentials - try to use them*/if (!WP_Filesystem($creds)) {/* incorrect connection data - ask for credentials again, now with error message */request_filesystem_credentials($form_url, $method, true, $context);return false;}return true; //filesystem object successfully initiated}

Ritun á skráarnúmeri lítur svona út:

/*** Perform writing into file** @param str $form_url - URL of the page to display request form* @return bool/str - false on failure, stored text on success**/function filesystem_demo_text_write($form_url){global $wp_filesystem;check_admin_referer('filesystem_demo_screen');$demotext = sanitize_text_field($_POST['demotext']); //sanitize the input$form_fields = array('demotext'); //fields that should be preserved across screens$method = ''; //leave this empty to perform test for 'direct' writing$context = WP_PLUGIN_DIR . '/filesystem-demo'; //target folder$form_url = wp_nonce_url($form_url, 'filesystem_demo_screen'); //page url with nonce valueif(!filesystem_init($form_url, $method, $context, $form_fields))return false; //stop further processign when request form is displaying/** now $wp_filesystem could be used* get correct target file first**/$target_dir = $wp_filesystem->find_folder($context);$target_file = trailingslashit($target_dir).'test.txt';/* write into file */if(!$wp_filesystem->put_contents($target_file, $demotext, FS_CHMOD_FILE))return new WP_Error('writing_error', 'Error when writing file'); //return error objectreturn $demotext;}

Í þessum hluta skilgreindum við nokkrar nauðsynlegar breytur:

  • $ demotext - sendur texti til að skrifa
  • $ form_fields - hlutur í $ _POST arrayinu sem geymir texta okkar og ætti að varðveita
  • $ aðferð - samgöngur aðferð, við skiljum það autt til að greina sjálfkrafa
  • $ samhengi - miða möppu (einn viðbót)

Eftir það hófst við alþjóðlegt $ wp_filesystem mótmæla með hjálp hjálparinnar sem ég lýsti áðan. Ef velgengni finnst rétta leiðin að miða möppunni og skrifaðu inn textann inn í það með því að nota put_contents aðferð við $ wp_filesystem mótmæla.

Kóðinn til að lesa úr skránni lítur svona út:

/*** Read text from file** @param str $form_url - URL of the page where request form will be displayed* @return bool/str - false on failure, stored text on success**/function filesystem_demo_text_read($form_url){global $wp_filesystem;$demotext = '';$form_url = wp_nonce_url($form_url, 'filesystem_demo_screen');$method = ''; //leave this empty to perform test for 'direct' writing$context = WP_PLUGIN_DIR . '/filesystem-demo'; //target folderif(!filesystem_init($form_url, $method, $context))return false; //stop further processing when request forms displaying/** now $wp_filesystem could be used* get correct target file first**/$target_dir = $wp_filesystem->find_folder($context);$target_file = trailingslashit($target_dir).'test.txt';/* read the file */if($wp_filesystem->exists($target_file)){ //check for existence$demotext = $wp_filesystem->get_contents($target_file);if(!$demotext)return new WP_Error('reading_error', 'Error when reading file'); //return error object}return $demotext;}

Þessi aðgerð virkar á sama hátt og áður lýst, en það notar get_contents til að lesa úr miða skrá.

Niðurstaða

Þegar unnið er með staðbundnum skrám mun WordPress þemu eða viðbætur verktaki komast í snertingu við öryggis- og eindrægni, leggja mikla áherslu á liðið og bæta langan tíma við verkefnið. Með því að treysta á skráarkerfi API geta þessi vandamál verið styttri á skilvirkan hátt. Svo í næsta skipti sem þú finnur sjálfan þig að skrifa texta í kóða tappi þinnar skaltu íhuga þetta val heilbrigðari valkostur.

Þú getur hlaða niður kynningu á þessum kóða hér , og aðlaga það að þínum þörfum.