পিএইচপি স্ক্রিপ্টের কমান্ডলাইন বনাম HTTP প্রয়োগের নির্ধারণের মূল উপায় কী?


155

আমার একটি পিএইচপি স্ক্রিপ্ট রয়েছে যা নির্ধারণ করতে হবে এটি প্রধানত আউটপুট-বিন্যাসের উদ্দেশ্যে, কমান্ড-লাইন বা HTTP- র মাধ্যমে কার্যকর করা হয়েছে কিনা determine এটি করার আধ্যাত্মিক উপায় কী? আমি ভেবেছিলাম এটি পরিদর্শন করা হয়েছিল SERVER['argc'], তবে এটি 'আপাচি ২.০ হ্যান্ডলার' সার্ভার এপিআই ব্যবহার করার পরেও এটি জনবহুল হয়ে গেছে।

উত্তর:


228

php_sapi_name()ফাংশনটি ব্যবহার করুন ।

if (php_sapi_name() == "cli") {
    // In cli-mode
} else {
    // Not in cli-mode
}

এখানে ডক্স থেকে কিছু প্রাসঙ্গিক নোট রয়েছে:

php_sapi_name - ওয়েব সার্ভার এবং পিএইচপি এর মধ্যে ইন্টারফেসের ধরণটি দেয়

যদিও সম্পূর্ণ নয়, সম্ভাব্য প্রত্যাবর্তনের মানগুলির মধ্যে রয়েছে অ্যালসভার, অ্যাপাচি, অ্যাপাচি 2 ফিল্টার, অ্যাপাচি 2 হ্যান্ডলার, কডিয়াম, সিজি (পিএইচপি 5.3 অবধি), সিজি-এফসিগি, ক্লাইট, ক্লাই-সার্ভার, ধারাবাহিকতা, এম্বেড, ইসপি, লিটস্পিড, মিল্টার, এনএসপি, পিএইচটিপিডি, pi3web, রক্সেন, thttpd, টাক্স, এবং ওয়েবজেমস।

পিএইচপি> = 4.2.0 এ, একটি পূর্বনির্ধারিত ধ্রুবকও রয়েছে, PHP_SAPIএর সমান মান রয়েছে php_sapi_name()


ধন্যবাদ। আমি কেন ডক নিয়ে আগ্রহী। উদাহরণ প্রথম 3 টি অক্ষর পরীক্ষা করে, বর্ণনায় স্ট্রিংটি হুবহু "সিজিআই" হওয়া উচিত তবে এটিকে বাদ দিয়ে আমার মনে হয় এটি নিখুঁত।
ববি জ্যাক

অবশ্যই, যদি না, ফিরে আসা স্ট্রিংটি ছিল 'সিজি', যা কনসোল থেকে পিএইচপি চালানো হওয়ার ইঙ্গিত দেয়। যেমনটি, আমার কেস
অ্যাড্রিয়ানো বারোলি পিয়াজা

@ অ্যাড্রিয়ানো: সম্ভবত আপনার ক্ষেত্রে পিএইচপি-সিজি স্ক্রিপ্টটি কার্যকর করতে ব্যবহৃত হয়।

3
@ ববি, পিএইচপি.এন.এক্স ডক্সের উদাহরণটি কেবল "সিজি" এবং "সিজি-এফসিগি" দুটির সাথেই কেবল স্ট্রিংয়ের প্রথম তিনটি অক্ষর দেখে মিলিয়েছে ... এ কারণেই এটি প্রকৃত অর্থে উপলব্ধি করে। যদি কিছু হয় তবে পিএইচপি কল করার জন্য @ হপ ফিরে আসার জন্য গুরুতর প্রোগ্রামারদের জন্য কোনও ভাষা নেই: ডি
ক্রিসআর

1
একটি আকর্ষণীয় নোট এখানে: php.net/manual/en/function.php-sapi-name.php হ'ল যে প্রকৃত বাইনারি বলা হয় তার উপর নির্ভর করে আপনি কমান্ড লাইন থেকে পিএইচপি চালাতে পারেন এবং সিজি-ফগি পেতে পারেন
ডাব

22

এটি সর্বদা কাজ করবে। (যদি পিএইচপি সংস্করণটি ৪.২.০ বা তার বেশি হয়)

define('CLI', PHP_SAPI === 'cli');

যা আপনার স্ক্রিপ্টগুলির শীর্ষে ব্যবহার করা সহজ করে তোলে:

<?php PHP_SAPI === 'cli' or die('not allowed');

8
আপনার দ্বিতীয় স্নিপেটটি একটি সিকুইটুর মতো মনে হচ্ছে, আমি প্রত্যাশা করছিলামCLI or die('not allowed');
ম্যাডব্রেকস

1
@ ম্যাডব্র্যাকস, আমি দুটি পৃথক ব্যবহারের কথা বলছিলাম। আমি অভিমানী ছিল পারেন এক বা অন্যান্য - কিন্তু আপনি যদি উভয় ব্যবহার তারপর CLI or die('not allowed');নির্ভুল।
শিওনক্রস

স্পষ্ট করার জন্য ধন্যবাদ, +1
ম্যাডব্রেকস

7
Which makes it easy to use at the top of your scriptsএটি দুটি পৃথক ব্যবহারের মতো শব্দ করে না। হ্যাঁ, আমি একজন নেক্রোমেন্সার।
জর্জ দিমিত্রিডিস


8

আমি মনে করি

$_SERVER['REMOTE_ADDR']

সিএলআই থেকে জনবহুল হবে না।

এছাড়াও, $ _SSERVER সুপারগ্লোবালের সমস্ত এইচটিটিপি_ * কীগুলি সিএলআই থেকে পপুলেট করা হবে না, বা ঠিক উল্লিখিত সঠিক পথে হ্যাপটি করুন :-)


4

php_sapi_নামের ডকুমেন্টেশন পৃষ্ঠাটিতে পরিষ্কারভাবে বলা হয় যে এটি কীভাবে কাজ করে:

পিএইচপি ব্যবহার করছে এমন ইন্টারফেসের (সার্ভার এপিআই, SAPI) ধরণের বর্ণনা করে এমন একটি ছোট স্ট্রিং প্রত্যাবর্তন করে ....

যদিও সম্পূর্ণ নয়, সম্ভাব্য প্রত্যাবর্তনের মানগুলির মধ্যে রয়েছে অ্যালসভার, অ্যাপাচি, অ্যাপাচি 2 ফিল্টার, অ্যাপাচি 2 হ্যান্ডলার, কডিয়াম, সিজি (পিএইচপি 5.3 অবধি), সিজি-এফসিগি, ক্লাইটি, ধারাবাহিকতা, এম্বেড, ইসপি, লিটস্পিড, মিল্টার, এনএসপি, পিটিএইচপিডি, পিআইওয়েব, রক্সেন, thttpd, tux, এবং ওয়েবজেমস।

আমি নিশ্চিত না কেন কেন হপ ভাবছেন না যে পিএইচপি গুরুতর প্রোগ্রামারদের জন্য (আমি একটি সিরিয়াস প্রোগ্রামার, এবং আমি পিএইচপি প্রতিদিন ব্যবহার করি), তবে যদি তিনি ডকুমেন্টেশনটি পরিষ্কার করতে সহায়তা করতে চান তবে সম্ভবত তিনি সমস্ত সম্ভাব্য ওয়েব সার্ভারগুলি নিরীক্ষণ করতে পারবেন যে পিএইচপি চালিয়ে যায় এবং প্রতিটি সার্ভারের জন্য সমস্ত সম্ভাব্য ইন্টারফেস ধরণের নাম নির্ধারণ করতে পারে। নতুন ওয়েব সার্ভার এবং ইন্টারফেস যুক্ত হওয়ার সাথে সাথে তালিকাকে আপডেট রাখার বিষয়টি নিশ্চিত করুন।

এছাড়াও, ববি বলেছেন:

আমি কেন ডক নিয়ে আগ্রহী। উদাহরণটি প্রথম 3 টি অক্ষর পরীক্ষা করে, বর্ণনায় স্ট্রিংটি হ'ল "সিজিআই" হওয়া উচিত

উদাহরণের বিবরণে বলা হয়েছে:

এই উদাহরণটি সাবস্ট্রিং সিগির জন্য পরীক্ষা করে কারণ এটি সিজি-এফসিগিও হতে পারে।


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