Perl - ከጥያቄ ጋር ፋይሎችን ወደ HTTP አገልጋይ መላክ
- ፐርል
እንደ እውነቱ ከሆነ, ምንም ኦሪጅናል የለም, በቂ ሰነዶች አሉ, እንዲያውም ከዚያ በላይ, ምንም እንኳን የኋለኛው በጣም ኃይለኛ የጭንቀት መንስኤን ያመጣል. ስለዚህ፣ አስር ጊዜ ከማንበብ እና መሰንቆውን ከመርገጥ አንድ ጊዜ እንዴት እና ምን እየተሰራ እንዳለ ማሳየት ይቀላል። ሁኔታ፡ በአካባቢው የሚገኙ አንዳንድ ሁለትዮሽ ፋይሎች አሉ፣ እነዚህን ፋይሎች የምናስቀምጥበት አገልጋይ አለ፣ በዚህ አገልጋይ ላይ ፋይሎችን የሚጭን ስክሪፕት (ፎርም ፕሮሰሰር) አለ።
ተግባር፡ እነዚህ ፋይሎች አሳሽ እንደሆንን እና መረጃውን በቅጹ እንደላክን በድር በይነገጽ (ቅጽ ተቆጣጣሪ) ወደ አገልጋዩ መጨመር አለባቸው።
LWP :: UserAgent በመጠቀም
የማመንጨት ስልተ ቀመር- ጥያቄ ይፍጠሩ (ኤችቲቲፒ :: ጥያቄ);
- "አሳሽ" (LWP :: UserAgent) ይፍጠሩ;
- ለእሱ ራስጌዎችን እንገልጻለን;
- ጥያቄ ይላኩ;
;
$request-> add_part ($ file_content); $fh ዝጋ; # ... እና ሌሎችም ለእያንዳንዱ ፋይል... የእኔ $response = $ua->ጥያቄ($ጥያቄ); ከሆነ ($ ምላሽ->ስኬት ነው) ($response->ይዘት ያትሙ) ሌላ (ሞት $response->status_line) የመስክ ስምሶኬት በመጠቀም የተወሰነ እሴት"); # እና እዚህም utf8 $ጥያቄ->ክፍልን ይጨምሩ ($ መስክ) ፤ # ... እና ስለዚህ ፣ ለእያንዳንዱ የጽሑፍ መስክ ... # በመቀጠል ፣ ጥያቄያችንን እናካፍላለን ፣ ግን ያለ ፋይሎች ፣ ወደ ዋናው ራስጌ እና የይዘቱ የመጀመሪያ ክፍል # በመደበኛ አገላለጽ እንከፋፈላለን ምክንያቱም $request->headers-> as_string የጥያቄውን የመጀመሪያ መስመር ማለትም የPOST ትዕዛዝን ስለማይመልስ # እና በእርግጥ መስመሩን እራስዎ መሰብሰብ ይችላሉ ፣ ግን እኔ 'ም በጣም ሰነፍ , 0, -4); ተመሳሳይ ድንበር $content =~ s/(\-\-[^\n]+)$//s; my $boundary = $1; #የጥያቄውን የመጀመሪያ ርዝመት አስላ የኔ $ርዝመት = ርዝመት $content # አሁን የእኛ ፋይሎች: my $files = (stat $file); -ዳታ; $header->ራስጌ("ይዘት-አቀማመጥ"=> "ቅጽ-ውሂብ፤ ስም="ፋይል "፤ ፋይል ስም = ""፤ $f_header->ራስጌ("ይዘት-አይነት" => " "); # ምንም እንኳን የፋይል ስም ከፋይል ስም $header->ራስጌ ("ይዘት-አይነት") ሊሰላ ቢችልም => ""); $f_header = $boundary."\n"$f_header->እንደ_string"\n"፤ # ወደ ጥያቄው ርዝመት ጨምር $ርዝመት += ርዝመት $f_header፤ $length += $መጠን፤ # በእውነቱ , አሰራሩ ከታች ያለው ብዙ ፋይሎች ሲኖሩ ብቻ ነው # ከዚያም በመጀመሪያ የይዘቱን ርዝመት ማስላት አለብን, ምክንያቱም እሱ (ርዝመቱ) በዋናው ራስጌ ግፊት @ ($ ፋይሎች) ውስጥ ይገለጻል. (ራስጌ => $f_header፣ file => $ፋይል)፤ ለእያንዳንዱ ፋይል... እንዲሁም የመጨረሻውን መስመር ይቁጠሩ # ሶኬቱን ይክፈቱ my $socket = IO:: ሶኬት: : INET->አዲስ($domain.")|| die $!; "\nየይዘት-ርዝመት:"$ ርዝመት; # ራስጌ እና የይዘቱ የመጀመሪያ ክፍል ላክ $socket $head;የህትመት $socket $content; ፋይል (@($ፋይሎች)) ($socket $file->(ራስጌ) ያትሙ፤ (የእኔ $fh፣ "<", $file->(ፋይል));<$fh>$_ሶኬት ያትሙ<$socket>;በዚህ ትምህርት በቅጾች እና በገጾች መካከል መረጃን የማስተላለፊያ ዘዴዎችን እንመለከታለን. እንደነዚህ ያሉ ዘዴዎች POST እና GET ናቸው. ስለ እያንዳንዳቸው በተናጠል እና በበለጠ ዝርዝር እንነጋገራለን. በአጠቃላይ ይህ በቅጾች መካከል ለመግባባት ያስፈልጋል። ለምሳሌ, አንዳንድ መስኮችን በአንድ ገጽ ላይ እንሞላለን እና ለሂደቱ ወደ ሌላ ገጽ ማስተላለፍ አለብን.
በ PHP ውስጥ የGET ዘዴ
በመጀመሪያ የGET ዘዴን እንመልከት። ይህ ሁሉም ተለዋዋጮች እና እሴቶቻቸው በቀጥታ በአድራሻው ውስጥ ሲተላለፉ ነው. አሁን, አንድ ምሳሌ በመጠቀም, ሁሉንም ነገር ያያሉ, እና እንዲያውም አብዛኛዎቹ ጣቢያዎች እና መድረኮች እንዴት እንደሚሠሩ ይገነዘባሉ.
ለምሳሌ፣ እንደዚህ ያለ የኤችቲኤምኤል ገጽ አለን።
አገናኙን ይመልከቱ? ውስብስብ እና በርካታ ክፍሎችን ያቀፈ ነው. ንእሽቶ ኽትከውን ንኽእል ኢና።
https://site- የጎራ አድራሻ ወይም, ተብሎም ይጠራል, አስተናጋጅ.
index.php- ጥያቄውን የሚያስኬድ ገጽ በ PHP ውስጥ።
?
- በአድራሻው እና በእገዳው መካከል የመለያየት ምልክት ከተለዋዋጮች ጋር።
በመቀጠልም ተለዋዋጮች እና እሴቶቻቸው ይመጣሉ, እነሱም በምልክቱ ይለያያሉ &
.
ስም=ሰርጌይ- ተለዋዋጭ ስም እና እሴቱ Sergey.
ዕድሜ=22- ተመሳሳይ ነገር ፣ ተለዋዋጭ ዕድሜ ፣ እሴት 22።
ሁሉንም ነገር አስተካክለናል፣ አሁን የGET ዘዴን በመጠቀም ይህ በ php ውስጥ እንዴት እንደሚሰራ እንይ።
የኢንዴክስ.php ገጽ፣ እርስዎ እንደሚያስታውሱት፣ ወደ እሱ አልፈናል፡-
በመጀመሪያ, አንድ ምክር: ሁልጊዜ ተለዋዋጮችዎን ትክክለኛነት ያረጋግጡ: ባዶነት, ትክክለኛ እሴቶችን ለማክበር, ወዘተ. ሁሉም ነገር በአድራሻ አሞሌው በኩል ስለሚተላለፍ, ውሂቡ በቀላሉ ሊተካ እና ጣቢያውን ሊጎዳ ይችላል. አሁን ለኮዱ ራሱ፡ እኛ ስንጠቀም የስም እና የዕድሜ ተለዋዋጮችን ባዶነት አረጋገጥን እና ባዶ ካልሆኑ እናሳያቸዋለን፣ እና ባዶ ከሆኑ በቀላሉ ሪፖርት አድርገናል።
ቀላል ነው አይስማሙም? ለምሳሌ የኤችቲኤምኤል ገጽ መፍጠር እና በምናሌው ውስጥ በተለዋዋጮች በኩል አገናኞችን ማድረግ እና በ index.php ሂደት ውስጥ ተለዋዋጭውን በተቀበለው እሴት ላይ በመመስረት አንድ የተወሰነ ገጽ ማሳየት ይችላሉ። ደህና, ስለዚህ ጉዳይ በኋላ እንነጋገራለን, በ PHP ውስጥ ከባዶ ድር ጣቢያ ስለመፍጠር በአንድ ጽሑፍ ውስጥ. ምንም ነገር እንዳያመልጥዎ, ለ RSS እንዲመዘገቡ እመክርዎታለሁ.
የPOST ዘዴ በ PHP ውስጥ
ይህ ዘዴ እንዴት እንደሚሰራ ለማሳየት ከአድራሻ ጋር ከቀላል መስመር የበለጠ ትንሽ እንፈልጋለን :) ለመሙላት ቅጽ ያለው የኤችቲኤምኤል ገጽ መፍጠር አለብን ፣ ግን ያ ደህና ነው ፣ ዝግጁ የሆነ ምሳሌ እሰጣለሁ ለእርስዎ፡-
ስለዚህ፣ ቀላል ቅጽ ያለው የኤችቲኤምኤል ገጽ ፈጥረናል። ያስታውሱ፣ የPOST ዘዴ በቅጽ ብቻ ጥቅም ላይ ሊውል ይችላል።
የቅጹ የመጀመሪያ መለኪያ "ዘዴ" ነው, ለዝውውሩ የምንጠቀምበትን ዘዴ ይገልጻል. እንደገመቱት ይህ ወይ GET ወይም POST ነው። ከዚህም በላይ GET ከተዋቀረ ሁሉም የመስክ ስሞች (በተለዋዋጭ ስሞች መልክ) እንዲሁም እሴቶቻቸው በማጣቀሻነት ያልፋሉ, ስለ GET ዘዴ ክፍል. POST ከተዋቀረ ሁሉም ተለዋዋጭ ስሞች እና እሴቶች እንደ አሳሽ ጥያቄ ወደ ድር አገልጋዩ ይተላለፋሉ። ማለትም በአድራሻ አሞሌው ውስጥ አይታዩም። በብዙ አጋጣሚዎች ይህ በጣም ጠቃሚ ነው. POST የበለጠ ደህንነቱ የተጠበቀ ነው ፣ ይህም ለመረዳት የሚቻል ነው ፣ ምክንያቱም ተለዋዋጮች ከዋጋዎቻቸው ጋር ለማርትዕ በጣም ቀላል አይደሉም ፣ ምንም እንኳን የሚቻል ቢሆንም።
ሁለተኛው የቅጽ መለኪያ "ድርጊት" ነው. ይህ ውሂቡን የምናስተላልፍበት የስክሪፕት ፋይል መንገድ እና ስም ነው። በእኛ ሁኔታ ይህ index.php ነው. ይህ መንገድ ሙሉ በሙሉ ሊተላለፍ ይችላል, ማለትም, እንደዚህ: ድርጊት = "https://my_site.ru/index.php". የ "እርምጃ" መለኪያውን ዋጋ ካልገለጹ, ሁሉም መረጃዎች ወደ ዋናው ስክሪፕት ይተላለፋሉ, ማለትም, የጣቢያዎ የመረጃ ጠቋሚ ገጽ index.php, ይህም በጣም ምክንያታዊ ነው.
አሁን መረጃውን ከቅጻችን እናገኛለን. ወደ index.php ስላስተላለፍነው፣ከዚህ በታች የዚህ ገጽ ኮድ ይሆናል።
"፤ አስተጋባ" ስም - "፤ አስተጋባ $_POST["የተጠቃሚ_ስም"]፤ አስተጋባ"
ዕድሜ - "፤ አስተጋባ $_POST["ዕድሜ"]፤ አስተጋባ "ዓመታት"፤) ሌላ ( አስተጋባ "ተለዋዋጮች አልደረሱም። ሁሉንም ነገር እንደገና አረጋግጥ።"፤ ) ?>
ባዶነት እና ትክክለኛ እሴቶችን ማረጋገጥን አይርሱ. በመቀጠል፣ ተለዋዋጮቻችን ለምን የተጠቃሚ ስም እና ዕድሜ ተብለው እንደተጠሩ ማብራራት አለብን? እና ከላይ የፈጠርነውን የቅጹን መስኮች ይመልከቱ. እዚ እዩ። የግቤት ስም = "የተጠቃሚ_ስም" አይነት = "ጽሑፍ"? የስም መለኪያው ይህንን መስክ ተጠቅመን የምናገኘውን የተለዋዋጭ ስም የሚገልጽበት ይህ ነው። እድሜም ያው ነው። ግልጽ ነው ብዬ ተስፋ አደርጋለሁ። እንግዲህ፣ ተለዋዋጭ እና እሴቱ በPOST በኩል ማግኘት ከላይ ከተነጋገርነው ከ GET ምንም አይለይም።
ደህና ፣ ትልቅ ትምህርት ሆኖ ተገኘ ፣ ግን በጣም ጠቃሚ ከሆኑት ውስጥ አንዱ ፣ ምክንያቱም በቅጾች እና ገጾች መካከል ተለዋዋጮችን ማለፍ በትክክል PHP የምንጠቀምበት መስተጋብር ነው።
በአብዛኛዎቹ ጣቢያዎች ላይ የሚከተሉትን አድራሻዎች ማየት እንደሚችሉ አስተውለህ ይሆናል።
ኤችቲቲፒ://site/index.php?blog=2
እዚህ, php ሳያውቁ እንኳን, ፋይል እየደረስን እንደሆነ መገመት ይችላሉ index.phpነገር ግን ጥቂት ሰዎች ከጥያቄ ምልክት በኋላ ምን እንደሚመጣ ያውቃሉ. በጣም ቀላል ነው፡- ?ብሎግ=2ይህ የ"2" እሴት ያለው የአለምአቀፍ ተለዋዋጭ "$_GET["ብሎግ"] መግለጫ ነው። ስለዚህ, ከመረጃ ቋቱ መረጃን የማሳየት ሃላፊነት ባለው ስክሪፕት ውስጥ ተለዋዋጭ አሳልፋለሁ. ሁሉንም ነገር በግልፅ ማየት የምትችልበት ትንሽ ስክሪፕት እንፃፍ፡-
ከሆነ(isset($_GET["ብሎግ")]) (
አስተጋባ $_GET["ብሎግ"];
}
?>
የ if() ሁኔታ ኦፕሬተርን እንጠቀማለን እና የሚከተለው መስመር እንደ ቅድመ ሁኔታ ጥቅም ላይ ይውላል።
ኢሴት($_GET["ብሎግ")]
isset () በቅንፍ ውስጥ የተገለጸው ተለዋዋጭ መኖር አለመኖሩን ለማወቅ ይፈቅድልሃል፣ ማለትም በኮዱ ላይ የገለጽኩት ሁኔታ እንደዚህ ይመስላል፡ ተለዋዋጭ $_GET["ብሎግ"] ካለ፣የዚህን ተለዋዋጭ ይዘቶች አሳይ በስክሪኑ ላይ. የሆነው ይኸውና፡-
እኔ ግልጽ ነው ብዬ አስባለሁ ዓለም አቀፍ ተለዋዋጭ ተፈጥሯል $_GETበአድራሻ አሞሌው ውስጥ ካስታወቅነው መለያ ጋር ( በዚህ አጋጣሚ ከ “ብሎግ” መለያ ጋር)
አሁን አንድ ነጥብ ግልጽ ማድረግ እፈልጋለሁ. ሁለት ተለዋዋጮችን ማወጅ ያስፈልገናል እንበል, ይህንን እንዴት ማድረግ እንደሚቻል? የመጀመሪያው ተለዋዋጭ ከጥያቄ ምልክት በኋላ ይገለጻል "?" ሁለተኛው ተለዋዋጭ ከ"&" ምልክት በኋላ ይገለጻል ( እውነቱን ለመናገር, ይህ ምልክት ምን እንደሆነ አላውቅምየሦስት ተለዋዋጮች መግለጫ ምሳሌ እዚህ አለ፡-
Http://site/index.php?a=1&b=2&c=3
የውጤት ኮድ እነሆ፡-
ከሆነ(isset($_GET ["a")]
አስተጋባ $_GET["a"]"
";
አስተጋባ $_GET["b"]"
";
አስተጋባ $_GET["c"]"
";
}
?>
ሁኔታው እንደዚህ ይመስላል።
$_GET["a"] እና አለምአቀፍ ተለዋዋጭ $_GET["b"] እና አለምአቀፍ ተለዋዋጭ $_GET["c"] ካለ በማያ ገጹ ላይ ያሳዩዋቸው።ውጤቱ እነሆ፡-
ቅጾች
ከመድረሳችን በፊት ልጥፍጥያቄዎች ፣ ምን ቅጾች እንደሆኑ መረዳት ያስፈልግዎታል? ለምን አስፈለገ? ምክንያቱም የአለምአቀፍ ተለዋዋጭ $_POST["] የተፈጠረው በቅጾች ነው። መልክ ምንድን ነው? እነዚህ ለተጠቃሚው አንዳንድ መረጃዎችን የሚያስገቡባቸው መስኮች ናቸው። ባለ አንድ መስመር ሜዳዎች፣ ትላልቅ ሜዳዎች እና እንዲሁም የሬዲዮ ቁልፎች እና አመልካች ሳጥኖች አሉ። ሁሉንም ነገር በቅደም ተከተል እንይ...
ቅጹ መለያ ነው፡-
ቅጹ ባህሪያት አሉት, በጣም የተለመዱትን እዘረዝራለሁ:
ቅጽ እንፍጠር፡-
ፋይሉን እንደ ተቆጣጣሪ ፋይል አድርጌዋለሁ ፈተና.phpምሳሌዎችን የምጽፍልህ በውስጡ ስለሆነ ነው። የመላኪያ ዘዴን ለመለጠፍ አዘጋጅቻለሁ ምክንያቱም እነዚህ በ 99.9% ጉዳዮች ውስጥ ጥቅም ላይ የዋሉ ዘዴዎች ናቸው. ቅጹንም ስም - ቅጽ ሰጥቻለሁ
አሁን ወደ የቅርጽ አካላት ዓለም ውስጥ እንዝለቅ። መጀመሪያ መረዳት ያለብዎት ነገር ቢኖር ሁሉም ንጥረ ነገሮች መለያዎች ናቸው። ልዩነቱ በባህሪው ላይ ብቻ ነው። ዓይነትበእነዚህ መለያዎች. ጥቅም ላይ የዋሉትን የቅጽ ክፍሎችን ልዘርዝር፡-
እርግጠኛ ነኝ እንደዚህ አይነት መስኮችን ከአንድ ጊዜ በላይ አይተሃል፣ ስለዚህ እነሱ የሚሉት ነገር ይኸውልህ፡ "ምንም አስተያየት የለም"
አሁን ትንሽ የሥልጠና መጠይቅ እንፍጠር, እሱም የበለጠ እንሰራለን. የእኛ ተግባር የሚሞላውን ሰው ስም, ጾታ, ከየትኛው ሀገር, ተወዳጅ ቀለም እና ተጠቃሚው ስለራሱ የሆነ ነገር ማከል የሚችልበት የጽሑፍ መስክ የሚነግረን ትንሽ መጠይቅ መፍጠር ነው. ያገኘሁት ይኸውና፡-