كيفية التحقق مع PHP إذا كان يتم تشغيل البرنامج النصي من طلب وحدة التحكم أو المتصفح؟

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

سؤال

وحاولت أشياء مثل $ _ENV [ 'CLIENTNAME'] == 'وحدة التحكم "ولكن يبدو أن العمل على معينة فقط في نظام التشغيل (عملت في ويندوز، وليس لينكس).

وحاولت! فارغة ($ _ ENV [ 'SHELL']) ولكن هذا لا يعمل دائما إما ...

هل هناك طريقة للتأكد من هذه التي ستعمل في جميع نظم التشغيل / البيئات؟

هل كانت مفيدة؟

المحلول

php_sapi_name()

<اقتباس فقرة>   

وإرجاع سلسلة الصغيرة التي   يصف نوع واجهة (لل   API الخادم، SAPI) التي تستخدم PHP.   على سبيل المثال، في CLI PHP هذه السلسلة   سيكون "المبادرة القطرية" في حين أنه مع اباتشي   قد يكون لديك عدة قيم مختلفة   اعتمادا على SAPI المحدد المستخدمة.

وعلى سبيل المثال:

$isCLI = ( php_sapi_name() == 'cli' );

ويمكنك أيضا استخدام PHP_SAPI ثابت

نصائح أخرى

http://php.net/manual/en/features. commandline.php # 105568 "PHP_SAPI" ثابت

<?php
if (PHP_SAPI === 'cli')
{
   // ...
}
?> 

وأعرف أن هذا هو السؤال القديم، ولكن للسجل، وأرى HTTP يطلب القادمة دون رأس عامل المستخدم وPHP لا يعرف HTTP_USER_AGENT تلقائيا في هذه القضية.

if ($argc > 0) {
    // Command line was used
} else {
    // Browser was used
}

و$ ARGC coounts كمية من الحجج التي تم تمريرها إلى سطر الأوامر. ببساطة عن طريق استخدام فب page.php، و$ ARGC يعود 1

ودعوة page.php مع المتصفح، وسوف $ ARGC عودة NULL

وحل واحد هو للتحقق ما إذا تم تعريف STDIN:

if (!defined("STDIN")) {
    die("Please run me from the console - not from a web-browser!");
}

وتحقق من HTTP_USER_AGENT، ينبغي أن توجد في طلب HTTP

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