PHP_SELF বনাম PATH_INFO বনাম SQLT_NAME বনাম REQUEST_URI


105

আমি কোডইগিনিটারে পিএইচপি অ্যাপ্লিকেশন তৈরি করছি। CodeIgniter প্রধান নিয়ামক সব অনুরোধ পাঠায়: index.php। তবে আমি index.phpইউআরআইতে দেখতে পছন্দ করি না । উদাহরণস্বরূপ, http://www.example.com/faq/whateverযাত্রা করবে http://www.example.com/index.php/faq/whatever। এটির ঠিকানাটি কী তা জানতে আমার কোনও স্ক্রিপ্টের জন্য একটি নির্ভরযোগ্য উপায় প্রয়োজন, তাই এটি নেভিগেশনের সাথে কী করতে হবে তা জানতে পারবে। আমি mod_rewriteকোডআইগনিটার ডকুমেন্টেশন হিসাবে ব্যবহার করেছি ।

নিয়মটি নিম্নরূপ:

RewriteEngine on
RewriteCond $1 !^(images|inc|favicon\.ico|index\.php|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L] 

সাধারণত, আমি কেবল যাচাই করতাম php_self, তবে এই ক্ষেত্রে এটি সর্বদা index.php। আমি তা থেকে পেতে পারেন REQUEST_URI, PATH_INFOইত্যাদি, কিন্তু আমি সিদ্ধান্ত নিতে হয় যা সবচেয়ে নির্ভরযোগ্য হতে হবে চেষ্টা করছি। (কোথায় এটি বা) মধ্যে আসল পার্থক্যটা কেউ কি জানে PHP_SELF, PATH_INFO, SCRIPT_NAME, এবং REQUEST_URI? আপনার সাহায্যের জন্য ধন্যবাদ!

দ্রষ্টব্য : এসও আন্ডারস্কোরটি দেখায় এবং এটিকে কোনও কারণে তির্যক করে তোলে বলে আমাকে স্পেস যুক্ত করতে হয়েছিল।

আপডেট হয়েছে : ফাঁকা স্থান স্থির।

উত্তর:


51

পিএইচপি ডকুমেন্টেশন আপনি পার্থক্য বলতে পারেন:

'PHP_SELF'

ডকুমেন্টের মূলের তুলনায় বর্তমানে সম্পাদনকারী স্ক্রিপ্টের ফাইলের নাম। উদাহরণস্বরূপ, , $ _SERVER [ 'PHP_SELF'] ঠিকানায় একটি স্ক্রিপ্টের মধ্যে http://example.com/test.php/foo.bar হবে /test.php/foo.bar__FILE__ ধ্রুবক বর্তমান সম্পূর্ণ পাথ ও ফাইলের নাম ধারণ করে (অর্থাত অন্তর্ভুক্ত) ফাইল। যদি পিএইচপি কমান্ড-লাইন প্রসেসর হিসাবে চলমান থাকে তবে এই ভেরিয়েবলটিতে পিএইচপি ৪.৩.০ থেকে স্ক্রিপ্টের নাম রয়েছে। আগে এটি উপলব্ধ ছিল না।

'স্ক্রিপ্টের'

বর্তমান স্ক্রিপ্টের পথ ধারণ করে। এটি সেই পৃষ্ঠাগুলির জন্য দরকারী যা তাদের নিজের দিকে নির্দেশ করতে হবে। __FILE__ ধ্রুবক বর্তমান সম্পূর্ণ পাথ ও ফাইলের নাম ধারণ করে (অর্থাত অন্তর্ভুক্ত) ফাইল।

'REQUEST_URI'

এই পৃষ্ঠাটি অ্যাক্সেস করার জন্য যা ইউআরআই দেওয়া হয়েছিল; উদাহরণস্বরূপ, '/index.html'

PATH_INFO নথিভুক্ত বলে মনে হচ্ছে না ...


3
এটি সম্ভবত পিএইচপি ডকুমেন্টেশন সম্পর্কে নয় তবে সিজিআই :) এবং সেখানে PATH_INFO নথিভুক্ত করা হয়েছে: সরঞ্জাম. ietf.org/html/rfc3875#section-4 তবে এমন কিছু জ্ঞাত সমস্যা রয়েছে যা অ্যাপাচি এবং এনজিনেক্স সর্বদা এই পরিবর্তনশীল দেয় না।
সাইমনসিমিটি

1
নীচে ওডিনের উত্তরগুলি কার্যকর ব্যাখ্যাগুলি উদাহরণগুলির সাথে পরিপূরক যুক্ত করে। এই ভেরিয়েবলগুলি সিএলআই বনাম সার্ভার ইত্যাদি থেকে বিভিন্ন অপারেটিং সিস্টেমে একটি প্যাথ_ইনফো, একটি ক্যোরি স্ট্রিং, কিছু পুনর্নির্দেশ, কিছু উপকরণ, সহ সাধারণ প্রসঙ্গে প্রতিনিধিত্ব করে তা বুঝতে আমার

3
-1 ঠিক কেন আমি হ্রাস পেয়েছিলাম তার ব্যাখ্যা হিসাবে: আমি এই পোস্টে আসার পুরো কারণটিই ডকুমেন্টেশন পরিষ্কার নয় clear নীচে ওডিনের উত্তরগুলি এই ভেরিয়েবলগুলির মধ্যে পার্থক্যগুলির স্পষ্ট ব্যাখ্যা সরবরাহ করে। আমি মনে করি এটি কেবল অনুলিপি করে সহজেই অনুলিপি করা যায় এবং অনুলিপিযুক্ত ডকুমেন্টেশন সহজেই পেস্ট করে দেয় answer আমি বিশ্বাস করি যে উপরে বর্ণিত $ _SERVER ভেরিয়েবলের উপাদানগুলির তালিকা সম্পর্কে জানতে এমনকি বেশিরভাগ লোককে ইতিমধ্যে ডকুমেন্টেশনটি দেখতে হবে।
ডালিন

229

এই ভেরিয়েবলগুলির মধ্যে পার্থক্যের কয়েকটি ব্যবহারিক উদাহরণ:
উদাহরণ 1. পিএইচপি_এসএলএফ কেবলমাত্র অনুরোধ করা ইউআরএল আকারে উপস্থিত থাকলে SQLT_NAME থেকে পৃথক :
http://example.com/test.php/foo/bar

[PHP_SELF] => /test.php/foo/bar
[SCRIPT_NAME] => /test.php

(এটিই একমাত্র ক্ষেত্রে বলে মনে হয় যখন পাঠাথফোনটিতে বুদ্ধিমান তথ্য রয়েছে [প্যাথপোএনএফও] => / ফু / বার) নোট: এটি কিছু পুরানো পিএইচপি সংস্করণে আলাদা ছিল (<= 5.0?)।

উদাহরণ ২. REQUEST_URI SQLT_NAME থেকে আলাদা যখন একটি খালি শুল্কের স্ট্রিংটি প্রবেশ করা হয়:
http://example.com/test.php?foo=bar

[SCRIPT_NAME] => /test.php
[REQUEST_URI] => /test.php?foo=bar

উদাহরণ ৩. সার্ভার-সাইড পুনর্নির্দেশ কার্যকর হওয়ার সময়ে REQUEST_URI SQLT_NAME থেকে পৃথক (উদাহরণস্বরূপ অ্যাপাচে Mod_rewrite):

http://example.com/test.php

[REQUEST_URI] => /test.php
[SCRIPT_NAME] => /test2.php

উদাহরণ ৪. স্ক্রিপ্টগুলির সাথে HTTP ত্রুটিগুলি পরিচালনা করার সময় REQUEST_URI SQLT_NAME থেকে আলাদা।
অ্যাপাচি নির্দেশিকা ত্রুটিযুক্ত ডকুমেন্ট 404 / 404error.php ব্যবহার করে
http://example.com/test.php

[REQUEST_URI] => /test.php
[SCRIPT_NAME] => /404error.php

আইআইএস সার্ভারে কাস্টম ত্রুটি পৃষ্ঠাগুলি ব্যবহার করে
http://example.com/test.php

[SCRIPT_NAME] => /404error.php
[REQUEST_URI] => /404error.php?404;http://example.com/test.php

21
+1, "একটি উদাহরণ শেখার উপায় নয়, এটি শেখার একমাত্র উপায়" " - 404 ত্রুটি সম্পর্কে খুব সুন্দর গবেষণা, আমাকে সর্বদা এই জিনিসগুলি পুনরায় পরীক্ষা করতে হবে। =)
অ্যালিক্স অ্যাক্সেল

16
+1: আমার জীবনে প্রথমবারের মতো আমি পার্থক্যটি বুঝতে পেরেছি। তাদের আপনার উত্তর দিয়ে পিএইচপি ডকুমেন্টেশন আপডেট করা উচিত
মার্কো ডেমাইও

উদাহরণ 1: [SQLT_NAME] => / সর্বশেষ.পিএইচপি / শেষে কোনও "/" থাকা উচিত নয়: উদাহরণ 1: [SQLT_NAME] => /est.php যাইহোক আমি পিএইচপি 5.3.6 এ দেখছি। সুন্দর উদাহরণ।
দাউদ ওহিয়া

আপনি সঠিক জনএম 2, আমি এখন পিএইচপি 5.4 এ যাচাই করেছি এবং ইউআরএল /pinfo.php/first/second?third=furth এর ফলাফল নিম্নরূপ: QUERY_STRING => তৃতীয় = চতুর্থ REQUEST_URI => /pinfo.php/first/second ? তৃতীয় = চতুর্থ SQLT_NAME => /pinfo.php PATH_INFO => / প্রথম / সেকেন্ড
ওডিন

আমি এটি 5.2.17 এও পরীক্ষা করে দেখেছি এবং এর /শেষে কোনও নেই SCRIPT_NAME। এটি পিএইচপি 5.2-5.4 এর সাথে সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে, এর প্রতিফলনের জন্য উত্তরটি সম্পাদনা করার বিষয়ে বিবেচনা করুন।
ফ্যাব্রিসিও ম্যাটি

24

PATH_INFO এই জাতীয় htaccess ব্যবহার করার সময় কেবল এটি উপলব্ধ:

উদাহরণ 1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^(favicon\.ico|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

একই রয়ে গেছে

[SCRIPT_NAME] => /index.php

মূল

http://domain.com/

[PHP_SELF]     => /index.php
[PATH_INFO] IS NOT AVAILABLE (fallback to REQUEST_URI in your script)
[REQUEST_URI]  => /
[QUERY_STRING] => 

পথ

http://domain.com/test

[PHP_SELF]     => /index.php/test
[PATH_INFO]    => /test
[REQUEST_URI]  => /test
[QUERY_STRING] => 

ক্যারি স্ট্রিং

http://domain.com/test?123

[PHP_SELF]     => /index.php/test
[PATH_INFO]    => /test
[REQUEST_URI]  => /test?123
[QUERY_STRING] => 123

উদাহরণ 2

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^(favicon\.ico|robots\.txt)
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

একই রয়ে গেছে

[SCRIPT_NAME]  => /index.php
[PHP_SELF]     => /index.php
[PATH_INFO] IS NOT AVAILABLE (fallback to REQUEST_URI in your script)

মূল

http://domain.com/

[REQUEST_URI]  => /
[QUERY_STRING] => 

পথ

http://domain.com/test

[REQUEST_URI]  => /test
[QUERY_STRING] => url=test

ক্যারি স্ট্রিং

http://domain.com/test?123

[REQUEST_URI]  => /test?123
[QUERY_STRING] => url=test&123

উদাহরণ 3

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^(favicon\.ico|robots\.txt)
RewriteRule ^(([a-z]{2})|(([a-z]{2})/)?(.*))$ index.php/$5 [NC,L,E=LANGUAGE:$2$4]

অথবা

RewriteRule ^([a-z]{2})(/(.*))?$ $3 [NC,L,E=LANGUAGE:$1]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^(favicon\.ico|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

একই রয়ে গেছে

[SCRIPT_NAME] => /index.php

মূল

http://domain.com/

[PHP_SELF]          => /index.php
[PATH_INFO] IS NOT AVAILABLE (fallback to REQUEST_URI in your script)
[REQUEST_URI]       => /
[QUERY_STRING]      => 
[REDIRECT_LANGUAGE] IS NOT AVAILABLE

পথ

http://domain.com/test

[PHP_SELF]          => /index.php/test
[PATH_INFO]         => /test
[REQUEST_URI]       => /test
[QUERY_STRING]      => 
[REDIRECT_LANGUAGE] => 

ভাষা

http://domain.com/en

[PHP_SELF]          => /index.php/
[PATH_INFO]         => /
[REQUEST_URI]       => /en
[QUERY_STRING]      => 
[REDIRECT_LANGUAGE] => en

ভাষার পথ

http://domain.com/en/test

[PHP_SELF]          => /index.php/test
[PATH_INFO]         => /test
[REQUEST_URI]       => /en/test
[REDIRECT_LANGUAGE] => en

ভাষা জিজ্ঞাসা স্ট্রিং

http://domain.com/en/test?123

[PHP_SELF]          => /index.php/test
[PATH_INFO]         => /test
[REQUEST_URI]       => /en/test?123
[QUERY_STRING]      => 123
[REDIRECT_LANGUAGE] => en

এই দুর্দান্ত ছিল। আপনার সাহায্যের জন্য ধন্যবাদ!
গ্যাব্রিয়েল ফেয়ার

1
এই উত্তরটি এমনভাবে লেখা হয়েছে যাতে পরামর্শ দেয় যে কেবল ইউআরএল লিখনই একটি পথ_ইনফো তৈরি করতে পারে, তবে অবশ্যই, মূল তথ্যটি সরাসরি URL- এ প্রবেশ করা যেতে পারে।

12

পিএইচপি পাথ

    $_SERVER['REQUEST_URI']    = ওয়েব পাথ, অনুরোধ করা ইউআরআই
    $_SERVER['PHP_SELF']    = ওয়েব পাথ, অনুরোধ করা ফাইল + পথের তথ্য
    $_SERVER['SCRIPT_NAME']    = ওয়েব পথ, অনুরোধ করা ফাইল
    $_SERVER['SCRIPT_FILENAME']   = ফাইলের পথ, অনুরোধ করা ফাইল
    __FILE__    = ফাইলের পথ, বর্তমান ফাইল

কোথায়

  • ফাইল পাথ হ'ল একটি সিস্টেম ফাইলের পথ, যেমন /var/www/index.phpওরফে রেজোলিউশন
  • ওয়েব পথ একটি হল সার্ভার ডকুমেন্ট পথ মত /index.phpথেকে http://foo.com/index.php কোনও ফাইলের সাথে মেলে না
  • বর্তমান ফাইলটির অর্থ অন্তর্ভুক্ত স্ক্রিপ্ট ফাইল , এতে কোনও স্ক্রিপ্ট নেই
  • অনুরোধ করা ফাইলটির অর্থ অন্তর্ভুক্তকারী স্ক্রিপ্ট ফাইল নয়, অন্তর্ভুক্ত নয়
  • কোনো URI হল HTTP অনুরোধ মত/index.php?foo=bar কোনো URL rewriting আগে,
  • পাথ তথ্য হ'ল স্ক্রিপ্ট নামের পরে কিন্তু ক্যোয়ারী স্ট্রিংয়ের পূর্বে থাকা কোনও অতিরিক্ত অ্যাপাচি ডেটা

অপারেশন অর্ডার

  1. ক্লায়েন্ট সার্ভারকে একটি HTTP অনুরোধ প্রেরণ করে REQUEST_URI
  2. সার্ভার যে কোনও ইউআরএল পুনর্লিখন করে .htaccess ফাইলগুলি, ইত্যাদি থেকে যেPHP_SELF
  3. সার্ভার আলাদা PHP_SELFমধ্যেSCRIPT_FILENAME +PATH_INFO
  4. সার্ভার উপনামের রেজোলিউশন সম্পাদন করে এবং পুরো url পাথটিকে একটি সিস্টেম ফাইলের পথে রূপান্তর করে পেতেSCRIPT_FILENAME
  5. ফলাফল স্ক্রিপ্ট ফাইলের মধ্যে অন্যেরা অন্তর্ভুক্ত থাকতে পারে, যেখানে __FILE__বর্তমান ফাইলের পথ বোঝায়

এটা ভাল. এখানে আমার মন্তব্য। প্রথমত, $ _SERVER ['SQLT_NAME'] এবং $ _SERVER ['SQLT_FILENAME'] উভয়ই স্ক্রিপ্টের নাম, পরেরটি এলিয়াসের মৃত্যুদন্ড কার্যকর করার পরে বাদে। দ্বিতীয়ত, $ _SERVER ['PHP_SELF'] স্ক্রিপ্ট নয়, তবে স্ক্রিপ্টটি + পথের তথ্য। আবার, $ _SERVER ['SQLT_NAME'] হ'ল স্ক্রিপ্ট (উপাধিকার আগে)। অবশেষে, কোন ধাপে পুনর্লিখনের পরে বা তার আগে বা এলিয়াসের আগে বা তার আগে এই ভেরিয়েবলগুলি সংজ্ঞায়িত করা দরকারী। আমার উত্তর দেখুন।

@ ডোমিনিক 108 আমি আপনার পরামর্শগুলির ভিত্তিতে আমার উত্তরটি সংশোধন করেছি, জিনিসগুলি কিছুটা সাফ জানিয়েছি এবং অপারেশন বিভাগের অর্ডার যোগ করেছি। আমার সম্পর্কে আপনি কী মনে করেন জানি। ধন্যবাদ!
বিওজর

আপনার জন্য, আপনাকে swap 'র আছে $_SERVER['SCRIPT_NAME']এবং   $_SERVER['PHP_SELF'], কারণ mod_rewrite সমগ্র পথ, যা তৈরি $_SERVER['PHP_SELF']। বিচ্ছেদ পরবর্তী ঘটে। নোট করুন যে এলিয়াসগুলি স্ক্রিপ্ট ফাইলের নাম সংজ্ঞায়িত করার জন্য পুরো পথটি বিবেচনা করে তবে স্ক্রিপ্ট-নাম এবং পথ_ইনফো সংজ্ঞায়িত পৃথকীকরণ ইতিমধ্যে ঘটেছে, তাই তারা প্রভাবিত হবে না।

@ ডোমিনিক 108 আমি আমার উত্তরটি পুনরায় সংশোধন করেছি। কিছু কারণে আপনার সম্পাদনা প্রস্তাবটি প্রত্যাখ্যান করা হয়েছিল, যদিও আমি জানি, আপনি ঠিক বলেছেন যে আমার দুটি আইটেমের অর্ডার ছিল না। আমি এলিয়াসগুলির সাথে তেমন পরিচিত নই, তাই আমি সেই অংশটির জন্য আপনার দক্ষতার উপর নির্ভর করছি। আবার ধন্যবাদ!
বিউজর

5

আপনি ইউআরআই ক্লাসটি সন্ধান করতে পারেন করতে এবং $ এটি-> ইউরি-> ইউরি_স্ট্রিং () ব্যবহার করতে চাইতে পারেন

সম্পূর্ণ ইউআরআই সহ একটি স্ট্রিং ফিরিয়ে দেয়।

উদাহরণস্বরূপ, এটি যদি আপনার সম্পূর্ণ URL হয়:

http://example.com/index.php/news/local/345

ফাংশন এটি ফিরে আসবে:

/news/local/345

অথবা পার্সিং / রেজেক্স মানগুলি না নিয়েই আপনি নির্দিষ্ট অঞ্চলগুলিতে ড্রিল করতে সেগমেন্টগুলি ব্যবহার করতে পারেন


আপনাকে ধন্যবাদ - এটি একটি ভাল ধারণা, তবে আমি এগুলি একটি প্রাক-সিস্টেম হুকের মধ্যে ব্যবহার করছি যা নিয়ামকটি আপ এবং চলমান হওয়ার আগে চালানো দরকার।
এলি

4

ব্যক্তিগতভাবে আমি এটি ব্যবহার করি $REQUEST_URIযেমন এটি ইউআরআই প্রবেশ করায় এবং সার্ভারের ডিস্কের অবস্থানটি উল্লেখ করে না।


এটি কি সর্বদা সম্পূর্ণ ইউআরআই হয়?
এলি

সাধারণত, আপনি উইন্ডোজে অ্যাপাচি নিয়ে সমস্যাগুলি চালিয়ে যেতে পারেন তবে এটি কেবল ইউআরআই-এর জন্যই সমাধান হয় না।
জেনফ ইয়ান

4

ওডিনের উত্তর যুক্ত করতে খুব কমই আছে। আমি ইউটিউল পুনর্লিখন এবং উপকরণের প্রভাব চিত্রিত করার জন্য ফাইল সিস্টেমে এইচটিটিপি অনুরোধ থেকে প্রকৃত ফাইলের সম্পূর্ণ উদাহরণ সরবরাহ করতে পেরেছি। স্ক্রিপ্টটি ফাইল সিস্টেমে /var/www/test/php/script.phpরয়েছে

<?php
include ("script_included.php")
?>

যেখানে /var/www/test/php/script_included.phpহয়

<?php
echo "REQUEST_URI: " .  $_SERVER['REQUEST_URI'] . "<br>"; 
echo "PHP_SELF: " .  $_SERVER['PHP_SELF'] . "<br>";
echo "QUERY_STRING: " .  $_SERVER['QUERY_STRING'] . "<br>";
echo "SCRIPT_NAME: " .  $_SERVER['SCRIPT_NAME'] . "<br>";
echo "PATH_INFO: " .  $_SERVER['PATH_INFO'] . "<br>";
echo "SCRIPT_FILENAME: " . $_SERVER['SCRIPT_FILENAME'] . "<br>";
echo "__FILE__ : " . __FILE__ . "<br>";  
?>

এবং /var/www/test/.htaccess হয়

RewriteEngine On
RewriteRule before_rewrite/script.php/path/(.*) after_rewrite/script.php/path/$1 

এবং অ্যাপাচি কনফিগারেশন ফাইলের মধ্যে উপনাম অন্তর্ভুক্ত রয়েছে

Alias /test/after_rewrite/ /var/www/test/php/

এবং HTTP অনুরোধটি

www.example.com/test/before_rewrite/script.php/path/info?q=helloword

আউটপুট হবে

REQUEST_URI: /test/before_rewrite/script.php/path/info?q=helloword
PHP_SELF: /test/after_rewrite/script.php/path/info
QUERY_STRING: q=helloword
SCRIPT_NAME: /test/after_rewrite/script.php
PATH_INFO: /path/info
SCRIPT_FILENAME: /var/www/test/php/script.php
__FILE__ : /var/www/test/php/script_included.php

নিম্নলিখিতগুলি সর্বদা ধারণ করে

PHP_SELF = SCRIPT_NAME + PATH_INFO = full url path between domain and query string. 

যদি কোনও মোড_উইরাইট, মোড_ডির, ত্রুটিপত্রক পুনর্লিখন বা ইউআরএল পুনর্লিখনের কোনও ফর্ম না থাকে তবে আমাদের কাছে

REQUEST_URI = PHP_SELF + ? + QUERY_STRING 

এলিয়াসগুলি সিস্টেম ফাইলের পাথগুলিকে প্রভাবিত করে SCRIPT_FILENAMEএবং __FILE__ইউআরএল পাথগুলি নয়, যা পূর্বনির্ধারিত - নীচে ব্যতিক্রম দেখুন। এলিয়াসগুলি সহ পুরো URL টি ব্যবহার করতে পারে PATH_INFOSCRIPT_NAMEএবং এর মধ্যে কোনও সংযোগ থাকতে পারে না SCRIPT_FILENAME

এটি সম্পূর্ণ সঠিক নয় যে ইউআরএল পাথ [PHP_SELF] = [SCRIPT_NAME] + [PATH_INFO] সংজ্ঞায়িত করার সময়ে এলিয়াসগুলি সমাধান করা হয় না , কারণ এলিয়াসগুলি ফাইল সিস্টেম অনুসন্ধান করার জন্য বিবেচিত হয় এবং আমরা ওডিনের উত্তরে উদাহরণ 4 থেকে জানি যে ফাইলটি উপস্থিত রয়েছে কিনা তা নির্ধারণের জন্য ফাইল সিস্টেম অনুসন্ধান করা হয়েছিল, তবে এটি কেবল তখনই প্রাসঙ্গিক যখন ফাইলটি পাওয়া যায় না। একইভাবে, মোড_ডির ফাইল সিস্টেম অনুসন্ধান করার জন্য মোড_আলিয়াসকে কল করে তবে এটি কেবল তখনই প্রাসঙ্গিক যখন আপনার একটি উপনাম থাকতে পারে Alias \index.php \var\www\index.phpএবং অনুরোধ uri ডিরেক্টরি হয়।


হাই ডোমিনিক 108, সংশোধনের জন্য ধন্যবাদ। পুনরায় লেখার তথ্য অন্তর্ভুক্ত করার জন্য এটি দরকারী বলে আমি মনে করি। আমার কাছে এটি অন্তর্নিহিত ছিল, তবে অন্যদের কাছে এটি এতটা স্বজ্ঞাত নয়।
বিউজর

1

যদি আপনি কখনই ভুলে যান যে কোন ভেরিয়েবলগুলি কী করে, আপনি একটি ছোট স্ক্রিপ্ট লিখতে পারেন যা phpinfo () ব্যবহার করে এবং এটি একটি URL থেকে কোয়েরি স্ট্রিং সহ কল ​​করতে পারে। যেহেতু সার্ভার সফ্টওয়্যার ইনস্টলেশনগুলি চলকগুলি উপস্থাপন করে যে পিএইচপি ফিরিয়ে দেয় এটি সার্ভার কনফিগারেশন ফাইলে পুনর্লিখনের ক্ষেত্রে মেশিনের আউটপুট যাচাই করা সর্বদা প্রত্যাশার চেয়ে পৃথক ফলাফলের কারণ হয়ে থাকে idea এটিকে কিছু হিসাবে সংরক্ষণ করুন _inf0.php:

<?php
    $my_ip = '0.0.0.0';

   if($_SERVER['REMOTE_ADDR']==$my_ip){
     phpinfo();
   } else {
     //something
   }

তাহলে আপনি ফোন করবেন /_inf0.php?q=500


-1

এক সেকেন্ড ব্যাকআপ নিন, আপনি শুরু করার জন্য ভুল পদ্ধতির গ্রহণ করেছেন। কেন শুধু এই না

RewriteEngine on
RewriteCond $1 !^(images|inc|favicon\.ico|index\.php|robots\.txt)
RewriteRule ^(.*)$ /index.php?url=$1 [L]

পরিবর্তে? তারপরে এটি ধরুন$_GET['url'];


চাকা পুনরুদ্ধার কেন? এই ডেটা আরও সহজেই অ্যাক্সেস করা হয়!
কেনেথ

এবং অতিরিক্ত জটিলতা আছে যদি মূল অনুরোধটির কাছে কোয়েরি স্ট্রিং থাকার আশা করা হয়। এর বর্তমান অবস্থায়, উপরের কোডটি কোয়েরি স্ট্রিংটিকে ওভাররাইট করে দেবে। যদি আপনি কোয়েরি স্ট্রিংগুলি ( QSAপতাকা) মার্জ করে থাকেন তবে কোয়েরি স্ট্রিং প্যারামগুলি সম্ভাব্যভাবে ওভাররাইট করা যেতে পারে (উদাহরণস্বরূপ, আপনার যদি urlপ্রাথমিক অনুরোধের জন্য প্যারামের প্রয়োজন হয় ) বা আরও খারাপ হয়, এক্সএসএস আক্রমণে ঝুঁকিপূর্ণ হতে পারেন।
মিঃ হোয়াইট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.