2012-02-03 29 views
17

मैं एक क्रॉन नौकरी चलाने के लिए चाहता हूँ। मेरा आवेदन PHP और MySQL में विकसित किया गया है।

यदि मैं कोडिंग में $_SERVER[HTTP_HOST] का उपयोग करता हूं, तो यह ठीक काम करता है। लेकिन अगर मैं क्रॉन नौकरी में एक ही चीज़ का उपयोग करता हूं तो यह त्रुटियां दे रहा है।

क्या कोई भी शरीर इसे ठीक करने के लिए सुझाव दे सकता है?

+0

किसी तरह से कुछ त्रुटि संदेश प्रदान करें है। हो सकता है कि cron स्क्रिप्ट के कारण $ _SERVER ['HTTP_HOST'] अपरिभाषित हो, ब्राउज़र की तरह किसी भी HTTP_HOST को परिभाषित नहीं कर रहा है? आप इसे जारी करने के साथ परीक्षण कर सकते हैं ($ _ सर्वर ['HTTP_HOST']) –

+0

php> = 5.3.0 gethostname() – nick

उत्तर

16

$_SERVER['HTTP_HOST'] क्रोनबॉज से इसे चलाने पर पॉप्युलेट नहीं किया गया है, फ़ाइल HTTP के माध्यम से नहीं पहुंची है।

आपको या तो होस्ट को हार्डकोड करना होगा या इसे कमांड लाइन तर्क के माध्यम से पास करना होगा और इसे $_SERVER['argv'] सरणी के माध्यम से एक्सेस करना होगा।

+0

अच्छा उत्तर का उपयोग करें। सीएलआई स्क्रिप्ट में $ argv और $ argc globals हैं जिन्हें आप एक्सेस कर सकते हैं, इसलिए $ _SERVER का उपयोग करने की आवश्यकता नहीं है। –

+1

'$ argv' वैश्विक-कीवर्ड के बिना कार्यों में उपलब्ध नहीं है। '$ _SERVER' सुपरग्लोबल है। – TimWolla

2

यदि आप खाली हैं, तो आप $_SERVER[HTTP_HOST] के मूल्य को हार्ड कोड कर सकते हैं, या आप कुछ अन्य चेक कर सकते हैं।

6

जब कमांड लाइन पर PHP निष्पादित किया जाता है, $_SERVER['HTTP_HOST'] (बेशक) उपलब्ध नहीं है।

तुम बस @ चिह्न का उपयोग त्रुटि को दबाने या एक निर्माण लाइन का उपयोग में थोड़ा और अधिक सतर्क होना कर सकते हैं:

$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'CLI'; 
6

पहले कहा गया है, $ _SERVER मौजूद नहीं है जब आप php-CLI के माध्यम से php चलाते हैं।

हालांकि, php-cgi में अपनी cron'd स्क्रिप्ट चलाने के लिए एक विकल्प है, जहां आपके पास $ _SERVER होगा। यदि आप किसी स्थानीय वेब सर्वर पर कर्ल करते हैं, तो $ _SERVER पॉप्युलेट हो जाएगा।

$ cat /etc/cron.daily/mydailyphpwork 
/usr/bin/curl http://domain.tld/path/to/cron-script.php &> /dev/null 

हालांकि, मुझे लगता है कि आप वास्तव में, TimWolla या DerVO द्वारा प्रस्तावित जब तक आप वास्तव में इस व्यवहार की जरूरत समाधान के साथ छड़ी चाहिए।

सकारात्मक:

  • आप सभी $ _SERVER चर की उम्मीद के रूप में स्थापित हो जाएगा।
  • यदि आपको बहुत से कोड को फिर से लिखना है, तो अन्यथा यह पसंद किया जा सकता है क्योंकि आपको कोई कोड बदलने की आवश्यकता नहीं है।

विपक्ष:

  • यह एक समाधान की तरह है और शायद cpu लोड में एक मामूली वृद्धि का मतलब है।
4

कर्ल के साथ क्रॉन नौकरी चलाने का प्रयास करें .. यह आपके $ _SERVER ['HTTP_HOST'] को पॉप्युलेट करेगा। लिनक्स पर

वाक्य रचना की तरह

curl http://yourdomain/yourfile.php 
+1

यह मेरे दिमाग में सबसे सरल समाधान था, जब तक आपकी फ़ाइल सार्वजनिक-सामना करने वाले यूआरएल पर हो। AronCederholm भी एक समान सुझाव दिया लेकिन बिंदु के अधिकार का जवाब देने के लिए @alwaysLearn के लिए props। यह मेरे लिए सही काम किया। – David

संबंधित मुद्दे