2011-01-23 7 views
8

मैं एक PHP साइट बना रहा हूं, और मैं एक स्क्रिप्ट (जब आप एक बटन क्लिक करते हैं) चाहते हैं जो मेरे mysql डेटाबेस में कुछ जानकारी जोड़ता है (मैं यह कर सकता हूं मेरे द्वारा भाग) और यह 5 मिनट बाद एक स्क्रिप्ट निष्पादित करता है। शायद यह मुश्किल नहीं है, लेकिन इस तरह की चीजें Google को करना मुश्किल है, अग्रिम धन्यवाद।PHP: पहली स्क्रिप्ट चलाने के बाद 5 मिनट स्क्रिप्ट निष्पादित करें

+1

इस समय-विस्थापित कार्रवाई का उद्देश्य क्या है? क्या जानकारी जोड़ा गया है जिसके लिए इस विस्थापन की आवश्यकता है? – Gumbo

+1

मैं ब्राउज़र-आधारित गेम बना रहा हूं और मैं चाहता हूं कि कोई इमारत बनाने के लिए * मिनट लेता है और फिर खत्म हो जाता है। – Nyohosud

+0

कि टिप्पणी जो आप प्राप्त करने की कोशिश कर रहे हैं, और आपकी सहायता करने के तरीके की हमारी समझ के साथ बहुत मदद करती है। मैं सुझाव दूंगा कि पहले से दिए गए बहुत सारे उत्तर कुछ अलग करने की कोशिश कर रहे हैं। – Spudley

उत्तर

-3

क्या आप इसकी तलाश कर रहे हैं?

sleep php.net

+0

'नींद' ब्लॉक करेगा; ओपी ने इसका स्पष्ट रूप से उल्लेख नहीं किया, लेकिन यह एक गैर-अवरोध समाधान के लिए एक प्रश्न की तरह लगता है। – miku

+0

वास्तव में नहीं, मैं इसे एक और स्क्रिप्ट निष्पादित करना चाहता हूं। ईजी। बटन कॉल process.php और process.php को 5 मिनट बाद अन्य। php निष्पादित करना होगा। – Nyohosud

+0

थोड़ा सा कल्पना ... बेशक आप वेबपृष्ठ की उसी स्क्रिप्ट में ऐसा नहीं कर सकते हैं। लेकिन आप स्क्रिप्ट फ़ंक्शन के साथ पृष्ठभूमि चलाने वाले सर्वर में स्क्रिप्ट OfWebBrowser.php से किसी अन्य स्क्रिप्ट कार्रवाई से 5finutes.php पर कॉल कर सकते हैं, इसलिए आपको किसी भी क्रॉन या जो कुछ भी नहीं है और उपयोगकर्ता के लिए कोई समस्या नहीं है ... – raultm

6

नींद एक बहुत बुरा विचार है। अनुरोध करने के लिए ग्राहक ब्राउज़र को 5 मिनट का इंतजार करना होगा !!!

मेरी राय में ऐसा करना संभव नहीं है जैसा आप चाहते हैं।

आपको एक और स्क्रिप्ट बनाना चाहिए जो डेटाबेस से पूछताछ करे और जांच करे कि क्या नया डेटा है (और सफल fetch नौकरी पर)। यह स्क्रिप्ट हर एन मिनट में क्रॉन द्वारा चलाया जाना चाहिए।

4

आप अपने डेटाबेस में एक कतार लागू कर सकते हैं, जहां आप निष्पादित करने के लिए "आदेश" जोड़ते हैं, और इस आदेश को निष्पादित करने के लिए स्टोर करते हैं। फिर एक क्रॉन जॉब है जो हर मिनट चलता है और चेक कतार में कहा जाता है कि यह एक निश्चित कमांड निष्पादित करने का समय है या नहीं।

5

बहुत कठिन एक। ,

  1. अपने मूल स्क्रिप्ट डेटाबेस के लिए एक रिकॉर्ड कहते हैं, निष्पादन के अपने समय से युक्त
  2. एक और स्क्रिप्ट कार्रवाई बाद में 5 मिनट ले जाने की आवश्यकता है कि शामिल हैं - लेकिन: मैं कुछ इस तरह के लिए जाना चाहते हैं इसे केवल तब लॉन्च करता है जब ऊपर उल्लिखित डीबी रिकॉर्ड में कम से कम 5 मिनट पहले का टाइमस्टैम्प होता है (उम्मीद है कि यह पर्याप्त है, मुझे यह वाक्यांश देने में परेशानी हो रही है)
  3. प्रत्येक एक्स मिनट (शायद 2) दूसरी स्क्रिप्ट निष्पादित करने के लिए क्रोंटैब सेट करें।

यह 5 मिनट तक नहीं होगा, बल्कि 5 और 7 के बीच कुछ (यदि आप प्रत्येक 2 मिनट में स्क्रिप्ट लॉन्च करना चुनते हैं)। क्या वह करेगा?

+0

यह एक अच्छा विचार जैसा दिखता है , लेकिन अगर मैं प्रविष्टियों में से 1 का समय 5 मिनट पहले था तो मैं कैसे गणना कर सकता हूं? – Nyohosud

+0

पहली स्क्रिप्ट में, आप डेटाबेस में 'executiontime = NOW()' डालते हैं। दूसरे में, आप 'निष्पादन समय mingos

0

आईएमएचओ सबसे अच्छा तरीका है: बटन पर डीबी में चलाने के लिए नौकरी को बचाने के लिए क्लिक करें, इसे चलाने के समय के साथ। एक छोटा डिमन लिखें, प्रत्येक 10/5/2 सेकंड नई नौकरियां लाएं जिन्हें निष्पादित किया जाना चाहिए और उन्हें निष्पादित किया जाना चाहिए।

संपादित करें: निष्पादित करने के लिए नई नौकरियों की जांच के लिए क्रॉन का उपयोग करने का विचार बेहतर है, लेकिन केवल तभी यदि आपके पास एक छोटी वेबसाइट है और आपको नौकरियों के लिए भार संतुलन करने की आवश्यकता नहीं है।

0

जिस तरह से मैं यह करूंगा वह दो स्क्रिप्ट के बीच एक क्रॉन नौकरी चलाने के लिए है।

  1. पहली स्क्रिप्ट डेटाबेस तालिका में एक मान सेट करती है।
  2. क्रॉन जॉब दूसरी स्क्रिप्ट निष्पादित करता है। हर मिनट या क्या नहीं।
  3. स्क्रिप्ट 1 द्वारा निर्धारित डेटाबेस मान के लिए दूसरी स्क्रिप्ट चेक पूरी तरह से चलाने के लिए या नहीं तय करने के लिए।
0

आप प्रक्रिया को और बच्चे के कांटे में फोर्क कर सकते हैं, अपनी दूसरी लिपि निष्पादित करने से पहले 5 मिनट के लिए नींद लें। मैंने इसका परीक्षण किया है और ऐसा लगता है कि माता-पिता के समाप्त होने के बाद भी बाल प्रक्रिया अभी भी निष्पादित होगी।कुछ

//initial code 
$pid = pcntl_fork(); //fork the process 
if ($pid==0) // if in the child 
{ 
    exec("sleep 300; php second_process.php"); //sleep for 5 minutes and execute second script 
    return; // or exit 
} 
// rest of initial script... 

"वापसी;" यह महत्वपूर्ण है क्योंकि शेष स्क्रिप्ट दूसरी बार निष्पादित करेगी (यानी बच्चे में) जब तक कि वह वहां न हो।

0

मैं PHP की बजाय जावास्क्रिप्ट में टाइमर करने का सुझाव दूंगा।

उपयोगकर्ता के $ _SESSION में टाइमस्टैम्प रखें, यह इंगित करने के लिए कि उन्होंने ईवेंट कब शुरू किया था, और उसके बाद जावास्क्रिप्ट को पांच मिनट के बाद ब्राउज़र पर वापस कॉल करें।

PHP को अभी भी प्रारंभ समय जानने की आवश्यकता होगी (उपयोगकर्ता को जावास्क्रिप्ट टाइम-आउट को ट्वीक करके गेम को हैक करने से रोकने के लिए), लेकिन इसे वास्तव में किसी भी गिनती समय या सोने या कुछ भी करने की आवश्यकता नहीं होगी वह खुद

3

आप एक यूनिक्स बॉक्स पर हैं:

exec("echo 'php script.php' | at now +5 minutes"); 

कौन सा 5 मिनट के बाद चलाने के लिए php script.php आदेश निर्धारित करेगा।

+0

हालांकि, यह बहुत से उपयोगकर्ताओं के साथ बहुत कमजोर हो जाता है। – ceejayoz

1

मैं ब्राउज़र-आधारित गेम बना रहा हूं और मैं चाहता हूं कि कोई इमारत बनाने के लिए * मिनट लेता है और फिर खत्म हो जाता है।

यह मानते हुए कि यह आपका वास्तविक लक्ष्य है, मैं केवल मूल भवन को टाइमस्टैम्प से बचाने की अनुशंसा करता हूं।

मुझे पता है कि आपने PHP के साथ अपना प्रश्न टैग किया है, लेकिन मैं PHP में mysql प्रश्नों को संभालने के सभी ओवरहेड को शामिल नहीं करना चाहता, खासकर जब से मुझे नहीं पता कि आप क्वेरी को निष्पादित करना पसंद करते हैं या आप किस फ्रेमवर्क को '

build.php

building_type_id = sanitize(POST['id']) 
user_id = current_user['id'] 

query('INSERT INTO buildings (user_id, building_type_id, created_at) 
     VALUES (' + user_id + ', ' + building_type_id + ', CURRENT_TIME)'); 

my_buildings.php

: मुकदमा रहे हैं, इसलिए यहाँ कुछ स्यूडोकोड इस "निर्माण इमारतों" कार्य को संभालने के लिए है

आशा है कि इससे मदद मिलती है!

+0

यह कोड का एक बड़ा टुकड़ा है, ठीक है जो मैं प्राप्त करने की कोशिश कर रहा हूं! अगली बार मैं उस चीज़ को जोड़ दूंगा जिसे मैं पहली पोस्ट में हासिल करना चाहता हूं। धन्यवाद! – Nyohosud

+0

यदि आप इसे पसंद करते हैं, तो वोट देने में योगदान दें और/या इस उत्तर के बाईं ओर स्थित चेकमार्क पर क्लिक करें ताकि भविष्य में अन्य इसे आसानी से ढूंढ सकें! –

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