2012-01-17 12 views
5

Envoirnment से चलाने के लिए एक स्क्रिप्ट को रोकने के लिए। अब मामला यह है कि मैं स्क्रिप्ट को केवल क्रॉन के माध्यम से चलाने के लिए चाहता हूं, न कि किसी भी ब्राउज़र (मोबाइल ब्राउज़र सहित किसी भी वेब ब्राउज़र) के माध्यम से। तो मैं एक कार्य की तलाश कर रहा हूं जैसे ब्राउज़र वैलिडेट।पीएचपी कोड ब्राउज़र

स्क्रिप्ट MVC ढांचे में लिखा है और के रूप में

/usr/bin/GET http://xyz.com/abc/pqr 

कृपया मुझे इस के साथ मदद नहीं की जाएगी।

अग्रिम धन्यवाद।

+1

आप एक वेब आधारित MVC ढांचा क्यों प्रयोग कर रहे हैं एक स्क्रिप्ट है कि आप क्रॉन से ट्रिगर करना चाहते हैं लिखने के लिए? कमांड लाइन स्क्रिप्ट से बस अपनी मॉडल लाइब्रेरी तक पहुंचें। – Quentin

+0

ऐसे कई कार्य हैं जिनका उपयोग स्क्रिप्ट में किया गया है जो ढांचे में परिभाषित हैं। इसलिए मैं MVC –

+0

प्रश्न का उपयोग कर रहा है यही कारण है कि आप पहली जगह में स्क्रिप्ट के लिए वेब एक्सेस दे दी यदि आप नहीं चाहते अगर यह ब्राउज़र से चलाने के लिए? –

उत्तर

6

जब crontab के भीतर से स्क्रिप्ट पर कार्य करते हैं, तो आप करने के लिए इस्तेमाल कर सकते हैं $_SERVER superglobal या तो जाँच अपाचे प्रविष्टियों (HTTP_*) या उत्पन्न के लिए - $_SERVER के बाद से क्रियान्वित द्विआधारी के वातावरण को दर्शाता है - निष्पादन से पहले एक निश्चित वातावरण चर को परिभाषित:

# in the crontab 
FOOVAR=1 /usr/bin/php5 script.php 

फिर, script.php में, FOOVAR होने की जाँच:

if (!isset($_SERVER['FOOVAR'])) 
    die('No browser access.'); 

अपने cronjob wget साथ क्रियान्वित किया जा रहा है और ग्राहक आईपी आप एक .htaccess फाइल करने के लिए इस जोड़ सकता है सर्वर है,:

SetEnvIf Remote_Addr "192.168.0.1" FOOVAR=1 

यह FOOVAR सेट हो जाएगा ग्राहक के IP पता है ही अगर "192.168.0.1" ।

+0

हम्म, मुझे आश्चर्य है कि कैसे वातावरण चर HTTP अनुरोध ओपी प्रश्न में ^^ – hakre

+0

करता @hakre मेरे संपादन देखें के लिए सेट कर रहे हैं। –

8

जैसा कि @ मोब ने कहा था, यह प्राप्त करने का निश्चित अग्नि तरीका स्क्रिप्ट को उस स्थान पर रखना है जहां इसे वेब सर्वर के माध्यम से एक्सेस नहीं किया जा सकता है। यदि यह संभव नहीं है या आप इसे किसी कारण से नहीं करना चाहते हैं, तो आपको यह पता लगाने की आवश्यकता है कि स्क्रिप्ट को वेब सर्वर के माध्यम से या कमांड लाइन के माध्यम से बुलाया गया था या नहीं।

इस के लिए मेरा पसंदीदा दृष्टिकोण (कई देखते हैं) है:

$isRunningFromBrowser = !isset($GLOBALS['argv']); 

इसका मतलब यह है कि अगर $isRunningFromBrowser सच है, तो आप सिर्फ बाहर निकलें/वापसी एक त्रुटि संदेश/जो कुछ भी।

+0

ओपी ने सवाल संपादित किया। स्क्रिप्ट को 'wget' जैसी बाइनरी के साथ निष्पादित किया जाता है। तो कोई 'argv' नहीं। साथ ही, फास्टसीजीआई के रूप में चल रहे PHP में 'argv'' '_SERVER' में होगा। –

+0

@LinusKleen मैं एक FCGI पर्यावरण पड़ा है कभी नहीं और संभावित कार्य करने का एक नापनेवाला फेंक करता है - यह अभी भी '$ argv' वैश्विक दायरे में परिभाषित करता है और साथ ही, या' $ _SERVER' में सिर्फ एक प्रवेश? – DaveRandom

+0

मेरा बुरा, @ डेव। '$ _SERVER' * केवल *। देखने के लिए कोई ग्लोबल नहीं। –

0

वेब निर्देशिका के बाहर स्क्रिप्ट को ले जाएं और इसे कमांड लाइन पर निष्पादित करें। उपयुक्त जीईटी और POST परिवर्तनीय आबादी के लिए स्क्रिप्ट के तर्कों को पार्स करें।

देख http://www.php.net/manual/en/features.commandline.php#94912

1

मैं संपादित कर लिया है यह बेहतर व्याख्या करने के लिए:

के बाद से उपयोग कर रहे हैं/usr/bin/HTTP मैं यह सोचते करती हूं कि आप दो अलग-अलग सर्वर है कि के माध्यम से एक पृष्ठ लाने में प्राप्त : सबसे पहले, एक PHP स्क्रिप्ट चालू है और जहां आप क्रॉन स्क्रिप्ट नहीं चला सकते हैं। दूसरा, एक जहां आप/usr/bin/gET को cron में लाने के लिए एक वर्कअराउंड के रूप में चला रहे हैं।

/usr/bin/GET http://xyz.com/abc/pqr/SomeUniqueIdentifier 

एक और तरीका है के साथ/usr/bin/प्राप्त -h विकल्प का उपयोग हो सकता है:

एक आसान तरीका बस URL में एक अद्वितीय पहचानकर्ता पोस्ट और तरह स्क्रिप्ट में जांच करने के लिए हो सकता है कुछ अद्वितीय की तरह करने के लिए उपयोगकर्ता-एजेंट हैडर सेट करने के लिए:

/usr/bin/प्राप्त एच "उपयोगकर्ता-एजेंट: SomeUniqueIdentifier" http://xyz.com/abc/pqr

PHP स्क्रिप्ट तो यह अद्वितीय पहचानकर्ता के लिए उपयोगकर्ता एजेंट स्ट्रिंग की जाँच करेगा जैसे:

if (strcmp($_SERVER['HTTP_USER_AGENT'], "SomeUniqueIdentifier") == 0) 
{ 
    // do whatever 
} 
else 
{ 
    // do nothing 
    exit(); 
} 

कोई भी रास्ता 100% सुरक्षित नहीं है लेकिन मदद कर सकता है।

1

एक त्वरित तरीका अनुरोध आईपी पते की जाँच करने के लिए और अगर यह स्थानीय होस्ट आईपी है केवल चलाया जाता है।

बेशक, आप (उपयोगकर्ता एजेंट की जाँच करें, संदर्भित आदि ..) यह सुनिश्चित करें कि यहाँ तक कि एक ब्राउज़र स्थानीय स्तर पर स्क्रिप्ट ट्रिगर नहीं करता बनाने के लिए बाद में कुछ और कोड जोड़ने की जरूरत।