كيفية التمييز بين سطر الأوامر و خادم الويب الاحتجاج?[مكررة]

StackOverflow https://stackoverflow.com/questions/343557

  •  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 الإصدار, ولكن لست متأكدا إذا كان هذا هو موثوقة بما فيه الكفاية.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top