Php උච්චාරණය කරන ආකාරය. php හි ගොනු සමඟ වැඩ කිරීම: විවෘත කිරීම, ලිවීම, කියවීම. සාම්ප්රදායික fopen ක්රම

අවසන් යාවත්කාලීනය: 11/1/2015

බොහෝ ක්‍රමලේඛන භාෂා මෙන්, PHP තොරතුරු ගබඩා කිරීමේ එක් ක්‍රමයක් වන ගොනු සමඟ වැඩ කිරීමට සහය දක්වයි.

ලිපිගොනු කියවීම සහ ලිවීම

ගොනු විවෘත කිරීම සහ වසා දැමීම

PHP හි ගොනු විවෘත කිරීමට, fopen() ශ්‍රිතය අර්ථ දක්වා ඇත. එයට පහත අර්ථ දැක්වීම ඇත: resource fopen(string $filename, string $mode) . පළමු $filename පරාමිතිය ගොනුව වෙත මාර්ගය නියෝජනය කරයි, සහ දෙවන විවෘත කිරීමේ මාදිලිය වේ. විවෘත කිරීමේ අරමුණ සහ ගොනු වර්ගය අනුව, මෙම පරාමිතිය පහත අගයන් ගත හැක:

    "r" : ගොනුව කියවීමට පමණක් විවෘත වේ. ගොනුව නොමැති නම්, අසත්‍යය ලබා දෙයි

    "r+" : ගොනුව කියවීමට පමණක් සහ ලිවිය හැකි ලෙස විවෘත වේ. ගොනුව නොමැති නම්, අසත්‍යය ලබා දෙයි

    "w" : ගොනුව ලිවීම සඳහා විවෘත වේ. එවැනි ගොනුවක් දැනටමත් තිබේ නම්, එය නැවත ලියනු ලැබේ, එසේ නොවේ නම්, එය සාදනු ලැබේ.

    "w+" : ගොනුව ලිවීමට සහ කියවිය හැකි ලෙස විවෘත වේ. එවැනි ගොනුවක් දැනටමත් තිබේ නම්, එය නැවත ලියනු ලැබේ, එසේ නොවේ නම්, එය සාදනු ලැබේ.

    "a" : ගොනුව ලිවීම සඳහා විවෘත වේ. එවැනි ගොනුවක් දැනටමත් තිබේ නම්, එම දත්ත ගොනුවේ අවසානය දක්වා ලියා ඇති අතර පැරණි දත්ත ඉතිරි වේ. ගොනුව නොමැති නම්, එය සාදනු ලැබේ

    "a+" : ගොනුව කියවීම සහ ලිවීම සඳහා විවෘත වේ. ගොනුව දැනටමත් තිබේ නම්, දත්ත ගොනුවේ අවසානයට එකතු කරනු ලැබේ. ගොනුව නොමැති නම්, එය සාදනු ලැබේ

fopen ශ්‍රිතයේ ප්‍රතිදානය ගොනු විස්තරයක් වනු ඇත. මෙම හසුරුව ගොනු මෙහෙයුම් සඳහා සහ ගොනුව වසා දැමීමට භාවිතා කරයි.

වැඩ නිම කිරීමෙන් පසු, ගොනු විස්තරයක් පරාමිතියක් ලෙස ගන්නා fclose() ශ්‍රිතය භාවිතයෙන් ගොනුව වසා දැමිය යුතුය. උදාහරණයක් ලෙස, අපි ගොනුවක් විවෘත කර වසා දමමු:

$fd = fopen("form.php", "r") හෝ die("ගොනුව විවෘත කිරීමට නොහැකි විය"); fclose ($ fd);

හෝ ඩයි("දෝෂ පෙළ") ස්ට්‍රැක්ටරය ක්‍රියාත්මක වීම නැවැත්වීමට සහ fopen ශ්‍රිතයට ගොනුව විවෘත කිරීමට නොහැකි වූ විට යම් දෝෂ පණිවිඩයක් පෙන්වීමට ඉඩ ලබා දේ.

ගොනුවක් කියවීම

ගොනුවක් කියවීමට ඔබට කාර්යයන් කිහිපයක් භාවිතා කළ හැකිය. පේළියෙන් පේළි කියවීම සඳහා, fgets() ශ්‍රිතය භාවිතා කරනු ලැබේ, එය ගොනු විස්තරයක් ලබා ගන්නා අතර එක් පේළියක් කියවීම ලබා දෙයි. අපි පේළියෙන් සම්පූර්ණ ගොනුව හරහා යමු:

fgets() අමතන සෑම අවස්ථාවකම, PHP විසින් කියවන පේළියේ අවසානයේ පොයින්ටරය තබයි. ගොනුවක අවසානය හඹා යාමට, feof() ශ්‍රිතය භාවිතා වේ, එය ගොනුව සම්පුර්ණ වූ විට සත්‍ය වේ. තවද ගොනුවේ අවසානයට ළඟා වන තුරු, අපට fgets() ශ්‍රිතය භාවිතා කළ හැක.

සම්පූර්ණ ගොනුව කියවීම

මෙම අවස්ථාවේදී, අපි ගොනුව පැහැදිලිව විවෘත කිරීමට, හසුරුව ලබා ගැනීමට සහ ගොනුව වසා දැමීමට අවශ්ය නොවේ.

කියවීම අවහිර කරන්න

ඔබට බ්ලොක් බයි-බ්ලොක් කියවීමක් ද කළ හැකිය, එනම් fread() ශ්‍රිතය භාවිතයෙන් ගොනුවකින් නිශ්චිත බයිට් සංඛ්‍යාවක් කියවන්න:

fread() ශ්‍රිතය පරාමිති දෙකක් ගනී: කියවීමට ගොනු හසුරුව සහ කියවීමට බයිට් ගණන. බ්ලොක් එකක් කියවන විට, ගොනුවේ ඇති පොයින්ටරය එම බ්ලොක් එකේ කෙළවරට ගමන් කරයි. තවද feof() ශ්‍රිතය භාවිතා කිරීමෙන් ඔබට ගොනුවක් සම්පූර්ණ වීම නිරීක්ෂණය කළ හැක.

ගොනුවක් ලියන්න

ගොනුවක් ලිවීමට, fwrite() ශ්‍රිතය භාවිතා කරන්න, එය ගොනුවට පහත පේළිය ලියයි:

තවත් fputs() ශ්‍රිතයක් එලෙසම ක්‍රියා කරයි:

ගොනු දර්ශකය සමඟ වැඩ කිරීම

"w" ආකාරයෙන් කියවීම හෝ ලිවීම සඳහා ගොනුවක් විවෘත කරන විට, ගොනුවේ දර්ශකය ආරම්භයේ තබා ඇත. දත්ත කියවන විට, PHP ගොනුවේ ඇති පොයින්ටරය දත්ත කියවීමේ කොටසේ අවසානයට ගෙන යයි. කෙසේ වෙතත්, අපට ගොනුවේ ඇති පොයින්ටරය අතින් හැසිරවිය හැකි අතර එය අත්තනෝමතික ස්ථානයකට සැකසිය හැක. මෙය සිදු කිරීම සඳහා ඔබ කාර්යය භාවිතා කළ යුතුය fseek, පහත විධිමත් අර්ථ දැක්වීම ඇත:

Int fseek (සම්පත් $handle , int $offset [, int $whence = SEEK_SET ])

$හැන්ඩ්ල් පරාමිතිය ගොනු හසුරුව නියෝජනය කරයි. $offset පරාමිතිය යනු කියවීම / ලිවීම ආරම්භ වන ගොනුවේ ආරම්භයට සාපේක්ෂව බයිට් වල ඕෆ්සෙට් වේ. තුන්වන විකල්ප පරාමිතිය ඕෆ්සෙට් සකසන ආකාරය නියම කරයි. එය අගයන් තුනක් ගත හැක:

    SEEK_SET : පෙරනිමි අගය, ගොනුවේ ආරම්භයට සාපේක්ෂව ඕෆ්සෙට් බයිට් වලින් සකසයි

    SEEK_CUR : ගොනුවේ වත්මන් ස්ථානයේ ආරම්භයට සාපේක්ෂව ඕෆ්සෙට් බයිට් වලින් ඕෆ්සෙට් සකසයි

    SEEK_END : ගොනුවේ අවසානයේ සිට ඕෆ්සෙට් බයිට් වලට ඕෆ්සෙට් සකසයි

පොයින්ටරය සාර්ථකව ස්ථාපනය කර ඇත්නම්, fseek() ශ්‍රිතය 0 ලබා දෙයි, සහ දර්ශකය අසාර්ථක නම්, එය -1 ලබා දෙයි.

කාර්යය භාවිතා කිරීමේ උදාහරණය:

$fd = fopen("hello.txt", "w+") හෝ die("ගොනුව විවෘත කිරීමට නොහැකි විය"); $str = "Hello world!"; // fwrite ලිවීමට රේඛාව ($fd, $str); // fseek ($fd, 0) ආරම්භයට රේඛාව ලියන්න; // ගොනු දර්ශකය ආරම්භයේ තබන්න fwrite ($fd, "Oink"); // fseek ($fd, 0, SEEK_END) ආරම්භයේ දී රේඛාව ලියන්න; // පොයින්ටරය අවසානයේ fwrite ($fd, $str); // fclose ($fd) අවසානයේ තවත් පේළියක් ලියන්න;

fopen, fclose, feof, fgets, fgetss, සහ fscanf ශ්‍රිත භාවිතා කිරීම ගැන

අපි සියලු හැකියාවන් ලැයිස්තුගත කරමු

PHP වැනි නවීන ක්‍රමලේඛන භාෂා සමඟ වැඩ කිරීමේ එක් ප්‍රතිලාභයක් වන්නේ පවතින විශේෂාංග ගණනයි. PHP හට පර්ල්ගේ ආදර්ශ පාඨය, "යමක් කිරීමට ක්‍රම එකකට වඩා තිබේ", විශේෂයෙන්ම ගොනු සැකසීමේදී භාවිතා කළ හැක. නමුත් පවතින මෙවලම් රාශියක් සමඟ, කාර්යය ඉටු කිරීම සඳහා වඩාත් සුදුසු කුමන එකද යන්න ප්‍රශ්නය බවට පත්වේ. ඇත්ත වශයෙන්ම, මෙම ප්‍රශ්නයට පිළිතුර ඇත්ත වශයෙන්ම රඳා පවතින්නේ ගොනුව සැකසීමේදී ඔබේ ඉලක්ක මොනවාද යන්න මතය, එබැවින් භාෂාවේ සියලු හැකියාවන් ඉගෙනීම ඔබේ කාලය වටී.

සාම්ප්රදායික fopen ක්රම

ඔබ එම ක්‍රමලේඛන භාෂා සමඟ වැඩ කර ඇත්නම්, වසර ගණනාවක් තිස්සේ ඔබේ ඇඟිලි තුඩුවල ඇති මෙවලම් අඩු වැඩි වශයෙන් නිසා fopen ක්‍රම සමහර විට අතීතයේ C සහ C++ ක්‍රමලේඛකයින්ට වඩාත් හුරුපුරුදු විය හැකිය. මෙම ඕනෑම ක්‍රමයක් සඳහා, ඔබ සම්මත ක්‍රියා පටිපාටිය අනුගමනය කරයි, ගොනුව විවෘත කිරීමට fopen භාවිතා කිරීම, දත්ත කියවීමට ශ්‍රිතයක්, පසුව ලැයිස්තුගත කිරීම 1 හි පෙන්වා ඇති පරිදි ගොනුව වැසීමට fclose.

ලැයිස්තුගත කිරීම 1. fgets භාවිතයෙන් ගොනුවක් විවෘත කිරීම සහ කියවීම
$file_handle = fopen("myfile", "r"); while (!feof($file_handle)) ($line = fgets($file_handle); echo $line; ) fclose($file_handle);

මෙම කාර්යයන් බොහෝ පළපුරුදු ක්‍රමලේඛකයින්ට හුරුපුරුදු වුවද, ඒවා ක්‍රියා කරන ආකාරය විශ්ලේෂණය කිරීමට මට ඉඩ දෙන්න. යථාර්ථයේ දී ඔබ පහත පියවර අනුගමනය කරයි:

  1. ගොනුව විවෘත කරන්න. $file_handle ගොනුවටම සබැඳියක් ගබඩා කරයි.
  2. ඔබ ගොනුවේ අවසානයට පැමිණ ඇත්දැයි බැලීමට පරීක්ෂා කරන්න.
  3. ඔබ කියවන සෑම පේළියක්ම මුද්‍රණය කරමින් අවසානයට පැමිණෙන තෙක් ගොනුව කියවීම දිගටම කරගෙන යන්න.
  4. ගොනුව වසන්න.

එය මනසේ තබාගෙන, මම මෙහි භාවිතා කරන එක් එක් ගොනු කාර්යය දෙස බලමි.

fopen කාර්යය

fopen ශ්රිතය ගොනුවකට සම්බන්ධතාවයක් ස්ථාපිත කරයි. ගොනුවක් විවෘත කිරීමට අමතරව, fopen හට URL එකක් ද විවෘත කළ හැකි නිසා මම "සම්බන්ධතාවයක් ස්ථාපිත කරයි" යැයි කියමි:

$fh = fopen("http://127.0.0.1/", "r");

මෙම වැඩසටහන් පෙළ ඉහත පිටුවට සබැඳියක් සාදන අතර එය දේශීය ගොනුවක් ලෙස කියවීම ආරම්භ කිරීමට ඔබට ඉඩ සලසයි.

සටහන: fopen හි භාවිතා වන "r" විකල්පය මඟින් ගොනුව කියවීමට පමණක් විවෘතව පවතින බව පෙන්නුම් කරයි. ගොනුවකට ලිවීම මෙම ලිපියේ සාකච්ඡා කර ඇති ගැටළු වල විෂය පථයට ඇතුළත් කර නොමැති බැවින්, මම පරාමිතියේ හැකි සියලුම අගයන් ලැයිස්තුගත නොකරමි. කෙසේ වෙතත්, ඔබ හරස් වේදිකා ගැළපුම සඳහා ද්විමය වලින් කියවන්නේ නම් "r" "rb" ලෙස වෙනස් කළ යුතුය. මෙම වර්ගයේ උදාහරණයක් පහත දැක්වේ.

feof කාර්යය

feof විධානය මඟින් කියවීම ගොනුවේ අවසානයට පැමිණ තිබේද යන්න තීරණය කර සත්‍ය හෝ අසත්‍ය ලබා දෙයි. පෙන්වා ඇති ලූපය "myfile" ගොනුවේ අවසානය දක්වා පවතී. ඔබ URL එකක් කියවන්නේ නම් සහ කියවීමට තවත් දත්ත නොමැති නිසා සම්බන්ධතා කාලය අවසන් වුවහොත් feof ද False ලබා දෙන බව සලකන්න.

Fclose කාර්යය

අපි ලැයිස්තුගත කිරීම් 1 හි මැද මඟ හැර අවසානයට යමු; fclose fopen හි ප්‍රතිවිරුද්ධ දෙය කරයි: එය ගොනුව හෝ URL වෙත සම්බන්ධතාවය වසා දමයි. මෙම කාර්යය ක්‍රියාත්මක කිරීමෙන් පසු, ඔබට තවදුරටත් ගොනුවෙන් හෝ සොකට් එකෙන් කියවීමට නොහැකි වනු ඇත.

fgets කාර්යය

ලැයිස්තුගත කිරීම් 1 හි පේළි කිහිපයක් ආපසු යාම, ඔබ ගොනු සැකසුම් ක්රියාවලියේ හදවතට පැමිණේ: ඇත්ත වශයෙන්ම ගොනුව කියවීම. පළමු උදාහරණය සඳහා fgets ශ්‍රිතය ඔබේ තේරීමේ ආයුධයයි. එය ගොනුවකින් දත්ත රේඛාවක් අල්ලාගෙන එය තන්තුවක් ලෙස ලබා දෙයි. එතැන් සිට ඔබට දත්ත පෙන්වීමට හෝ වෙනත් ආකාරයකින් එය සැකසීමට හැකිය. ලැයිස්තුගත කිරීම 1 හි උදාහරණය සම්පූර්ණ ගොනුව මුද්රණය කරයි.

ඔබ වැඩ කරන දත්ත කුට්ටියේ ප්‍රමාණය සීමා කිරීමට ඔබ තීරණය කරන්නේ නම්, ග්‍රහණය කර ගන්නා දත්ත තන්තුවේ උපරිම දිග සීමා කිරීමට ඔබට fgets තර්කයක් එක් කළ හැක. උදාහරණයක් ලෙස, රේඛාවක දිග අක්ෂර 80 දක්වා සීමා කිරීමට පහත කේතය භාවිතා කරන්න:

$string = fgets($file_handle, 81);

"\0" ගැන සිතන්න, C හි අවසාන රේඛාවේ දර්ශකය, සහ ඔබට ඇත්ත වශයෙන්ම අවශ්‍ය ප්‍රමාණයට වඩා දිග එක් අක්ෂරයකට දිග සකසන්න. ඔබට පෙනෙන පරිදි, ඉහත උදාහරණය 81 භාවිතා කරයි, නමුත් ඔබට අක්ෂර 80 ක් අවශ්‍ය වේ. දී ඇති ශ්‍රිතයක් සඳහා ඔබට රේඛා දිග සීමාවක් සැකසීමට අවශ්‍ය වූ විට අමතර අක්ෂරයක් එක් කිරීම පුරුද්දක් කර ගන්න.

fread කාර්යය

fgets ශ්‍රිතය යනු ගොනුවක් කියවීම සඳහා පවතින බොහෝ ශ්‍රිතයන්ගෙන් එකක් පමණි. මෙය වඩාත් බහුලව භාවිතා වන කාර්යයන්ගෙන් එකකි, බොහෝ අවස්ථාවලදී ගොනු පේළියකින් සැකසීම වඩාත් අර්ථවත් කරයි. ඇත්ත වශයෙන්ම, තවත් විශේෂාංග කිහිපයක් සමාන හැකියාවන් ලබා දෙයි. එය එසේ වුවද, පේළියෙන් පේළි විශ්ලේෂණය ඔබට අවශ්‍ය දේ නොවේ.

මෙන්න අපි fread වෙත පිවිසෙමු. fread ශ්‍රිතයට fgets වලට වඩා තරමක් වෙනස් අරමුණක් ඇත: එය ද්විමය ගොනු වලින් කියවීමට අදහස් කරයි (එනම්, මිනිසාට කියවිය හැකි පෙළ වලින් මුලින් සමන්විත නොවන ගොනු). ද්විමය ගොනු සඳහා "රේඛා" යන සංකල්පය අදාළ නොවන බැවින් (තාර්කික දත්ත ව්‍යුහයන් සාමාන්‍යයෙන් රේඛා වලට කැඩී නැත), ඔබ කියවිය යුතු බයිට් ගණන සඳහන් කළ යුතුය.

$fh = fopen("myfile", "rb"); $data = fread($file_handle, 4096);

ඉහත උදාහරණයෙන් බයිට් 4096 (4 KB) දත්ත කියවයි. ඔබ සඳහන් කළ අගය කුමක් වුවත්, fread උපරිම බයිට් 8192 (8 KB) කියවන බව සලකන්න.

ගොනුව 8 KB ට වඩා විශාල නොවේ යැයි උපකල්පනය කළහොත්, පහත ක්‍රමලේඛ ස්නිපටය සම්පූර්ණ ගොනුව එක පේළියකින් කියවිය යුතුය.

$fh = fopen("myfile", "rb"); $data = fread($fh, filesize("myfile")); fclose ($fh);

ගොනු ප්‍රමාණය විශාල නම්, ඔබට එහි ඉතිරි කොටස කියවීමට ලූපයක් භාවිතා කිරීමට සිදුවේ.

fscanf කාර්යය

තන්තු සැකසීම වෙත ආපසු යාම, fscanf යනු සම්ප්‍රදායික C ගොනු පුස්තකාල ශ්‍රිතයේ අනුප්‍රාප්තිකයා වේ.ඔබට එය හුරු නැතිනම් fscanf ගොනුවකින් දත්ත ක්ෂේත්‍ර විචල්‍ය වලට කියවයි.

ලැයිස්තුව ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");

මෙම ශ්‍රිතයේ භාවිතා වන ආකෘති තන්තු PHP.net වැනි බොහෝ මූලාශ්‍රවල විස්තර කර ඇත, එබැවින් මම මෙම තොරතුරු මෙහි නැවත නොකියමි. තන්තු හැඩතල ගැන්වීම ඉතා නම්‍යශීලී බව පැවසීම ප්‍රමාණවත්ය. සියලුම ක්ෂේත්‍ර ශ්‍රිතය මඟින් ආපසු ලබා දෙන විචල්‍යයේ තබා ඇති බව ද සඳහන් කළ යුතුය. (C හි, මේවා තර්ක ලෙස සම්මත වේ.)

fgetss කාර්යය

fgetss ශ්‍රිතය සම්ප්‍රදායික ගොනු හැසිරවීමේ ශ්‍රිතවලට වඩා වෙනස් වන අතර ඔබට PHP හි හැකියාවන් පිළිබඳ වඩා හොඳ අවබෝධයක් ලබා දේ. එය fgets මෙන් ක්‍රියා කරයි, නමුත් එය හඳුනා ගන්නා ඕනෑම HTML හෝ PHP ටැග් ඉවත දමයි, හිස් අකුරු පමණක් ඉතිරි කරයි. අපි පහත HTML ගොනුව ගනිමු.

ලැයිස්තුගත කිරීම 2. උදාහරණ HTML ගොනුව
මගේ මාතෘකාව

"ඔබට වේදනාවක් ලබා දීමට කිසිවෙකු නොමැති නිසා" යන්නෙන් අදහස් කරන්නේ කුමක්ද යන්න ඔබට වැටහෙන්නේ නම්, ඔබ ඇමරිකාවේ සංගීත කණ්ඩායමට ඕනෑවට වඩා සවන් දෙන්න.



අපි එය fgetss ශ්‍රිතය හරහා යමු.

ලැයිස්තුගත කිරීම 3. fgetss භාවිතා කිරීම
$file_handle = fopen("myfile", "r"); while (!feof($file_handle)) (echo = fgetss($file_handle); ) fclose($file_handle);

ප්‍රතිදානය ලෙස ඔබට ලැබෙන්නේ මෙයයි:

මගේ මාතෘකාව "ඔබට වේදනාවක් ලබා දීමට කිසිවෙකු නොමැති නිසා" යන්නෙන් අදහස් කරන්නේ කුමක්දැයි ඔබට වැටහෙන්නේ නම්, ඔබ ඇමරිකාවේ සංගීත කණ්ඩායමට ඕනෑවට වඩා සවන් දෙන්න.

fpassthru කාර්යය

ඔබ ගොනුවකින් දත්ත කියවන ආකාරය කුමක් වුවත්, fpassthru ශ්‍රිතය භාවිතයෙන් සම්මත ප්‍රතිදාන නාලිකාව භාවිතයෙන් ඔබට ඉතිරි දත්ත මුද්‍රණය කළ හැක.

fpassthru ($fh);

මෙම ශ්‍රිතය මඟින් දත්ත මුද්‍රණය කරයි, එබැවින් ඔබට එය විචල්‍යයකට දැමීමට අවශ්‍ය නොවේ.

රේඛීය නොවන ගොනු සැකසීම: ගොනුවක් හරහා ගමන් කිරීම

ඇත්ත වශයෙන්ම, ඉහත විස්තර කර ඇති කාර්යයන් ඔබට ගොනුවකින් අනුපිළිවෙලින් කියවීමට පමණක් ඉඩ සලසයි. වඩාත් සංකීර්ණ ගොනු ගොනුවේ ආරම්භයේ හෝ අවසානයේ ගොනුවේ විවිධ කොටස් වෙත ගෙනයාමට අවශ්‍ය විය හැක. මෙය සිදු කිරීම සඳහා ඔබට fseek ශ්‍රිතය අවශ්‍ය වේ.

fseek ($fh, 0);

ඉහත උදාහරණය ගොනුවේ ආරම්භයට ආපසු යයි. ඔබට ගොනුවේ ආරම්භයට යාමට අවශ්‍ය නැතිනම් - කියන්න, එක් කිලෝබයිට් ප්‍රමාණවත් - ඔබ සරලව ලියන්න:

fseek ($fh, 1024);

PHP V4.0 ලෙස, තවත් විකල්ප කිහිපයක් ද තිබේ. උදාහරණයක් ලෙස, ඔබට ඔබගේ වත්මන් ස්ථානයේ සිට බයිට් 100ක් ඉදිරියට ගෙන යාමට අවශ්‍ය නම්, ඔබට පහත කේතය භාවිතා කළ හැක:

fseek ($fh, 100, SEEK_CUR);

එලෙසම, බයිට් 100ක් පසුපසට ගෙනයාම සිදු කරනු ලබන්නේ:

fseek ($fh, -100, SEEK_CUR);

ඔබට ගොනුව අවසන් වීමට පෙර බයිට් 100 ස්ථානය වෙත ආපසු යාමට අවශ්‍ය නම්, ඒ වෙනුවට SEEK_END භාවිතා කරන්න.

fseek($fh, -100, SEEK_END);

නව ස්ථානයට ළඟා වූ පසු, ඔබට දත්ත කියවීමට fgets, fscanf හෝ වෙනත් කාර්යයක් භාවිතා කළ හැක.

සටහන:ඔබට URL එකක් යොමු කරන ගොනු විස්තර සඳහා fseek භාවිතා කළ නොහැක.

සම්පූර්ණ ගොනුවක් අල්ලා ගන්න

දැන් අපි PHP හි අද්විතීය ගොනු සැකසුම් හැකියාවන් කිහිපයක් දෙස බලමු: පේළි එකකින් හෝ දෙකකින් විශාල දත්ත කොටස් සැකසීම. උදාහරණයක් ලෙස, ඔබට ගොනුවක් අල්ලාගෙන එහි සම්පූර්ණ අන්තර්ගතය ඔබේ වෙබ් පිටුවේ පෙන්වන්නේ කෙසේද? හොඳයි, fgets සමඟ ලූපයක් භාවිතා කිරීමේ උදාහරණයක් ඔබ දැක ඇත. නමුත් ඔබට එය පහසු කරන්නේ කෙසේද? fgetcontents භාවිතයෙන් ක්‍රියාවලිය හාස්‍යජනක ලෙස පහසු වන අතර එමඟින් සම්පූර්ණ ගොනුව රේඛාවක් මත තබයි.

$my_file = file_get_contents("myfilename"); echo $my_file;

මෙය හොඳම විකල්පය නොවුනත්, ඔබට මෙම විධානය ඊටත් වඩා කෙටියෙන් ලිවිය හැකිය:

echo file_get_contents("myfilename");

මෙම ලිපිය මූලික වශයෙන් දේශීය ලිපිගොනු සැකසීම කෙරෙහි අවධානය යොමු කරයි, කෙසේ වෙතත්, විස්තර කර ඇති කාර්යයන් භාවිතයෙන් ඔබට වෙනත් වෙබ් පිටු ග්‍රහණය කර ගැනීමට, ප්‍රදර්ශනය කිරීමට සහ විග්‍රහ කිරීමට ද හැකි බව සඳහන් කිරීම වටී.

echo file_get_contents ("http://127.0.0.1/");

මෙම විධානය ඇත්ත වශයෙන්ම සමාන වේ:

$fh = fopen("http://127.0.0.1/", "r"); fpassthru ($fh);

ඔබ මේ උදාහරණ දෙස බලමින් සිතන්නේ "ඒක වැඩ ගොඩක්" කියාය. PHP සංවර්ධකයින් ඔබ සමඟ එකඟ වේ. එබැවින් ඔබට ඉහත විධානය කෙටි කළ හැක:

readfile ("http://127.0.0.1/");

රීඩ්ෆයිල් ශ්‍රිතය මඟින් ගොනුවක හෝ වෙබ් පිටුවක සම්පූර්ණ අන්තර්ගතය පෙරනිමි ප්‍රතිදාන බෆරය වෙත ප්‍රතිදානය කරයි. පෙරනිමියෙන්, මෙම විධානය අසාර්ථක වූ විට දෝෂ පණිවිඩයක් පෙන්වයි. මෙම හැසිරීම වළක්වා ගැනීමට (ඔබට එය අවශ්ය නම්), විධානය උත්සාහ කරන්න:

@readfile ("http://127.0.0.1/");

ඇත්ත වශයෙන්ම, ඔබට ගොනු වල අන්තර්ගතය සැකසීමට අවශ්‍ය නම්, file_get_contents මඟින් ආපසු ලබා දෙන තනි පේළිය බොහෝ විට වැඩිය. ඔබට මුලින්ම එය split() ශ්‍රිතය භාවිතයෙන් කොටස් වලට බෙදීමට අවශ්‍ය විය හැක.

$array = split("\n", file_get_contents("myfile"));

නමුත් ඔබ වෙනුවෙන් කාර්යය ඉටු කරන පරිපූර්ණ සුදුසු කාර්යයක් තිබේ නම් ඔබට මේ සියලු සංකීර්ණත්වය අවශ්ය වන්නේ ඇයි? PHP ගොනුව() ශ්‍රිතය මෙම කාර්යය එක් පියවරකින් ඉටු කරයි: එය ගොනුවේ රේඛා වන මූලද්‍රව්‍ය සහිත තන්තු අරාවක් ලබා දෙයි.

$array = ගොනුව("myfile");

ඉහත උදාහරණ දෙක අතර සුළු වෙනසක් ඇති බව සඳහන් කළ යුතුය. split විධානය මඟින් නව රේඛා ඉවත් කරන අතර, ගොනු විධානය මඟින් අරා රේඛා නව රේඛා වලින් අවසන් කරයි (fgets මෙන්).

කෙසේ වෙතත්, PHP හි හැකියාවන් ඉහත විස්තර කර ඇති ඒවාට වඩා බෙහෙවින් වැඩි ය. ඔබට එක් parse_ini_file විධානයක් සමඟින් සම්පූර්ණ .ini ගොනු PHP ශෛලියෙන් විග්‍රහ කළ හැක. parse_ini_file විධානය Listing 4 හි පෙන්වා ඇති ගොනු වලට සමාන වේ.

ලැයිස්තුගත කිරීම 4. උදාහරණය .ini ගොනුව
; අදහස් දැක්වීමේ නම = "කිං ආතර්" ගවේෂණය = ශුද්ධ ග්‍රේල් ප්‍රියතම වර්ණය සෙවීමට = නිල් සැමුවෙල් ක්ලෙමන්ස් = මාර්ක් ට්වේන් කැරන් ජොන්සන් = හූපි ගෝල්ඩ්බර්ග්

පහත විධාන මඟින් ගොනුවක් අරාවක් ලෙස නිරූපණය කර පසුව අරාව මුද්‍රණය කරන්න:

$file_array = parse_ini_file("holy_grail.ini"); print_r $file_array;

ප්රතිඵලය පහත ප්රතිදානය වනු ඇත:

ලැයිස්තුගත කිරීම 5. ප්රතිදානය
අරාව ( => ආතර් රජු => ශුද්ධ ග්‍රේල් සෙවීමට => නිල් => මාර්ක් ට්වේන් => හූපි ගෝල්ඩ්බර්ග්)

ඇත්ත වශයෙන්ම, මෙම විධානය කොටස් ඒකාබද්ධ කර ඇති බව ඔබට පෙනෙනු ඇත. මෙය පෙරනිමි ක්‍රියාවයි, නමුත් Boolean විචල්‍යයක් වන parse_ini_file: process_sections හි දෙවන තර්කය භාවිතා කිරීමෙන් ඔබට එය පහසුවෙන් අභිරුචිකරණය කළ හැක. process_sections True ලෙස සකසන්න.

$file_array = parse_ini_file("holy_grail.ini", true); print_r $file_array;

ඔබේ ප්‍රතිදානය මේ ආකාරයෙන් පෙනෙනු ඇත:

ලැයිස්තුගත කිරීම 6. ප්රතිදානය
Array ( => Array ( => ආතර් රජු => Holy Grail සෙවීමට => නිල්) => Array ( => Mark Twain => Whoopi Goldberg))

PHP දත්ත පහසුවෙන් විග්‍රහ කළ හැකි බහුමාන අරාවකට තබයි.

නමුත් PHP හි ගොනු සැකසීමේදී මෙය අයිස් කුට්ටියේ කෙළවරක් පමණි. tidy_parse_file සහ xml_parse වැනි වඩාත් සංකීර්ණ ශ්‍රිත ඔබට පිළිවෙලින් HTML සහ XML ලේඛන විග්‍රහ කිරීමට උදවු විය හැක. මෙම කාර්යයන් ක්‍රියා කරන ආකාරය පිළිබඳ වඩාත් සවිස්තරාත්මක තොරතුරු සඳහා කොටස බලන්න. ඔබ මෙම ගොනු වර්ග සමඟ වැඩ කරන්නේ නම් මේ දෙකම සලකා බැලීම වටී, නමුත් හැකි සියලුම ගොනු වර්ග හරහා යනවා වෙනුවට, ඔබට හොඳ පොදු නීති කිහිපයක් ඇති මෙම ලිපියේ අන්තර්ගතය දෙස සමීපව බැලීමට අවශ්‍ය විය හැකිය. මම මෙතෙක් විස්තර කර ඇති කාර්යයන් සමඟ වැඩ කිරීම.

හොඳ ක්‍රමලේඛන විලාසය

ඔබේ වැඩසටහනේ සෑම දෙයක්ම අපේක්ෂිත පරිදි ක්‍රියාත්මක වේ යැයි කිසිවිටක නොසිතන්න. උදාහරණයක් ලෙස: ඔබ සොයන ගොනුව ගෙන ගොස් ඇත්නම් කුමක් කළ යුතුද? අවසර වෙනස් කිරීමක් ඔබට ගොනුවක අන්තර්ගතය කියවීමට නොහැකි වුවහොත් කුමක් කළ යුතුද? ඔබට file_exists සහ is_readable ක්‍රම භාවිතයෙන් ගොනුවක පැවැත්ම සහ එය කල්තියා කියවීමේ අයිතිය පරීක්ෂා කළ හැක.

ලැයිස්තුගත කිරීම 7. file_exist සහ is_readable භාවිතා කිරීම
$ ගොනු නාමය = "myfile"; (ගොනුව_පවතියි ($ ගොනු නාමය) && කියවිය හැකි ($ ගොනු නාමය)) ($fh = fopen($ ගොනු නාමය, "r"); # සැකසුම් fclose($fh); )

කෙසේ වෙතත්, ප්‍රායෝගිකව මෙම වැඩසටහන ඔබේ කාර්යය සඳහා බොහෝ විට අධික වනු ඇත. fopen මගින් ආපසු ලබා දෙන අගයන් හැසිරවීම සරල සහ වඩාත් නිවැරදි වේ.

නම් ($fh = fopen($ ගොනු නාමය, "r")) ( # සැකසුම් fclose($fh); )

එය අසාර්ථක වුවහොත් fopen False ලබා දෙන බැවින්, ගොනුව විවෘත කළ හැකි නම් පමණක් ගොනුව සකසන බව මෙය සහතික කරයි. ඇත්ත වශයෙන්ම, ගොනුව නොපවතියි නම් හෝ කියවිය නොහැකි නම්, ආපසු ලැබෙන අගය සෘණ අගයක් වනු ඇතැයි ඔබ අපේක්ෂා කරයි. එමනිසා, එවැනි චෙක්පතක් යනු සියලු විභව ගැටළු වැටෙන උගුලකි. විකල්පයක් ලෙස, ඔබට වැඩසටහනෙන් පිටවීමට හෝ ගොනුව විවෘත කළ නොහැකි නම් දෝෂ පණිවිඩයක් පෙන්විය හැක.

fopen මෙන්, file_get_contents, file, සහ readfile ශ්‍රිතයන් ගොනුව විවෘත කිරීමට හෝ සැකසීමට නොහැකි නම් False ලබා දෙයි. fgets, fgetss, fread, fscanf, සහ fclose ශ්‍රිතයන් ද දෝෂයක් ඇති වුවහොත් False ලබා දෙයි. ඇත්ත වශයෙන්ම, fclose හැර, ඔවුන් ලබා දෙන ප්‍රතිඵල ඔබ දැනටමත් සකස් කර ඇත. fclose සම්බන්ධයෙන් ගත් කල, ගොනු හසුරුව නිසියාකාරව වැසී නොයන්නේ නම්, බොහෝ දේ කළ නොහැක, එබැවින් fclose හි ප්‍රතිලාභ අගය පරීක්ෂා කිරීම සාමාන්‍යයෙන් අධික වේ.

තේරීම ඔබගේ ය

PHP සතුව ලිපිගොනු කියවීමට සහ විග්‍රහ කිරීමට කාර්යක්ෂම ක්‍රමවල හිඟයක් නොමැත. fread වැනි සම්භාව්‍ය ක්‍රියාකාරකම් ඔබට බොහෝ විට විශ්වාසදායක ලෙස සේවය කළ හැකිය, නැතහොත් ඔබට කාර්යය ඉටු කිරීමට අවශ්‍ය වන්නේ එය නම් කියවීමේ ගොනුවේ සරල බව වෙත ඔබ වඩාත් ආකර්ෂණය විය හැක. තේරීම සැබවින්ම රඳා පවතින්නේ ඔබ ඉටු කිරීමට උත්සාහ කරන දේ මතය.

ඔබ විශාල දත්ත ප්‍රමාණයක් සකසන්නේ නම්, පසුව ඇති බෙදීම් සහ sprintf විධාන සමඟ ඒකාබද්ධව ගොනුව භාවිතා කරනවාට වඩා fscanf වඩාත් ප්‍රයෝජනවත් සහ කාර්යක්ෂම බව ඔබට පෙනෙනු ඇත. කෙසේ වෙතත්, ඔබ කුඩා වෙනස්කම් සහිත පෙළ විශාල ප්‍රමාණයක් ප්‍රදර්ශනය කරන්නේ නම්, ගොනුව , file_get_contents , හෝ readfile ශ්‍රිත භාවිතා කිරීම වඩාත් අර්ථවත් විය හැක. හැඹිලිගත කිරීම සඳහා PHP භාවිතා කරන විට හෝ තාවකාලික ප්‍රොක්සි සේවාදායකයක් නිර්මාණය කිරීමේදී මෙම විසඳුම බොහෝ විට නිවැරදි වනු ඇත.

PHP ගොනු සමඟ වැඩ කිරීම සඳහා බොහෝ මෙවලම් සපයයි. එකිනෙකා හොඳින් දැන හඳුනාගෙන ඔබ වැඩ කරන ව්‍යාපෘතිය සඳහා වඩාත් සුදුසු මෙවලම් මොනවාදැයි සොයා බලන්න. ඔබට මෘදුකාංග මෙවලම් පුළුල් තේරීමක් පිරිනමනු ලැබේ, ඒවා වඩාත් ඵලදායී ලෙස භාවිතා කරන්න සහ PHP භාවිතයෙන් ඔබේ ගොනු සැකසීමට විනෝද වන්න.

PHP ක්‍රමලේඛන භාෂා ඔවුන්ගේ ස්ථාන ශක්තිමත් කර වාක්‍ය ඛණ්ඩය, තර්කනය, විචල්‍යයන් සහ අනෙකුත් ක්‍රමලේඛ වස්තු පිළිබඳ සාමාන්‍ය අදහස් සැකසීමට වඩා බොහෝ කලකට පසුව දර්ශනය විය. ඔවුන් සමඟ වැඩ කිරීම සඳහා ලිපිගොනු සහ කාර්යයන් ප්‍රගතියක් නොලබන අතර ස්වාභාවික හේතූන් මත පැන නැගී ඇති ගොනු කේතනය කිරීමේ ගැටළුව පවා රැඩිකල් ලෙස නව විසඳුම් වලට තුඩු දුන්නේ නැත.

සාමාන්ය අදහස්

ගොනු සමඟ ප්රධාන කාර්යය, ඒවා කුමක් වුවත්, විවෘත කිරීම, කියවීම / ලිවීම සහ වසා දැමීම සමන්විත වේ. ගොනුවක් සකසමින් සිටින අතරතුර ප්‍රවේශය අවහිර කිරීම/අවහිර කිරීම වැනි කාර්යයන් ඔබට භාවිතා කළ හැක, ඔබට ගොනුවේ කියවීමේ/ලිවීමේ ස්ථානය සැකසිය හැක - ඈත අතීතයේ සෑම දෙයක්ම පෙර පරිදිම වේ.

PHP හි වැදගත් කරුණක් වන්නේ ගොනු සමඟ වැඩ කිරීම සඳහා වන කාර්යයන් බහුල වීම සහ ඒවා භාවිතා කිරීම සඳහා විකල්ප වේ. ප්රායෝගිකව, සරල නමුත් වැඩ කරන විකල්ප භාවිතා කිරීම ප්රමාණවත්ය. ගොනුවක් යනු, පළමුවෙන්ම, වැඩසටහන් මතකයයි. ඔබට එහි තොරතුරු ගබඩා කළ හැකිය. ඕනෑම වැඩසටහනක අරමුණ, ඕනෑම වෙබ් අඩවියක අරමුණ තොරතුරු ඉදිරිපත් කිරීම, සැකසීම සහ ආරක්ෂාව සහතික කිරීමයි.

අත්‍යවශ්‍ය අවස්ථාව

මීට පෙර, අවම වශයෙන් පහළ සිට ඉහළට ගැළපුම සඳහා වූ අවශ්යතාව නොසැලී ය. එනම්, ක්‍රමලේඛන භාෂාවක එක් අනුවාදයකින් වරක් ලියා ඇති වැඩසටහනක් ඊළඟ අනුවාදයේදී ඉතා මැනවින් සම්පාදනය කර/අර්ථකථනය කරයි. නවීන ක්‍රමලේඛනයේදී මෙය එසේ නොවේ. භාෂාවක වාක්‍ය ව්‍යුහයන් අනුකූල වීමේ අවශ්‍යතාවය ඉතිහාසයේ දෙයක් බවට පත්ව ඇති අතර, මෝස්තර සහ ක්‍රමලේඛන මෙවලම් සහ ඇතැම් මෙවලම්වල අනුවාද අතර අරගලය ඔවුන්ගේ ජීවිතයේ සම්මතය බවට පත්ව ඇත.

ලිපිගොනු සමඟ මෙන්ම දත්ත සමුදායන් සමඟ වැඩ කිරීම අඩවි අතුරුමුහුණත තරම්ම වැදගත් වේ. පළමුවැන්න වේදිකාව, සත්කාරක හෝ භාෂා අනුවාදය වෙනස් කිරීමේදී අඩවි කේතය වෙනස් කිරීමට අවශ්‍ය නොවන ආකාරයට ගොඩනගා ගත යුතුය. ලිපිගොනු සමඟ වැඩ කිරීම සඳහා අතුරු මුහුණත වෙනම ස්ක්‍රිප්ට් එකකට ඇතුළත් කළ යුතු අතර සම්පූර්ණ ගැළපුම සහතික කළ යුතුය, අඩවි සැලසුම ඕනෑම උපාංගයකට, බ්‍රව්සරයකට ප්‍රමාණවත් ලෙස අනුගත විය යුතු අතර වෙබ් අඩවියේ ඉතිරි ක්‍රියාකාරීත්වය එකම හැකියාවන්ගෙන් සැපයිය යුතුය.

කියවා ඔබම වෙනස් කරන්න

වැඩසටහනකට එයම වෙනස් විය හැකිද, එනම් script එකක් වැඩිදියුණු කළ හැකිද? අද දක්වාම, මෙම ප්රශ්නය බොහෝ දෙනා උනන්දු වෙයි. නමුත් කාර්යය වඩාත් ප්‍රායෝගිකයි: PHP PHP ගොනුවක් කියවීම. සංවර්ධකයෙකුට සෑම විටම විශේෂිත කේතයක් ලිවීමෙන් විශේෂිත ගැටළුවක් විසඳිය නොහැක. සමහර විට අමුත්තන් වෙබ් අඩවියට පැමිණෙන විට එය වෙනස් කිරීමට අවශ්ය වන අතර සංවර්ධන අදියරේදී අපේක්ෂා නොකළ ප්රශ්නයක් සකස් කරයි.

අනෙක් සියලුම අවස්ථාවන්හිදී මෙන්, පළමුව ඔබ ගොනුව විවෘත කළ යුතුය. මෙම ගොනුව තිබේද නැද්ද යන්න ගැටළුවක් නොවේ. ගොනුව පවතින බව දන්නේ නම් (file_exists() ශ්‍රිතය ධනාත්මක පිළිතුරක් ලබා දෙයි), fopen() ශ්‍රිතය 'r', 'r+', 'a', 'a+' ප්‍රවේශය සමඟ භාවිතා වේ. ගොනුව තවමත් නොපවතී නම්, 'a', 'a+', 'w', 'w+' ප්‍රවේශය සමඟ. ගොනුවක් විවෘත කිරීමේ ප්රතිඵලය එහි විස්තරය වනු ඇත. ගොනුව fclose() ශ්‍රිතය සමඟ වසා ඇත.

ගොනුවක් කියවීමේදී එය සැකසීමට අවශ්‍ය නොවන විට අරාවකට කියවීමට PHP භාවිතා කිරීම පහසුය.

නම් (file_exist($fName)) (

$aLines = ගොනුව($fName)

මෙම විකල්පය තුළ, ගොනුවේ සෑම පේළියක්ම අනුපිළිවෙලින් අරා මූලද්රව්යයට යයි. ගොනුව () හෝ file_get_contents() ශ්‍රිතවලට ගොනුව විවෘත කර වසා දැමීමට අවශ්‍ය නොවන බව සටහන් කළ යුතුය.

ආදාන ගොනුව ඉතා විශාල වන විට සහ ඔබට තොරතුරු ටිකක් සොයා ගැනීමට අවශ්‍ය වූ විට, හෝ වෙනත් හේතූන් මත, ඔබට PHP භාවිතයෙන් ගොනුව පේළියෙන් කියවීමට හැකිය. PHP මඟින් fgets() සහ fgetc() ශ්‍රිතයන් සමඟ මෙය කිරීමට හැකියාව ලබා දේ.

$fvs = fopen($fName, "r")

අතරතුර ((බොරු !== ($cLine = fgets($fvs, 2000)))) (

$cLines .="
". $i. "). ". $cLine

විකල්ප දෙකම දෝෂ රහිතව ක්රියා කරයි. කෙසේ වෙතත්, පසුව වෙනස් කිරීම සඳහා PHP ගොනුවක් PHP කියවීම සිදු කරන විට, පූර්වාරක්ෂාව ගත යුතුය. අඩවි සංවර්ධන අදියරේදී අමුත්තෙකු එය භාවිතා කරන්නේ කෙසේදැයි පුරෝකථනය කිරීම සැමවිටම කළ නොහැක. වෙබ් අඩවියේ කාර්යයන් තුළ ස්ක්‍රිප්ට් වෙනස් කරන්නේ නම් වඩා හොඳය, සහ සම්පත් පරිපාලක ඇතුළු අමුත්තන්ට මෙම වෙනස පාලනය කළ නොහැක.

ප්රතිඵල සුරැකීම

ලැබුණු සහ යාවත්කාලීන කරන ලද තොරතුරු ගොනුවට ලියා ඇත්තේ fputs() ශ්‍රිත රේඛාවෙන් පේළිය හෝ සමස්තයක් ලෙස file_put_contents() ශ්‍රිතය මගිනි.

$fName = $_SERVER["DOCUMENT_ROOT"] . "/tmp/scData.php"

$fvs = fopen($fName, "a")

රැළ ($fvs, LOCK_EX)

$cLine = "1 පේළිය". chr (10)

fputs($fvs, $cLine)

$cLine = "2 පේළිය" . chr (10)

fputs($fvs, $cLine)

රැළ ($fvs, LOCK_UN)

පේළියෙන් පේළියේ පටිගත කිරීමේ විකල්පය තුළ, ඔබට පටිගත කිරීමේ ක්‍රියාවලියේදී දත්ත හැසිරවිය හැකිය; දෙවන අවස්ථාවේදී, ලිඛිත තන්තුව හෝ අරාව සම්පූර්ණ ගොනුව තුළ තබා ඇත.

$file = " scData.php "

$cContents = file_get_contents($file)

// ඇතුළත් කිරීමක් එක් කිරීම

$cContents .= "නව ප්‍රවේශය\n"

// ගොනුව නැවත ලියන්න

file_put_contents($file, $cContents)

PHP ගොනු කියවීම සහ ලිවීම පහසු සහ ස්වභාවිකය. කෙසේ වෙතත්, මතක තබා ගැනීම වැදගත්ය: සෑම ගොනුවකටම නමක්, දිගුවක් සහ මාර්ගයක් (ෆෝල්ඩරය) ඇත. PHP ස්ක්‍රිප්ට් එකකට ලිපිගොනු කියවීමට සහ ලිවීමට හැකි වීමට නම්, මෙම ස්ක්‍රිප්ටයට සුදුසු අයිතිවාසිකම් තිබිය යුතුය. ඒවා සත්කාරකත්වය මත ස්වයංක්‍රීයව නිරාවරණය වේ, නමුත් සමහර අවස්ථාවලදී ඒවා පුළුල් කළ යුතුය.

සමහර අවස්ථාවලදී, පරීක්ෂණ කියවීමක් සිදු කිරීමෙන් ප්රතිඵල තහවුරු කිරීම යෝග්ය වේ. PHP ගොනු ලිවීමට මෙය සංවර්ධනය අතරතුර අවශ්‍ය වේ, නමුත් සමහර අවස්ථාවලදී, අඩවි ආරක්‍ෂාව හෝ විශ්වසනීයත්වය සඳහා, දත්ත පටිගත කිරීම පරීක්ෂා කිරීම අත්‍යවශ්‍ය වේ.

PHP, MySQl, JavaScript, සහ විශේෂයෙන්ම බ්‍රවුසර වල ලාක්ෂණික ලක්ෂණයක්: නිහඬව සමහර දෝෂ සිදුවීමට ඉඩ දීම. "හඳුනාගෙන නැත, සිදු කර නැත ..." යනු තොරතුරු තාක්‍ෂණයේ කැපුම් දාරයේ ඉතා හොඳ භාවිතයක් නොවේ, නමුත් එය සංවර්ධකයින්ට වැරදි නොකිරීමට සහ පිරිසිදු, උසස් තත්ත්වයේ කේතයක් ලිවීමට උගන්වයි, එය ද නරක නැත.

PHP සහ සැබෑ ලේඛන සමඟ වැඩ කිරීම

PHP PHP ගොනුවක් කියවීම නිසැකවම ප්‍රායෝගික උනන්දුවක් දක්වයි, නමුත් මෙය ක්‍රමලේඛන ක්ෂේත්‍රයයි. පරිශීලකයා සහ අඩවි නරඹන්නා ව්‍යවහාරික ස්වභාවයක තොරතුරු ගැන උනන්දු වන අතර, ඔහු වගු සහ ලේඛන ආකාරයෙන්, විශේෂයෙන් *.xlsx සහ *.docx ගොනු ආකෘතිවලින් දැකීමට පුරුදු වී ඇත. මේවා MS Excel සහ MS Word ආකෘතියේ ගොනු වේ.

භාණ්ඩ ලැයිස්තුව, මිල ගණන්, ලක්ෂණ සාමාන්‍යයෙන් සෑදී ඇත්තේ වගු ආකාරයෙන් බැවින් PHP Excel ගොනුව කියවීම අත්‍යවශ්‍ය වේ.

එවැනි ගොනු සමඟ වැඩ කිරීමට PHPExcel සහ PHPWord පුස්තකාල සංවර්ධනය කර ඇත. කෙසේ වෙතත්, *.xlsx සහ *.docx ගොනු වල අන්තර්ගතය OOXML ප්‍රමිතියෙන් ඉදිරිපත් කර ඇත, එනම් සැබෑ, තේරුම් ගත හැකි ලේඛනය zip ලේඛනාගාරයක ඉදිරිපත් කෙරේ. Zip සංරක්ෂිතයක් යනු පින්තූර, වස්තු, සූත්‍ර සහ වෙනත් වැඩසටහන් වලින් ඇතුළු කිරීම් ඇතුළු ගොනු සමූහයකි. මෙහි ඇති පෙළ ගොනු ටැග් ආකාරයෙන් විස්තර මගින් නිරූපණය කෙරේ. එවැනි ගොනුවක් කියවීම ප්‍රමාණවත් නොවේ; භාවිතය සහ වෙනස් කිරීම සඳහා අන්තර්ගතය සහ ව්‍යුහය ලබා ගැනීමට ඔබ එය විග්‍රහ කළ යුතුය.

මෙයින් අදහස් කරන්නේ කියවීමේ මෙහෙයුම සංරක්ෂිත විවෘත කිරීමේ ක්‍රියා පටිපාටියක් බවට පත්වන බවයි. මෙම පුස්තකාල ස්වාධීනව ලේඛන ලේඛනාගාරය විවෘත කරන අතර එවැනි ලේඛන කියවීම, සැකසීම සහ ලිවීම සඳහා පුළුල් කාර්යයන් සමඟ සංවර්ධකයාට සපයයි.

එක්සෙල් වගු

ඇතුළත්_වරක් 'PhpOffice/PhpExcel/IOFactory.php'

ශ්‍රිතය scGetExcelFile($xls)(

$objPHPExcel = PHPExcel_IOFactory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//මෙම array එකේ strings අරාවන් අඩංගු වේ

$aSheet = $objPHPExcel->getActiveSheet()

$array = array()

//ප්‍රතිකාර

foreach($aSheet->getRowIterator() $row ලෙස)(

$cellIterator = $row->getCellIterator()

foreach($cellIterator ලෙස $cell)(

array_push($item, iconv("utf-8", "cp1251", $cell->getCalculatedValue()))

array_push($array, $item)

Excel ගොනු කියවීම සහ සැකසීම Word ලේඛන සැකසීමට වඩා දුෂ්කර ය. ව්‍යවහාරික තොරතුරු කියවීම සහ සැකසීම සඳහා බැරෑරුම් ව්‍යාපෘතියක් ක්‍රියාත්මක කිරීමට ඔබට අවශ්‍ය නම් හොඳම විකල්පය වන්නේ පළමුව PHPWord පුස්තකාලය ප්‍රගුණ කිරීමයි. මෙය ඔබට හොඳ අත්දැකීමක් සහ ගැටලුවේ විශේෂතා පිළිබඳ ඉක්මන් අවබෝධයක් ලබා දෙනු ඇත.

වචන ලේඛන

පේළි දෙකක් පමණි:

$oWord = නව \PhpOffice\PhpWord\PhpWord()

$oDocx = $this->oWord->loadTemplate($cFileName)

$cFileName ලේඛනය දැන් සැකසීම සඳහා තිබේ. ඊළඟට, ලේඛනාගාරය විවෘත කර, එහි අන්තර්ගතය තෝරාගෙන විශ්ලේෂණය කර, වෙබ් අඩවියේ ප්රදර්ශනය කළ හැකි, වෙනස් කර නැවත ලිවිය හැකිය.

$zipClass = නව ZipArchive()

$zipClass->විවෘත ($this->tempFileName)

// ලේඛනයේ සම්පූර්ණ අන්තර්ගතය කියවන්න

සඳහා ($i=0; $i<$zipClass->numFiles; $i++) (

$cNameIn = $zipClass->getNameIndex($i)

$cNameInExt = substr($cNameIn, -4)

නම් (($cNameInExt == ".xml") || ($cNameInExt == "rels")) (

// ".xml" සහ ".xml.rels" දිගු සහිත ගොනු ලේඛන වගුවේ සුරකිනු ලැබේ

// සෑම xml පේළියක්ම අනුපිළිවෙලට අනන්‍ය අංකයකින් ලියා ඇත

$cBodyIn = $zipClass->getFromName($cNameIn)

$cBodyInLen = strlen($cBodyIn)

// අනෙකුත් සියලුම ගොනු ලේඛන ෆෝල්ඩරයට ලියා ඇත

$cNameOnly = substr($cNameIn, strrpos($cNameIn, "/") + 1)

$zipClass->getFromName($cNameIn, $cWorkPath); // අන්තර්ගතය ගොනුවක් ලෙස

PHP Excel සහ PHP Word මඟින් ලබා දෙන හැකියාවන් ඔබට සැබෑ ලේඛන හැසිරවීමට සහ ඒවායේ අන්තර්ගතය ඕනෑම අවස්ථාවක අදාළ කිරීමට ඉඩ සලසයි. වර්තමාන ගතික ලෝකයේ මෙය ඉතා වැදගත් වේ. ගුරුත්වාකර්ෂණ කේන්ද්‍රය පරිගණක තාක්‍ෂණයේ දේශීය භාවිතයේ සිට අතථ්‍ය අන්තර්ජාල අවකාශය වෙත දිගු කලක් ගමන් කර ඇත. එබැවින්, දේශීය මයික්‍රොසොෆ්ට් නිෂ්පාදනවල වගු සහ ලේඛන නිර්මාණය කිරීම වෙබ් අඩවියක ස්වයංක්‍රීය හා අර්ධ ස්වයංක්‍රීය මාදිලියේ එවැනි ලේඛන සමඟ වැඩ කිරීමට වඩා අඩු කාර්යක්ෂම වේ, එය වගුවේ හෝ ලේඛනයේ නිර්මාතෘට පමණක් නොව එහි පාරිභෝගිකයින්ටද ප්‍රවේශ විය හැකිය.

පෙළ ගොනු, තවත් ජීවිතයක්

පළමු ආසන්න වශයෙන්, පෙළ ගොනු PHP ගොනු හෝ යෙදුම් ලේඛනවලට වඩා සරල ය. කෙසේ වෙතත්, මෙහිදී සිතා බැලිය යුතු දෙයක් තිබේ. එවැනි ලිපිගොනු වල කියවීමේ / ලිවීමේ මෙහෙයුම් දැනටමත් ඉහත දක්වා ඇත, නමුත් එවැනි ගොනු වල අර්ථය වඩා වැදගත් වේ.

සේවාලාභියෙකු සහ සේවාදායකයක් වැනි ලබා දී ඇති බැවින් (පළමුවැන්න ජාවාස්ක්‍රිප්ට් විසින් ආධිපත්‍යය දරයි, දෙවැන්න PHP විසින්), එවිට කුකී සහ සැසි යාන්ත්‍රණයන්ට පවා ස්ක්‍රිප්ට්, පිටු හෝ ඇතැම් ක්‍රියාවලීන් අතර තොරතුරු මාරු කිරීමේ අවශ්‍යතාවය සමඟ සාර්ථකව කටයුතු කළ නොහැක.

දත්ත සමුදායේ අපේක්ෂිත වෙනස්කම් පිළිබිඹු කිරීමට හැකි නමුත්, ඔවුන්ගේ සියලු වාසි සහ වේගය සඳහා, කුඩා තාවකාලික හෝ ස්ථිර පෙළ ගොනු තොරතුරු සම්ප්රේෂණය කිරීම සඳහා වඩාත් රසවත් විකල්පය විය හැකිය. ඔබ කුඩා ගොනු විශාල ප්‍රමාණයක් සාදා ඒවායේ ප්‍රමාණය පාලනය නොකරන්නේ නම්, ඒවා දත්ත සමුදායේ නිශ්චිත සහ නම්‍යශීලී අනුවාදයක් විය හැකිය.

පෙළ ගොනුවක් කියවීම PHP වේගවත් වේ, එය වහාම ව්‍යුහයකට, අරාවකට හෝ වස්තුවකට විග්‍රහ කළ හැක. දෙවැන්න ඉතා වැදගත් වේ, එය PHP ස්ක්‍රිප්ට් එකකට වෙන් කර ඇති කාලයෙන් පිටත ජීවත් වන වස්තූන් නිර්මාණය කිරීමට ඔබට ඉඩ සලසයි, ඔබ දන්නා පරිදි, සේවාදායකයේ පමණක් පැවතිය හැකි අතර පිටුව පූරණය වන මොහොතේ පමණක්, AJAX ප්‍රතිචාරයක් ජනනය කරන ලද, හෝ PHP පරිවර්තකය දියත් කිරීමට හේතු වන වෙනත් හේතුවක් නිසා.

පෙළ ගොනුවක් යනු සංවර්ධකයාගේ අන්තර්ගතය සහ ව්‍යුහය බව ඔබ සිතන්නේ නම්, PHP ගොනුවක් යනු පරිවර්තකයේ වාක්‍ය ඛණ්ඩය සහ සංවර්ධකයාගේ තර්කනය වන අතර, "ටැග් කළ" විස්තර html, css, xml වඩා අර්ථකථන මූලද්‍රව්‍ය වන නමුත් නියාමනය කරනු ලැබේ. ස්ථිතික සම්මතයන් අනුව. ලිපිගොනු නව අන්තර්ගතයක් ලබා ගැනීමට බොහෝ විට කාලය පැමිණ ඇති බව කෙනෙකුට නිගමනය කළ හැකි අතර, මෙයම ඒවායේ ගුණාත්මකභාවය සහ භාවිතයේ තර්කනය තීරණය කළ යුතුය. ක්‍රමලේඛනය එහි සංවර්ධනයේ මීළඟ අදියර සඳහා තවමත් සුදානම් වී නැති නිසා අද ගොනු සංවර්ධකයා විසින් නිර්මාණය කරන සහ ඒවායේ භාවිතය තීරණය කරන ගොනු ලෙස පවතී.

වඩාත්ම සිත්ගන්නාසුළු සහ පොරොන්දු වූ දෙය නම්, අවශ්‍යතාවය ඇති විට PHP ස්වාධීනව PHP ගොනුවක් කියවන විටය. තවද සරල PHP ගොනුවකින් පේළියක් කියවීමේ ප්‍රතිඵලයක් ලෙස වස්තුවක් නිර්මාණය වේ, අවම වශයෙන් එය සුරකින ලද තත්වය තුළ. මේවා සම්පූර්ණයෙන්ම හුරුපුරුදු අදහස් නොවේ, නමුත් නූතන ලෝකයේ සෑම දෙයක්ම ඉතා ඉක්මනින් වෙනස් වේ.

16.5K

ඇත්ත වශයෙන්ම, php ගොනුවක් විවෘත කරන්නේ කෙසේද යන්න විශාල ගැටළුවක් නොවේ. ඔබ වනාන්තරයක් මැද සිටින විට බියර් බෝතලයක් විවෘත කිරීමට අපහසු විය හැකිය. නමුත් මේ ආකාරයෙන් සිතන්නේ දැඩි ක්‍රමලේඛකයින් පමණි. ආරම්භකයින් සඳහා, ගොනු සමඟ වැඩ කිරීම සඳහා PHP හි ඇති සියලුම හැකියාවන් ගැන අපි ඔබට කියන්නෙමු:

php ගොනු

php දිගුව සහිත ගොනු එකම නමින් ක්‍රමලේඛන භාෂාවෙන් ලියා ඇති කේතය අඩංගු වේ. අනෙකුත් භාෂා මෙන් නොව, php යනු සේවාදායක පැත්තේ ක්‍රමලේඛන භාෂාවකි. එනම්, එය සර්වර් පැත්තේ ධාවනය වේ. එබැවින්, එහි කේතය නිදොස් කිරීම සඳහා, සේවාදායක යන්ත්රයේ දේශීය සේවාදායකයක් ස්ථාපනය කළ යුතුය.

php ගොනු සමඟ වැඩ කිරීමට, විශේෂ යෙදුම් භාවිතා කරනු ලැබේ - මෘදුකාංග සංස්කාරක. වඩාත් පොදු ඒවා නම්:

  • Dreamweaver.
  • PHPEසංස්කරණය.
  • Eclipse PHP සංවර්ධනය.
PHP මත පදනම්ව වෙබ් අඩවි නිර්මාණය කිරීමේදී, ඔබට වැඩසටහන් කේතය නැවත භාවිතා කිරීමට සිදු විය හැක. එවැනි අවස්ථාවන්හිදී, වෙනත් ගොනුවක පිහිටා ඇති සූදානම් කළ විසඳුම් සම්බන්ධ කිරීම පහසුය. මේ සඳහා ඇතුලත් කරන ලද ඉදිකිරීම් භාවිතා වේ. එහි වාක්‍ය ඛණ්ඩය වන්නේ:

ගොනු නාමය ඇතුළත් වේ

සම්බන්ධතා උදාහරණය:

ඇතුළත් ගොනුව:


අවශ්‍ය ගොඩනැගීම භාවිතයෙන් ගොනුවක් ඇතුළත් කිරීම ද කළ හැකිය. ඇතුළත් කිරීම මෙන් නොව, වැඩසටහන් කේතය ක්‍රියාත්මක කිරීමට පෙර ගොනුව එයට ඇතුළත් වේ. කේතයේ අවශ්‍යතාවය භාවිතා කිරීමෙන්, මෙම ගොනුවට කළ හැක්කේ එක් ඇමතුමක් පමණි. නැවත ප්‍රවේශ වූ විට, පද්ධතිය ගෝලීය දෝෂ පණිවිඩයක් පෙන්වන අතර වැඩසටහන් ක්‍රියාත්මක කිරීම නවත්වනු ඇත.

ඇතුළත් ඉදිකිරීම් වැඩසටහන ක්‍රියාත්මක කිරීමේදී මූලාශ්‍රය පමණක් ඇතුළත් වේ. එය php ගොනුව බහු කියවීමට සහය දක්වයි. දෝෂයක් සිදුවුවහොත්, අනතුරු ඇඟවීමේ පණිවිඩයක් පමණක් දර්ශනය වන අතර, ඊළඟ පේළියේ සිට කේත ක්රියාත්මක කිරීම දිගටම කරගෙන යනු ඇත.

ගොනු විවෘත කිරීම සහ වසා දැමීම

php හි, ගොනු සමඟ සියලුම මෙහෙයුම් අදියර කිහිපයකින් සිදු කෙරේ:

  • ගොනුවක් විවෘත කිරීම;
  • අන්තර්ගත සංස්කරණය;
  • ගොනුව වසා දැමීම.

ගොනුවක් විවෘත කිරීමට fopen() ශ්‍රිතය භාවිතා කරයි. එහි වාක්‍ය ඛණ්ඩය වන්නේ:

int fopen (string ගොනු නාමය, තන්තු මාදිලිය [, int use_include_path])

පිළිගත් තර්ක:

  • string ගොනු නාමය - ගොනු නාමය හෝ එයට නිරපේක්ෂ මාර්ගය. ගොනුව සඳහා මාර්ගය නිශ්චිතව දක්වා නොමැති නම්, එය වත්මන් නාමාවලියෙහි සොයනු ඇත. ඔබ සොයන ගොනුව අතුරුදහන් වී ඇත්නම්, පද්ධතිය දෝෂ පණිවිඩයක් පෙන්වයි. උදාහරණයක්:

  • string මාදිලිය - ගොනු විවෘත කිරීමේ මාදිලිය දක්වයි. තර්කය මගින් පිළිගත් අගයන්:
  • r - ගොනුව කියවීම සඳහා පමණක් විවෘත වේ, ගොනු දර්ශකය ආරම්භයේ දී සකසා ඇත;
  • r+ - ගොනුව කියවීමට සහ ලිවීමට විවෘතයි;
  • w - ලිවීම සඳහා පමණක් නව ගොනුවක් සාදයි. එකම නම සහිත ගොනුවක් දැනටමත් තිබේ නම්, එහි ඇති සියලුම දත්ත ස්වයංක්‍රීයව මකා දැමෙනු ඇත;
  • w+ - ලිවීම සහ කියවීම සඳහා නව ගොනුවක් නිර්මාණය කරයි. එවැනි ගොනුවක් පවතින විට, එහි දත්ත සම්පූර්ණයෙන්ම නව ඒවා සමඟ නැවත ලියනු ලැබේ;
  • a - ගොනුව ලිවීම සඳහා විවෘතයි. දර්ශකය අවසානයේ පිහිටුවා ඇත. එනම්, php ගොනුවට ලිවීම ආරම්භයේ සිට නොව අවසානයේ සිට ආරම්භ වනු ඇත;
  • a+ - ගොනුවක් කියවීමේ-ලිවීමේ ආකාරයෙන් විවෘත කරන්න. පටිගත කිරීම අවසානයේ සිට ආරම්භ වනු ඇත;
  • b - ද්විමය දත්ත අඩංගු ගොනුවක් සමඟ වැඩ කිරීමේ ආකාරය (ද්විමය සංඛ්යා පද්ධතියේ). මෙම මාදිලිය ලබා ගත හැක්කේ වින්ඩෝස් මෙහෙයුම් පද්ධතියේ පමණි.

ගොනුවකට ප්‍රවේශය වැසීමට, fclose() ශ්‍රිතය භාවිතා කරන්න. වාක්‍ය ඛණ්ඩ:

int fclose (int ගොනුව), මෙහි int ගොනුව වසා දැමීමට අඩවියට හසුරුවකි.

එක් එක් කියවීමෙන් හෝ ලිවීමෙන් පසුව, මෙම කාර්යය සමඟ ගොනුව වසා දැමිය යුතුය. එසේ නොමැතිනම්, ගොනුව සඳහා සාදන ලද ධාරාව විවෘතව පවතී. තවද මෙය සේවාදායක ධාරිතාව අනවශ්‍ය ලෙස පරිභෝජනය කිරීමට හේතු වේ.

උදාහරණයක්:

ලිපිගොනු කියවීම සහ ලිවීම

ගොනුවක සම්පූර්ණ අන්තර්ගතය සරලව ප්රදර්ශනය කිරීම සඳහා, readfile() ශ්රිතය වඩාත් සුදුසු වේ. එහි වාක්‍ය ඛණ්ඩය වන්නේ:

readfile (string filename) , මෙහි string filename යනු string ගොනු නාමයයි (හැන්දීමක් නොවේ).


එකම ගොනුව fpassthru() ශ්‍රිතය භාවිතයෙන් කියවිය හැක. එය අවසන් පොයින්ටර් ස්ථානයේ සිට ගොනුවේ අවසානය දක්වා දත්ත කියවයි. එහි වාක්‍ය ඛණ්ඩය වන්නේ:

int fpassthru (int ගොනුව)

කාර්යය සඳහා ගොනුවක් විවෘත කිරීම සහ වසා දැමීම අවශ්ය වේ. උදාහරණයක්:

ප්රතිඵලය පෙර එකට සමාන වේ.

php හි ගොනු සමඟ වැඩ කිරීම සඳහා වන කාර්යයන් ඔබට පේළියෙන් සහ අක්ෂරයෙන් අන්තර්ගතය කියවීමට ඉඩ සලසයි:

  • string fgets (int ගොනුව, int දිග)- ශ්‍රිතය දිග දිග තන්තුවක් කියවයි. උදාහරණයක්:

  • string fread (int ගොනුව, int දිග)- ක්රියාව පෙර එකට සමාන වේ.

ගොනුවකට පෙළ දත්ත ලිවීමට, සමාන කාර්යයන් දෙකක් තිබේ:

  • int fputs (int ගොනුව, string string [, int length ])
  • int fwrite (int ගොනුව, string string [, int length ])

ශ්‍රිතයන් විසින් int ගොනුවකට නියමිත දිග int දිගෙහි තන්තුවක් ලියයි ( විකල්ප තර්කය) උදාහරණයක්:

ගොනු සෑදීම සහ මකා දැමීම

php ගොනුවක් සෑදීමට, ඔබට "w" හෝ "w+" ප්‍රවේශ මාදිලියේ fopen() ශ්‍රිතය භාවිතා කළ හැක. හෝ ස්පර්ශ () ශ්රිතය. එය ගොනු වෙනස් කිරීමේ කාලය සකසයි. සෙවූ නම සහිත මූලද්රව්යයක් නොමැති නම්, එය සාදනු ලැබේ. එහි වාක්‍ය ඛණ්ඩය.




ඉහල