ការរុករករហ័សពីទំព័រនេះ៖
ប្រសិនបើអ្នកសម្រេចចិត្តសរសេរស្គ្រីបហើយធ្វើ បញ្ជូនបន្ត PHPគុណសម្បត្តិនៃជំហាននេះគឺជាក់ស្តែង៖ PHP - server-side ភាសាតម្រង់ទិសស្គ្រីប; ការបញ្ជូនបន្តនឹងត្រូវបានអនុវត្តតាមរយៈស្គ្រីបនៅលើម៉ាស៊ីនមេ និងមិននៅក្នុងកម្មវិធីរុករករបស់អ្នកទស្សនានោះទេ។ ការបញ្ជូនបន្តមួយចំនួនអាចត្រូវបានអនុវត្តនៅផ្នែកអតិថិជន - តាមរយៈការបញ្ជូនបន្ត js (នោះគឺតាមរយៈការប្តូរទិស JavaScript) ។
នេះគឺជាវិធីសាស្រ្តដែលអាចបត់បែនបាន និងអាចបត់បែនបាន ហើយអ្នកអាចអនុវត្តការបញ្ជូនបន្តជាច្រើនប្រភេទនៅក្នុង PHP មិនដូចវិធីសាស្ត្រផ្សេងទៀតទេ។ នៅទីនេះគឺច្រើនបំផុត ប្រភេទទូទៅការបញ្ជូនបន្តដែលអាចធ្វើបាននៅក្នុង PHP៖ ក) 301 PHP redirect (ស្ថានភាពប្តូរទិសអចិន្ត្រៃយ៍) ខ) 302 PHP redirect (ស្ថានភាពប្តូរទិសបណ្តោះអាសន្ន) គ) ធ្វើបច្ចុប្បន្នភាព។
អត្ថបទនេះនឹងមានប្រយោជន៍ ជាដំបូងសម្រាប់អ្នកគ្រប់គ្រងគេហទំព័រថ្មីថ្មោង ដែលកំពុងតែស្វែងរកវិធីដើម្បីអនុវត្ត URL បញ្ជូនបន្តប្រសិនបើវាមិនអាចធ្វើទៅបានដោយប្រើដំណោះស្រាយទូទៅផ្សេងទៀតដូចជា Htaccess ។
បឋមកថាភាសាមុខងារ PHP
ឧទាហរណ៍ ឧបមាថាអ្នកចង់ប្តូរទិសទៅកាន់ URL នេះ http://www.somewebsite.com/target.php ។ នៅក្នុងដើម ទំព័រ PHPអ្នកគួរតែហៅស្គ្រីបប្តូរទិសនេះដោយសាមញ្ញ៖
សូមសាកល្បងការពិសោធន៍ដ៏សាមញ្ញនេះផងដែរ លើការបង្ហោះក្នុងតំបន់របស់អ្នក៖
1) បើក កម្មវិធីនិពន្ធអត្ថបទហើយបញ្ចូលលេខកូដនេះ៖
រក្សាទុកវាជា targetpage.php ។
2) បើកទទេមួយទៀត ឯកសារអត្ថបទហើយបញ្ចូលលេខកូដនេះ៖
រក្សាទុកវាជាប្រភពដើមpage.php។
3) ឥឡូវនេះបើកដំណើរការកម្មវិធីរុករកបណ្ដាញរបស់អ្នក។ IN របារអាសយដ្ឋានកម្មវិធីរុករកចូល៖ http://localhost/originatingpage.php
4) អ្នកនឹងសម្គាល់ឃើញថាបន្ទាប់ពីចុចប៊ូតុងបញ្ចូល URL នេះ៖ http://localhost/originatingpage.php ប្តូរទិសទៅ http://localhost/targetpage.php និងទៅកាន់ targetpage.php ហើយអ្នកឃើញពាក្យថា "សួស្តី នេះជា codex "-x" ។
កំហុសមួយក្នុងចំណោមកំហុសទូទៅបំផុតអាចស្ថិតនៅក្នុងការរចនា កូដ htmlបញ្ជូនបន្ត៖
សាកល្បងការពិសោធន៍នេះ៖
ចូលទៅកាន់ស្គ្រីបដើមទំព័រ.php ហើយបន្ថែមស្លាក HTML ណាមួយ៖
បឋមកថា ('ទីតាំង៖ http://localhost/targetpage.php');
ឧបមាថាអ្នកមានលេខកូដដូចនេះ៖
2) រក្សាទុកឯកសារ។
3) ដំណើរការស្គ្រីប originating.php ម្តងទៀតនៅក្នុង . ប្រសិនបើអ្នកមិនឃើញកំហុសណាមួយទេ អ្នកនឹងសម្គាល់ឃើញថា វានៅតែបញ្ជូនបន្តទៅកាន់ targetpage.php
4) ឥឡូវព្យាយាមផ្លាស់ប្តូរ URL គោលដៅដើម្បីចង្អុលទៅគេហទំព័រពិត ឧទាហរណ៍៖
5) បង្ហោះ originatingpage.php ទៅកាន់ការបង្ហោះពីចម្ងាយនៅក្នុងថត root នៃគេហទំព័រ។
6) ប្រតិបត្តិស្គ្រីបនៅក្នុងកម្មវិធីរុករកដោយហៅ URL ដើមទំព័រ.php ឧទាហរណ៍៖ http://www.php-developer.org/originatingpage.php
៧) អ្នកនឹងសម្គាល់ឃើញថាលើកនេះអ្នកនឹងជួបបញ្ហា៖
ការព្រមាន៖ មិនអាចកែប្រែព័ត៌មានបឋមកថាបានទេ - បឋមកថាបានផ្ញើរួចហើយដោយ (លទ្ធផលបានចាប់ផ្តើមនៅ /home/phpdevel/public_html/originatingpage.php:6) នៅក្នុង /home/phpdevel/public_html/originatingpage.php នៅលើបន្ទាត់ទី 7
តើមានអ្វីកើតឡើងនៅទីនេះ? ហេតុផលសម្រាប់បញ្ហាគឺថា អ្នកមានលទ្ធផលកូដ HTML រួចហើយ មុនពេលបឋមកថាមុខងារ។
តើអ្វីទៅជាអត្ថប្រយោជន៍នៃការប្តូរទិស?
ជាមួយនឹងការបញ្ជូនបន្ត អ្នកអាចប្តូរទិសអ្នកប្រើប្រាស់ពីគេហទំព័រមួយទៅទំព័រមួយទៀត។ ផងដែរ ប្រសិនបើជាឧទាហរណ៍ នៅលើគេហទំព័ររបស់អ្នក អត្ថបទនៃតំណភ្ជាប់ទៅកាន់អត្ថបទគឺនៅក្នុងទម្រង់ដែលមិនគួរឱ្យជឿ (សំណុំនៃលេខ ឬនិមិត្តសញ្ញា) ពួកគេអាចផ្លាស់ប្តូរបានដោយអនុវត្តការបកប្រែតាមព្យញ្ជនៈ និងការបញ្ជូនបន្តទៅកាន់តំណទាំងនេះ។ លទ្ធភាពនៃការបញ្ជូនបន្តគឺស្ទើរតែគ្មានដែនកំណត់! អត្ថប្រយោជន៍នៃវិធីសាស្រ្តនេះសម្រាប់ការបង្កើនការបង្កើតលិបិក្រមទំព័រ ធ្វើអោយប្រសើរឡើងនូវដំណើរការគេហទំព័រ និងការទាក់ទាញអ្នកប្រើប្រាស់គឺជាក់ស្តែង។
(PHP 4, PHP 5, PHP 7)
បឋមកថា - ផ្ញើបឋមកថា HTTP ឆៅ
ការពិពណ៌នា
ក្បាល (ខ្សែអក្សរ $ header [, bool $replace = ពិត [, int $http_response_code ]]) : ទុកជាមោឃៈ
បឋមកថា ()ត្រូវបានប្រើដើម្បីផ្ញើបឋមកថា HTTP ឆៅ។ សូមមើល » ការបញ្ជាក់ HTTP/1.1 សម្រាប់ព័ត៌មានបន្ថែមអំពីបឋមកថា HTTP ។
ចងចាំរឿងនោះ។ បឋមកថា ()ត្រូវតែត្រូវបានហៅ មុនពេលលទ្ធផលពិតប្រាកដណាមួយត្រូវបានផ្ញើ ទាំងដោយស្លាក HTML ធម្មតា បន្ទាត់ទទេនៅក្នុងឯកសារ ឬពី PHP ។ វាជាកំហុសទូទៅក្នុងការអានកូដជាមួយ រួមបញ្ចូល, ឬ ទាមទារមុខងារ ឬមុខងារចូលប្រើឯកសារផ្សេងទៀត និងមានចន្លោះ ឬបន្ទាត់ទទេដែលចេញមុន។ បឋមកថា ()ត្រូវបានគេហៅថា
បញ្ហាដូចគ្នានេះកើតមាននៅពេលប្រើឯកសារ PHP/HTML តែមួយ។
/* វានឹងផ្តល់កំហុស។ ចំណាំទិន្នផល
* ខាងលើ ដែលនៅពីមុខ header() call */
បឋមកថា ();
?>
ចេញ;
ប៉ារ៉ាម៉ែត្រ
ខ្សែអក្សរក្បាល។ មានការហៅបឋមកថាករណីពិសេសចំនួនពីរ។ ទីមួយគឺជាបឋមកថាដែលចាប់ផ្តើមដោយខ្សែអក្សរ " HTTP/ " (ករណីមិនសំខាន់ទេ) ដែលនឹងត្រូវបានប្រើដើម្បីដោះស្រាយកូដស្ថានភាព HTTP ដែលត្រូវផ្ញើ។ ឧទាហរណ៍ ប្រសិនបើអ្នកបានកំណត់រចនាសម្ព័ន្ធ Apache ដើម្បីប្រើស្គ្រីប PHP ដើម្បីដោះស្រាយសំណើសម្រាប់ឯកសារដែលបាត់ (ដោយប្រើឯកសារកំហុស
ការណែនាំ) អ្នកប្រហែលជាចង់ធ្វើឱ្យប្រាកដថាស្គ្រីបរបស់អ្នកបង្កើតកូដស្ថានភាពត្រឹមត្រូវ។
?>
បឋមកថា ("HTTP/1.0 404 រកមិនឃើញ"); ករណីពិសេសទីពីរគឺ "ទីតាំង៖" បឋមកថា។ វាមិនត្រឹមតែបញ្ជូនបឋមកថានេះត្រឡប់ទៅកម្មវិធីរុករកប៉ុណ្ណោះទេ ប៉ុន្តែវាក៏ត្រឡប់ aបញ្ជូនបន្ត 201 (302) កូដស្ថានភាពទៅកាន់កម្មវិធីរុករក លុះត្រាតែ ឬ កលេខកូដស្ថានភាពត្រូវបានកំណត់រួចហើយ។
បឋមកថា ( "ទីតាំង៖ http://www.example.com/"); /* ប្តូរទិសកម្មវិធីរុករក */
/* សូមប្រាកដថាលេខកូដខាងក្រោមមិនដំណើរការនៅពេលយើងប្តូរទិស។ */
បឋមកថា ();
?>
ជំនួស
ប៉ារ៉ាម៉ែត្រជំនួសជាជម្រើសបង្ហាញថាតើបឋមកថាគួរតែជំនួសបឋមកថាស្រដៀងគ្នាពីមុនឬបន្ថែមបឋមកថាទីពីរនៃប្រភេទដូចគ្នា។ តាមលំនាំដើម វានឹងជំនួស ប៉ុន្តែប្រសិនបើអ្នកឆ្លងកាត់ មិនពិតជាអាគុយម៉ង់ទីពីរ អ្នកអាចបង្ខំបឋមកថាច្រើនប្រភេទដូចគ្នា។ ឧទាហរណ៍៖
បឋមកថា ("WWW-ផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ៖ ចរចា");
បឋមកថា ("WWW-Authenticate: NTLM" , មិនពិត );
?>
Http_response_code
បង្ខំលេខកូដឆ្លើយតប HTTP ទៅតម្លៃដែលបានបញ្ជាក់។ ចំណាំថាប៉ារ៉ាម៉ែត្រនេះមានឥទ្ធិពលតែប្រសិនបើបឋមកថាមិនទទេ។
ត្រឡប់តម្លៃ
គ្មានតម្លៃត្រូវបានត្រឡប់មកវិញទេ។
កំណត់ហេតុផ្លាស់ប្តូរ
កំណែ | ការពិពណ៌នា |
---|---|
5.1.2 | ឥឡូវនេះមុខងារនេះការពារការបញ្ជូនបឋមកថាច្រើនជាងមួយនៅពេលតែមួយ ដែលជាការការពារប្រឆាំងនឹងការវាយប្រហារដោយការចាក់ក្បាល។ |
ឧទាហរណ៍
ឧទាហរណ៍ #1 ប្រអប់ទាញយក
ប្រសិនបើអ្នកចង់ឱ្យអ្នកប្រើប្រាស់ត្រូវបានដាស់តឿនឱ្យរក្សាទុកទិន្នន័យដែលអ្នកកំពុងផ្ញើ ដូចជាឯកសារ PDF ដែលបានបង្កើត អ្នកអាចប្រើផ្នែក » ចំណងជើងមាតិកា ដើម្បីផ្គត់ផ្គង់ឈ្មោះឯកសារដែលបានណែនាំ និងបង្ខំកម្មវិធីរុករកឱ្យបង្ហាញប្រអប់រក្សាទុក។
// យើងនឹងចេញឯកសារ PDF
បឋមកថា ( "ប្រភេទមាតិកា៖ កម្មវិធី/pdf");
// វានឹងត្រូវបានគេហៅថា downloaded.pdf
បឋមកថា ( "ការរៀបចំមាតិកា៖ ឯកសារភ្ជាប់; ឈ្មោះឯកសារ = "ទាញយក.pdf"");
// ប្រភព PDF មាននៅក្នុង original.pdf
readfile("original.pdf");
?>
ឧទាហរណ៍ #2 ការណែនាំអំពីឃ្លាំងសម្ងាត់
ស្គ្រីប PHP ជារឿយៗបង្កើតមាតិកាថាមវន្តដែលមិនត្រូវដាក់ក្នុងឃ្លាំងសម្ងាត់ដោយកម្មវិធីរុករកតាមអ៊ីនធឺណិតរបស់អតិថិជន ឬឃ្លាំងសម្ងាត់ប្រូកស៊ីណាមួយរវាងម៉ាស៊ីនមេ និងកម្មវិធីរុករកតាមអ៊ីនធឺណិត។ ប្រូកស៊ី និងអតិថិជនជាច្រើនអាចត្រូវបានបង្ខំឱ្យបិទឃ្លាំងសម្ងាត់ជាមួយ៖
បឋមកថា ( "Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
បឋមកថា ( "ផុតកំណត់៖ សៅរ៍, 26 កក្កដា 1997 ម៉ោង 05:00:00 GMT"); // កាលបរិច្ឆេទពីមុន
?>
អ្នកអាចរកឃើញថាទំព័ររបស់អ្នកមិនត្រូវបានទុកក្នុងឃ្លាំងសម្ងាត់ទេ ទោះបីជាអ្នកមិនបញ្ចេញបឋមកថាទាំងអស់ខាងលើក៏ដោយ។ មានជម្រើសមួយចំនួនដែលអ្នកប្រើប្រាស់អាចកំណត់សម្រាប់កម្មវិធីរុករកតាមអ៊ីនធឺណិតរបស់ពួកគេ ដែលផ្លាស់ប្តូរឥរិយាបថឃ្លាំងសម្ងាត់លំនាំដើមរបស់វា។ តាមរយៈការផ្ញើបឋមកថាខាងលើ អ្នកគួរតែបដិសេធការកំណត់ណាមួយដែលអាចបណ្តាលឱ្យលទ្ធផលនៃស្គ្រីបរបស់អ្នកត្រូវបានទុកក្នុងឃ្លាំងសម្ងាត់។
"កំណែដែលលែងប្រើនៃការកំណត់ HTTP 1.1 (IETF RFC 2616) ទាមទារ URI ពេញលេញសម្រាប់ការប្តូរទិស។ ក្រុមការងារ IETF HTTP បានរកឃើញថា កម្មវិធីរុករកតាមអ៊ីនធឺណិតពេញនិយមបំផុត អត់ធ្មត់នឹងការឆ្លងកាត់ URL ដែលទាក់ទង ហើយជាលទ្ធផល ការកំណត់ HTTP 1.1 ដែលបានធ្វើបច្ចុប្បន្នភាព (IETF RFC 7231) បានបន្ធូរបន្ថយឧបសគ្គដើម ដោយអនុញ្ញាតឱ្យប្រើ URL ដែលទាក់ទងនៅក្នុងបឋមកថាទីតាំង។
ដំណោះស្រាយ៖ កុំផ្ញើបឋមកថាទាំងនោះ។
សូមដឹងផងដែរថា IE កំណែ 5, 6, 7 និង 8 ឯកសារដែលបានបង្ហាប់ពីរដងរួចហើយ ហើយមិនដំណើរការបញ្ច្រាស់នោះទេ ដូច្នេះឯកសារ ZIP និងស្រដៀងគ្នានឹងខូចនៅពេលទាញយក។
ដំណោះស្រាយ៖ បិទការបង្ហាប់ (លើសពីអត្ថបទ/html) សម្រាប់កំណែជាក់លាក់នៃ IE ទាំងនេះ ឧ. ដោយប្រើការណែនាំ "BrowserMatch" របស់ Apache ។ ឧទាហរណ៍ខាងក្រោមបិទការបង្ហាប់នៅក្នុងកំណែទាំងអស់នៃ IE៖
BrowserMatch ".*MSIE.*" gzip-only-text/html
4. URI ទាក់ទងមិនត្រូវបានអនុញ្ញាតទេ។
ខុស៖ ទីតាំង៖ /something.php?a=1
ខុស៖ ទីតាំង៖ ?a=1វានឹងធ្វើឱ្យម៉ាស៊ីនមេប្រូកស៊ី និងអតិថិជន http កាន់តែរីករាយ។
15 ឆ្នាំមុន
ប្រសិនបើអ្នកមិនបានប្រើទេ HTTP Response 204 អាចមានភាពងាយស្រួលណាស់។ 204 ប្រាប់ម៉ាស៊ីនមេឱ្យបញ្ចប់សំណើនេះភ្លាមៗ។ វាមានប្រយោជន៍ប្រសិនបើអ្នកចង់ឱ្យមុខងារផ្នែកខាងម៉ាស៊ីនភ្ញៀវ javascript (ឬស្រដៀងគ្នា) ដើម្បីប្រតិបត្តិមុខងារខាងម៉ាស៊ីនមេដោយមិនចាំបាច់ផ្ទុកឡើងវិញ ឬផ្លាស់ប្តូរគេហទំព័របច្ចុប្បន្ន ល្អណាស់សម្រាប់ការធ្វើបច្ចុប្បន្នភាពមូលដ្ឋានទិន្នន័យ ការកំណត់អថេរសកល។ល។
បឋមកថា ("ស្ថានភាព៖ ២០៤"); (ឬការហៅទូរស័ព្ទផ្សេងទៀត)
បឋមកថា ("HTTP/1.0 204 គ្មានការឆ្លើយតប");15 ឆ្នាំមុន
ការហៅទៅកាន់ session_write_close() មុនពេលសេចក្តីថ្លែងការណ៍
បឋមកថា ("ទីតាំង៖ URL");
ចេញ ();
?>
ត្រូវបានណែនាំប្រសិនបើអ្នកចង់ឱ្យប្រាកដថាវគ្គត្រូវបានធ្វើបច្ចុប្បន្នភាពមុនពេលបន្តទៅការបញ្ជូនបន្ត។យើងបានជួបប្រទះស្ថានភាពដែលស្គ្រីបដែលបានចូលដំណើរការដោយការបញ្ជូនបន្តមិនដំណើរការវគ្គត្រឹមត្រូវទេ ដោយសារស្គ្រីបមុនមិនមានពេលដើម្បីធ្វើបច្ចុប្បន្នភាពវា (យើងប្រើកម្មវិធីគ្រប់គ្រងមូលដ្ឋានទិន្នន័យ)។
៩ ខែមុន។
// ប្រយ័ត្នថាការបន្ថែមចន្លោះរវាងពាក្យគន្លឹះ "ទីតាំង" និងសញ្ញាសម្គាល់បង្កឱ្យមានកំហុស Sever ខាងក្នុង
// បន្ទាត់នេះបណ្តាលឱ្យមានកំហុស
7
header("ទីតាំង៖ index.php&controller=produit&action=index");// ខណៈពេលដែលវាត្រូវតែសរសេរដោយគ្មានចន្លោះ
header("ទីតាំង៖ index.php&controller=produit&action=index");1 ឆ្នាំមុន
ការហៅបឋមកថាអាចបំភាន់ដល់អ្នកប្រើប្រាស់ php ថ្មីថ្មោង។
នៅពេលដែល "ការហៅបឋមកថា" ត្រូវបានបញ្ជាក់ វាសំដៅទៅលើទីតាំងខាងលើខាងឆ្វេងបំផុតនៃឯកសារ ហើយមិនមែនមុខងារ "បឋមកថា()" នោះទេ។
"10 ឆ្នាំមុន
នេះគឺជាស្គ្រីប php ដែលខ្ញុំបានសរសេរដើម្បីស្ទ្រីមឯកសារ និងគ្រីបវាជាមួយនឹងប្រតិបត្តិការ xor នៅលើបៃ និងដោយប្រើសោ៖
ការអ៊ិនគ្រីបដំណើរការបានល្អ ប៉ុន្តែល្បឿនត្រូវបានថយចុះចំនួន 2 ឥឡូវនេះគឺ 520KiB/s ។ ឥឡូវនេះអ្នកប្រើប្រាស់ត្រូវបានសួររកពាក្យសម្ងាត់ md5 (ជំនួសឱ្យការរក្សាវានៅក្នុងកូដដោយផ្ទាល់)។ មានផ្នែកខ្លះជាភាសាបារាំង ព្រោះវាជាភាសាកំណើតរបស់ខ្ញុំ ដូច្នេះសូមកែប្រែវាតាមដែលអ្នកចង់បាន។
// ស្ទ្រីមឯកសារនិងអ៊ិនគ្រីបទិន្នន័យនៅលើយន្តហោះ
// ការកំណត់
// -- ឯកសារដើម្បីផ្សាយ
$file = "FILE_out" ;
// -- ការអានសតិបណ្ដោះអាសន្ន
$bufferlength = 3840 ;
// -- គ្រាប់ចុចលេខគោលដប់ប្រាំមួយ។
//$keychar = "9cdfb439c7876e703e307864c9167a15";// មុខងារ៖ បំប្លែងគ្រាប់ចុចគោលដប់ប្រាំមួយក្នុងខ្សែអក្សរទៅជាគោលពីរ
មុខងារ hex2bin ($h) (
ប្រសិនបើ (! is_string ($h)) ត្រឡប់ null ;
$r = អារេ();
សម្រាប់ ($a = 0 ; ($a * 2)< strlen ($h ); $a ++) {
$ta = hexdec ($h [ 2 * $a ]);
$tb = hexdec ($h [(2 * $a + 1 )]);
$r [ $a ] = (int) (($ta<< 4 ) + $tb );
}
ត្រឡប់ $r ;
}// មុខងារដើម្បីផ្ញើបឋមកថាការផ្ទៀងផ្ទាត់
មុខងារ askPassword ($text = "បញ្ចូលពាក្យសម្ងាត់") (
បឋមកថា ( "WWW-Authenticate៖ អាណាចក្រមូលដ្ឋាន="". utf8_decode($text)។ """);
បឋមកថា ("HTTP/1.0 401 គ្មានការអនុញ្ញាត");
ត្រឡប់ 1;
}// គន្លឹះត្រូវបានសួរនៅពេលចាប់ផ្តើមដំបូង
ប្រសិនបើ (!isset($_SERVER [ "PHP_AUTH_PW" ])) (
askPassword();
បន្ទរ « មិនចាំបាច់ទេ!
" ;
ចេញ;
}
// ទទួលបានកូនសោជាគោលដប់ប្រាំមួយ។
$keychar = $_SERVER [ "PHP_AUTH_PW" ];// បំលែងកូនសោ ហើយកំណត់ទំហំនៃកូនសោ
$key = hex2bin ($keychar);
$keylength = រាប់($key);
// Teste si la clé est valide en hex
ប្រសិនបើ ($key =="" || $keylength<= 4 ) {
askPassword("Clé incorrecte!");
// បន្ទរ "Clé មិនត្រឹមត្រូវ!
";
ចេញ ();
}
// Teste si la clé est de longueur d"une puissance de 2
ប្រសិនបើ (($keylength % 2) != 0 ) (
askPassword ( "Clé de longueur មិនត្រឹមត្រូវ (ពហុមុខងារពីរ)");
// បន្ទរ "Clé de longueur incorrecte (puissance de 2 uniquement)
";
ចេញ ();
}// ក្បាល
បឋមកថា ( "ប្រភេទមាតិកា៖ កម្មវិធី/octet-stream;");
បឋមកថា ( "មាតិកា-ផ្ទេរ-អ៊ិនកូដ៖ គោលពីរ");
header("Content-Length: " . filesize($file) ." ; " );
header("filename=\"" . $file . "\"; " );
ទឹកហូរ (); // នេះពិតជាមិនសំខាន់ទេ។// បើកឯកសារជាអានតែប៉ុណ្ណោះ
$fp = fopen($file, "r");
ខណៈពេលដែល (! feof ($ fp))
{
// អានទំហំសតិបណ្ដោះអាសន្ននៃឯកសារ
$buffer = fread ($fp, $bufferlength);
$j = 0 ;
សម្រាប់ ($i = 0; $i< $bufferlength ; $i ++) {
// គ្រាប់ចុចត្រូវបានអានជារង្វិលជុំដើម្បីគ្រីបឯកសារទាំងមូល
ប្រសិនបើ ($i % $keylength == 0 ) (
$j = 0 ;
}
// អនុវត្តប្រតិបត្តិការ xor រវាងកូនសោ និងឯកសារដើម្បីគ្រីប
// ប្រតិបត្តិការនេះស៊ីពេលវេលាស៊ីភីយូច្រើន (ស្ទ្រីមនៅ 1MiB/s នៅលើម៉ាស៊ីនមេរបស់ខ្ញុំ Intel E2180)
$tmp = pack("C", $key[$j]);
$bufferE = ($buffer [ $i ]^ $tmp ); //<==== Le fameux XOR/*
បន្ទរ "
key["$j."]: ";
var_dump($tmp);
បន្ទរ "
buffer["$i."]: ";
var_dump($buffer[$i]);
បន្ទរ "
bufferE: ";
var_dump($bufferE);
បន្ទរ "
";
//*/// ផ្ញើទិន្នន័យដែលបានអ៊ិនគ្រីប
12:06 រសៀល - តើធ្វើដូចម្តេចដើម្បីបញ្ជូនអ្នកប្រើប្រាស់ទៅកាន់ទំព័រផ្សេងទៀត?
បន្ទរ $bufferE ;
// សម្អាតអង្គចងចាំ
$bufferE = "" ;
$j++;
}
$buffer = "" ;
ទឹកហូរ (); // នេះគឺចាំបាច់សម្រាប់ការទាញយកធំៗ
/*
fclose($fp);
ចេញ ();
//*/
}
// បិទឯកសារហើយវាត្រូវបានបញ្ចប់
fclose($fp);មានដំណោះស្រាយជាច្រើន៖
1) javascript
2) HTML
3) php
៤).htaccess
១) នេះជាឧទាហរណ៍នៃកូដក្នុង javascript៖វាយ ="text/javascript">
អ្វីដែលអ្នកត្រូវធ្វើគឺបង្កើតឯកសារ index.htm (ឬ index.html ឬ index.php - មួយក្នុងចំណោមពួកវា! នេះជាការសំខាន់) ហើយដាក់កូដនៅក្នុងវា បន្ទាប់ពីជំនួស http://www.mysite.com/ ជាមួយ អាសយដ្ឋាននៃគេហទំព័ររបស់អ្នក។
អ្នកអាចបញ្ជាក់ផ្លូវទៅកាន់ថតឯកសារ ឬដោយផ្ទាល់ទៅកាន់ឯកសារ ឧទាហរណ៍ http://www.mysite.com/cat/file.phpកម្មវិធីរុករករបស់អ្នកប្រើប្រាស់នឹងត្រូវបានបញ្ជូនបន្តភ្លាមៗ* ទៅកាន់ទំព័រដែលអ្នកបានបញ្ជាក់។
* ប្រសិនបើកម្មវិធីរុករកគាំទ្រការបញ្ជូនបន្ត។ ឥឡូវនេះស្ទើរតែគ្រប់កម្មវិធីរុករកទាំងអស់គាំទ្រការបញ្ជូនបន្ត លុះត្រាតែកម្មវិធីរុករកតាមអ៊ីនធឺណិតត្រូវបានកំណត់រចនាសម្ព័ន្ធយ៉ាងឆ្លាតវៃដោយអ្នកប្រើប្រាស់ =)ដើម្បីបង្ហាញអ្នកប្រើប្រាស់នូវសារមួយ មុនពេលបញ្ជូនបន្ត សូមប្រើកំណែផ្សេងនៃស្គ្រីប៖
type="text/javascript">
ឥឡូវនេះអ្នកនឹងត្រូវបានផ្លាស់ទី!
% ប្រសិនបើកម្មវិធីរុករករបស់អ្នកមិនគាំទ្រការបញ្ជូនបន្ត សូមចុចទីនេះ៖ នៅទីនេះ
http://somesite2.com/ -- ជំនួសដោយអាសយដ្ឋាននៃគេហទំព័ររបស់អ្នក។
2) ដើម្បីប្តូរទិសកម្មវិធីរុករករបស់អ្នកដោយប្រើ HTML សូមប្រើស្លាក META៖
http://www.blahblahblahsite.com/ -- ជំនួសដោយអាសយដ្ឋានគេហទំព័ររបស់អ្នក។
10 - មានន័យថាកម្មវិធីរុករកនឹងត្រូវបានបញ្ជូនបន្តបន្ទាប់ពី 10 វិនាទី។
កំណត់ទៅ 0 សម្រាប់ការប្តូរទិសភ្លាមៗ។
ប្រសិនបើអ្នកកំណត់ពេលអស់ពេល នោះនៅក្នុងឯកសារ អ្នកអាចទុកសារទៅកាន់អ្នកប្រើប្រាស់ ឧទាហរណ៍៖
ក្នុងរយៈពេល 10 វិនាទីអ្នកនឹងត្រូវបានដឹកជញ្ជូន!
ប្រសិនបើកម្មវិធីរុករករបស់អ្នកមិនគាំទ្រការបញ្ជូនបន្ត សូមចុចទីនេះ៖ នៅទីនេះ
3) ការបញ្ជូនបន្តភ្លាមៗដោយប្រើ PHP:
http://myownsite.com/folder/ -- ជំនួសដោយអាសយដ្ឋានគេហទំព័រ ឬទំព័ររបស់អ្នក។
កូដគួរតែត្រូវបានដាក់ក្នុងឯកសារដែលមានផ្នែកបន្ថែម .php ឧទាហរណ៍ index.php4) ការបញ្ជូនបន្តភ្លាមៗដោយប្រើ .htaccess:
ដូចកម្មវិធីណាមួយដែរ ម៉ាស៊ីនមេគេហទំព័រមានការកំណត់ជាក់លាក់។ ប៉ុន្តែ អ្នកក្នុងនាមជាអ្នកប្រើប្រាស់ Apache ប្រហែលជាមិនមានសិទ្ធិផ្លាស់ប្តូរការកំណត់ Apache តាមរយៈឯកសារសំខាន់ៗរបស់វាទេ ដែលឥទ្ធិពលនៃការអនុវត្តចំពោះអ្នកប្រើប្រាស់ទាំងអស់នៃម៉ាស៊ីនមេនេះ។ ប៉ុន្តែ អ្នកអាចផ្លាស់ប្តូរឯកសារកំណត់រចនាសម្ព័ន្ធមួយចំនួន ដែលអនុវត្តចំពោះគេហទំព័ររបស់អ្នកប៉ុណ្ណោះ។ ឯកសារមួយក្នុងចំណោមឯកសារទាំងនេះគឺ .htaccess
នេះគឺជាឯកសារកំណត់រចនាសម្ព័ន្ធដែលអាចបត់បែនបានសម្រាប់ម៉ាស៊ីនមេគេហទំព័រ Apache ។ "អាចបត់បែនបាន" មានន័យថានៅពេលដែលអ្នកផ្លាស់ប្តូរអ្វីមួយនៅក្នុងឯកសារនេះ ការផ្លាស់ប្តូរនឹងមានប្រសិទ្ធភាពភ្លាមៗ។ តាមពិត គោលបំណងនៃឯកសារ .htaccess គឺផ្តល់មធ្យោបាយកំណត់រចនាសម្ព័ន្ធ Apache សម្រាប់អ្នកប្រើប្រាស់ដែលមិនអាចផ្លាស់ប្តូរឯកសារកំណត់រចនាសម្ព័ន្ធសំខាន់ httpd.conf (ឯកសារនេះគឺជាឯកសារកំណត់រចនាសម្ព័ន្ធសំខាន់របស់ម៉ាស៊ីនមេ Apache ហើយសកម្មភាពរបស់វាអនុវត្តទាំងស្រុងចំពោះអ្នកប្រើប្រាស់ទាំងអស់នៃ ច្បាប់ចម្លងនៃកម្មវិធី Apache) ។
ឯកសារនេះមិនអាចចូលប្រើបានដោយអ្នកប្រើប្រាស់បណ្ដាញពីកម្មវិធីរុករក។ ប្រសិនបើឯកសារ .htaccess មានទីតាំងនៅក្នុងថត root នៃម៉ាស៊ីនមេ នោះសកម្មភាពរបស់វាអនុវត្តចំពោះម៉ាស៊ីនមេទាំងមូល លើកលែងតែថតឯកសារទាំងនោះដែលឯកសារ .htaccess ផ្សេងទៀតមានទីតាំងនៅ (ហើយលើកលែងតែថតទាំងអស់ "ខាងក្រោម" ថតឯកសារនេះជាមួយទីពីរ។ htaccess) ។
ការកំណត់រចនាសម្ព័ន្ធឯកសារ .htaccess អាចជួយអ្នកក្នុងស្ថានភាពជាច្រើន ប៉ុន្តែសូម្បីតែកំហុសវាក្យសម្ព័ន្ធតិចតួចបំផុត (ដូចជាបាត់កន្លែងទំនេរដែលវាត្រូវការ) អាចបណ្តាលឱ្យមាតិកាគេហទំព័ររបស់អ្នកបង្ហាញមិនត្រឹមត្រូវ ឬមិនពេញលេញ។ ដោយសារ .htaccess គឺជាឯកសារប្រព័ន្ធដែលលាក់ សូមប្រាកដថាម៉ាស៊ីនភ្ញៀវ FTP របស់អ្នកត្រូវបានកំណត់រចនាសម្ព័ន្ធដើម្បីបង្ហាញឯកសារដែលលាក់។
បង្កើតឯកសារអត្ថបទទទេដោយប្រើកម្មវិធីនិពន្ធអត្ថបទដូចជា Notepad ហើយរក្សាទុកវាជា htaccess.txt ។ ហេតុផលដែលអ្នកត្រូវការរក្សាទុកឯកសារជា htaccess.txt គឺថាប្រព័ន្ធប្រតិបត្តិការជាច្រើន និងកម្មវិធី FTP មិនអាចអានឯកសារ .htaccess តាមលំនាំដើមបានទេ។ បន្ទាប់ពីផ្ទុកឡើងទៅម៉ាស៊ីនមេ អ្នកអាចប្តូរឈ្មោះឯកសារទៅ .htaccess ។
ប្តូរទិសគេហទំព័រទាំងមូលទៅដែនផ្សេងទៀត (ឧទាហរណ៍ example.net ត្រូវបានបញ្ជូនបន្តទៅ example.com)។
នរណាម្នាក់អាចផ្ញើបាន។ ប៉ុន្តែការបង្វែរទិសដៅត្រឹមត្រូវគឺជាសិល្បៈទាំងមូល។ ប៉ុន្តែការបញ្ជូនអ្នកប្រើប្រាស់ទៅកាន់ផ្លូវត្រូវនៅលើអ៊ីនធឺណិតគឺកាន់តែពិបាក។ ការបញ្ជូនបន្តទៅ php គឺសមបំផុតសម្រាប់ការនេះ។
តើការបញ្ជូនបន្តប្រភេទណា?
នៅក្នុងការសរសេរកម្មវិធីគេហទំព័រ ស្ថានភាពកើតឡើងនៅពេលដែលអ្នកត្រូវការប្តូរទិសអ្នកប្រើប្រាស់តាមតំណទៅកាន់អាសយដ្ឋានផ្សេង។ ជាការពិតណាស់ នៅ glance ដំបូង ការអនុវត្តការបញ្ជូនបន្តបែបនេះមើលទៅ "ខុសច្បាប់" បន្តិច។ នៅក្នុងការអនុវត្ត ការបញ្ជូនបន្តបែបនេះគឺស្ថិតនៅក្នុងតម្រូវការមិនត្រឹមតែក្នុងចំណោមអ្នកវាយប្រហារប៉ុណ្ណោះទេ ប៉ុន្តែក្នុងចំណោមអ្នកគ្រប់គ្រងគេហទំព័រស្មោះត្រង់ផងដែរ៖
ក្នុងករណីណាដែលការបញ្ជូនបន្តត្រូវបានទាមទារ៖
- នៅពេលដែលម៉ាស៊ីនគេហទំព័រត្រូវបានជំនួស ស្ថាបត្យកម្មនៃធនធានទាំងមូលផ្លាស់ប្តូរជាលទ្ធផល។ បន្ទាប់មកបញ្ហាកើតឡើងនៃរបៀបដើម្បីធ្វើឱ្យការបញ្ជូនបន្តមួយ;
- នៅពេលដែលរចនាសម្ព័ន្ធនៃធនធានត្រូវបានគូរឡើងវិញ ផ្នែកទាំងមូល ឬសម្ភារៈមួយត្រូវបានបន្ថែម លុប ឬផ្ទេរ។ ខណៈពេលដែលដំណើរការនេះកំពុងកើតឡើង វាអាចទៅរួចជាបណ្ដោះអាសន្នដើម្បីបញ្ជូនអ្នកប្រើប្រាស់ទៅកាន់ផ្នែកដែលចង់បាន។
- ប្រសិនបើគេហទំព័របានផ្លាស់ប្តូរឈ្មោះដែនរបស់ខ្លួននាពេលថ្មីៗនេះ បន្ទាប់ពីផ្លាស់ប្តូរឈ្មោះដែននោះ គេហទំព័រចាស់នឹងនៅតែបង្ហាញក្នុងលទ្ធផលស្វែងរកមួយរយៈ។ ក្នុងករណីនេះ អ្នកប្រើប្រាស់នឹងត្រូវបានបញ្ជូនបន្តទៅកាន់ដែនថ្មីដោយស្វ័យប្រវត្តិដោយម៉ាស៊ីនស្វែងរក។
- ក្នុងអំឡុងពេលដំណើរការអនុញ្ញាត ជាក្បួន នៅលើគេហទំព័រធំមួយមានអ្នកប្រើប្រាស់ពីរក្រុម៖ អ្នកទស្សនាធម្មតា និងអ្នកគ្រប់គ្រងធនធាន។ ក្នុងករណីនេះ វាសមហេតុផលក្នុងការអនុវត្តការបញ្ជូនបន្តសម្រាប់អ្នកប្រើប្រាស់ម្នាក់ៗតាមសិទ្ធិ និងតួនាទីរបស់គាត់។ បន្ទាប់ពីការអនុញ្ញាត អ្នកគ្រប់គ្រងគេហទំព័រ ឬអ្នកសម្របសម្រួលចូលទៅកាន់ផ្នែករដ្ឋបាលនៃធនធាន ហើយអ្នកទស្សនាចូលទៅកាន់ផ្នែកអ្នកប្រើប្រាស់នៃធនធាន។
លក្ខណៈពិសេសនៃការបញ្ជូនបន្តទៅ php
មិនដូចភាសាផ្សេងទៀត PHP មានគុណសម្បត្តិមួយចំនួនក្នុងការអនុវត្តការបញ្ជូនបន្ត៖
- php គឺជាភាសាសរសេរកម្មវិធីចំហៀងម៉ាស៊ីនមេ។ ដូច្នេះ ការបញ្ជូនបន្តនឹងមិនកើតឡើងនៅក្នុងកូដ html នៃទំព័រដែលបង្ហាញនៅក្នុងកម្មវិធីរុករកនោះទេ ប៉ុន្តែនៅក្នុងស្គ្រីបដែលមានទីតាំងនៅលើម៉ាស៊ីនមេ។
- ការបញ្ជូនបន្តទៅ php អាចត្រូវបានអនុវត្តតាមវិធីជាច្រើន។ ដែលពង្រីកកម្មវិធីរបស់ខ្លួនយ៉ាងខ្លាំង;
- ដោយសារដំណើរការទិន្នន័យនៅលើម៉ាស៊ីនមេ ការបញ្ជូនបន្តដែលត្រូវបានអនុវត្តដោយប្រើ PHP មិនសូវងាយនឹងផលប៉ះពាល់នៃតម្រងម៉ាស៊ីនស្វែងរកទេ។
ដើម្បីប្តូរទិសក្នុង PHP មុខងារ header() ត្រូវបានប្រើ។ វាត្រូវបានប្រើដើម្បីផ្ញើបឋមកថា http ។ វាក្យសម្ព័ន្ធរបស់វាគឺ៖
បឋមកថាទុកជាមោឃៈ (ខ្សែអក្សរ $string [, bool $replace = true [, int $http_response_code]])
អាគុយម៉ង់ដែលទទួលយកដោយមុខងារ៖
- ខ្សែអក្សរ $string- បន្ទាត់ក្បាល;
អាគុយម៉ង់នេះមានពីរប្រភេទ។ ទីមួយគឺសម្រាប់ផ្ញើលេខកូដស្ថានភាពការតភ្ជាប់។ វាចាប់ផ្តើមជាមួយ "HTTP/" ។ ប្រភេទផ្សេងទៀតផ្ញើលេខកូដស្ថានភាព (REDIRECT 302) ទៅកាន់កម្មវិធីរុករកតាមអ៊ីនធឺណិតរបស់អតិថិជន រួមជាមួយនឹងបឋមកថា។ អាគុយម៉ង់នេះចាប់ផ្តើមដោយ "ទីតាំង៖"
- bool $replace គឺជាគុណលក្ខណៈស្រេចចិត្តនៃប្រភេទ bool ។ ទទួលខុសត្រូវលើការបដិសេធបឋមកថាមុន។ ប្រសិនបើកំណត់ទៅពិត បឋមកថាមុន ឬបឋមកថានៃប្រភេទដូចគ្នានឹងត្រូវបានជំនួស។ ប្រសិនបើអាគុយម៉ង់ត្រូវបានកំណត់ទៅមិនពិត នោះបឋមកថានឹងមិនត្រូវបានសរសេរឡើងវិញទេ។ តាមលំនាំដើម តម្លៃនេះត្រូវបានកំណត់ទៅពិត ;
- http_response_code – អាគុយម៉ង់បង្ខំឱ្យកូដឆ្លើយតប HTTP ។ ការដំឡើងកូដនឹងទទួលបានជោគជ័យដោយផ្តល់ថាអាគុយម៉ង់ខ្សែអក្សរមិនទទេ។
កូដស្ថានភាព HTTP គឺជាផ្នែកមួយនៃបន្ទាត់កំពូលនៃការឆ្លើយតបរបស់ម៉ាស៊ីនមេ។ កូដមានបីលេខ អមដោយអត្ថបទពន្យល់ជាភាសាអង់គ្លេស។ ខ្ទង់ទីមួយទទួលខុសត្រូវចំពោះថ្នាក់ស្ថានភាព។ ការបញ្ជូនបន្តត្រូវគ្នាទៅនឹងលេខកូដពី 300 ដល់ 307។ ការពិពណ៌នាពេញលេញរបស់ពួកគេអាចរកបាននៅក្នុងឯកសារបច្ចេកទេសដែលត្រូវគ្នា។
នៅពេលប្រើមុខងារ header() ដើម្បីប្តូរទិសតំណខាងក្រៅ ទីតាំងនៃការហៅរបស់វាមានសារៈសំខាន់ណាស់។ នៅក្នុងកូដ វាគួរតែស្ថិតនៅខាងលើស្លាក html ទាំងអស់៖
ដោយប្រើបឋមកថា () ប្តូរទិស
ដើម្បីបង្ហាញពីរបៀបដែលមុខងារដំណើរការនៅលើម៉ាស៊ីនមេមូលដ្ឋាន អ្នកត្រូវបង្កើតឯកសារពីរ។ ចូរហៅមួយក្នុងចំណោមពួកគេថា redirect.php និងមួយទៀត redirect2.php ។ នៅខាងក្នុងទីមួយ យើងនឹងធ្វើការហៅមុខងារក្នុងទម្រង់ដូចខាងក្រោមៈ
នៅក្នុងឯកសារមួយទៀត យើងដាក់បន្ទាត់៖
បន្ទរ "ជំរាបសួរ! អ្នកស្ថិតនៅក្នុងឯកសារ redirect2.php";
ឧទាហរណ៍ជាក់ស្តែងមួយចំនួនទៀតនៃការប្រើការបញ្ជូនបន្តទៅ php៖
- បង្ខំលេខកូដស្ថានភាព http ឱ្យឆ្លងកាត់នៅពេលប្រើអាគុយម៉ង់ដំបូងនៃមុខងារបឋមកថា () ដូចជា " ទីតាំង"តាមលំនាំដើម លេខកូដស្ថានភាពត្រូវបានផ្ញើទៅបឋមកថា" 302 » ( បានផ្លាស់ប្តូរជាបណ្តោះអាសន្ន) វាអាចក្លាយជាបញ្ហានៅពេលផ្លាស់ទីធនធានទៅឈ្មោះដែនផ្សេងទៀត។ នៅក្នុងម៉ាស៊ីនស្វែងរក ការបញ្ជូនបន្តបណ្តោះអាសន្នបែបនេះអាចចំណាយពេលយូរជាងនេះ។ យ៉ាងណាមិញ ម៉ាស៊ីនស្វែងរកតែងតែវិភាគកូដស្ថានភាព។ ហើយវានិយាយថា " បានផ្លាស់ប្តូរជាបណ្តោះអាសន្ន" ឧទាហរណ៍នៃការសរសេរឡើងវិញដោយបង្ខំនៃកូដស្ថានភាព " 302 "ទៅ" 301 » ( ផ្លាស់ទីជាអចិន្ត្រៃយ៍):
ការសរសេរឡើងវិញក៏អាចធ្វើទៅបានជាពីរដំណាក់កាល។ បន្ទាត់ទីមួយសរសេរកូដស្ថានភាពឡើងវិញ ហើយទីពីរបញ្ជូនបន្តទៅអាសយដ្ឋានថ្មី៖
- ការប្រើការបញ្ជូនបន្តនៃតំណខាងក្រៅដើម្បីប្តូរទិសអាស្រ័យលើតួនាទីរបស់អ្នកប្រើ។ តួនាទីត្រូវបានកំណត់ក្នុងអំឡុងពេលដំណើរការផ្ទៀងផ្ទាត់។ តម្លៃដែលត្រូវដំណើរការត្រូវបានសរសេរទៅ $who variable៖
- ឧទាហរណ៍ជាក់ស្តែងសាមញ្ញនៃការអនុវត្តការបញ្ជូនបន្តតំណខាងក្រៅ - ការចុចលើតំណនាំទៅកាន់ទំព័រ php ។ ពីទីនេះអ្នកប្រើប្រាស់ត្រូវបានផ្ទេរទៅ Rambler ក្នុងរយៈពេល 5 វិនាទី។ កូដ HTML៖
ចុចខ្ញុំ
Redirect3.php លេខកូដឯកសារ៖
ជាការប្រសើរណាស់, នៅទីនេះយើងកំពុងរៀនមូលដ្ឋានគ្រឹះនៃការបញ្ជូនបន្តនៅក្នុង PHP ។ ឥឡូវនេះអ្នកអាចទទួលយកភារកិច្ចនៃការបញ្ជូនបន្តអ្នកប្រើប្រាស់ដោយសុវត្ថិភាពក្នុងទិសដៅត្រឹមត្រូវ។ រឿងចំបងគឺកុំធ្វើឱ្យមានកំហុសក្នុងទិសដៅ បើមិនដូច្នេះទេ អ្នកនឹងនាំអ្នកប្រើប្រាស់ទាំងអស់របស់អ្នកទៅកាន់គេហទំព័ររបស់នរណាម្នាក់...