كيفية التمييز بين سطر الأوامر و خادم الويب الاحتجاج?[مكررة]
-
19-08-2019 - |
سؤال
هل هناك طريقة للتمييز إذا كان السيناريو كان الاحتجاج من سطر الأوامر أو عن طريق شبكة الإنترنت الخادم ؟
(انظر ما هو متعارف عليه طريقة لتحديد فلكس مقابلhttp تنفيذ PHP النصي ؟ أفضل إجابة و مناقشة أكثر تفصيلا - لم تجد ذلك قبل نشرها)
لدي (غير الإنتاج) مع الخادم اباتشي 2.2.10 و PHP 5.2.6.في شبكة الإنترنت يمكن الوصول إليها الدليل هو السيناريو PHP ، maintenance_tasks.php
.أود أن استدعاء هذا البرنامج النصي من سطر الأوامر أو من خلال طلب HTTP (عن طريق فتح في المتصفح).هناك بعض المتغير الذي يسمح لي لتحديد موثوق كيف السيناريو هو الاحتجاج ؟
(سبق تناول القضايا من وجهات نظر مختلفة لكل نوع من الاحتجاج و استجابة HTTP مهلة فقط تبحث عن وسيلة إخبار اثنين من أنواع الاحتجاج على حدة)
سأحاول أشياء مختلفة إضافة بلدي النتائج أدناه.
مكررة: ما هو متعارف عليه طريقة لتحديد فلكس مقابلhttp تنفيذ PHP النصي ؟
المحلول
إذا دعا من سطر الأوامر ، الخادم متغير HTTP_USER_AGENT لم يتم تعيين.يمكنني استخدام هذا الثابت لتحديد ما إذا كان البرنامج النصي يسمى من سطر الأوامر أو لا:
define("CLI", !isset($_SERVER['HTTP_USER_AGENT']));
تحديث: لأن هذا الجواب لا يزال وضع علامة في "صحيحة" واحدة ، أود أن تنقح بياني - الاعتماد على "عامل المستخدم" رأس يمكن أن تكون إشكالية ، حيث إنها قيمة المعرفة من قبل المستخدم.
الرجاء استخدام php_sapi_name() == 'cli'
أو PHP_SAPI == 'cli'
, كما اقترح يوجين/cam8001 في التعليقات.
شكرا مشيرا!
نصائح أخرى
لقد مقارنة $_SERVER
superglobal في كل الدعاء.يبدو أن $_SERVER['argc']
(أيعدد الوسيطات التي تم تمريرها إلى البرنامج النصي) فقط عند تشغيل من شركة شل/سطر الأوامر:
<?php
if (isset($_SERVER['argc'])) {
define('CLI', true);
} else {
define('CLI', false);
}
ويبدو أن العمل على حد سواء على لينكس و ويندوز المضيفين.(أول فكرت في التحقق من بعض متغيرات البيئة ، ولكن تلك هي مختلفة لكل نظام تشغيل.أيضا, جميع $_SERVER['HTTP_*']
رؤوس مفقودة في CLI الإصدار, ولكن لست متأكدا إذا كان هذا هو موثوقة بما فيه الكفاية.)