2010-01-27 15 views
6

मुझे PHP भाषा में एक स्क्रिप्ट बनाने की आवश्यकता है जो संख्याओं के क्रमपरिवर्तन करता है। लेकिन PHP में निष्पादन समय सीमा 60 सेकंड तक सेट है। मैं स्क्रिप्ट कैसे चला सकता हूं ताकि अगर आपको 60 से अधिक सेसुंड चलाने की आवश्यकता है, तो सर्वर द्वारा बाधित नहीं किया गया है। मुझे पता है कि मैं PHP में अधिकतम निष्पादन समय सीमा को बदल सकता हूं, लेकिन मैं एक और संस्करण सुनना चाहता हूं जिसे किसी स्क्रिप्ट के निष्पादन समय को पहले से जानने की आवश्यकता नहीं है।PHP निष्पादन समय सीमा से बचें

एक दोस्त ने मुझे साइन इन करने और सर्वर से अक्सर लॉग आउट करने का सुझाव दिया, लेकिन मुझे नहीं पता कि यह कैसे करें।

कोई सलाह स्वागत है। एक उदाहरण कोड उपयोगी होगा।

धन्यवाद।

सबसे पहले मुझे एक नंबर दर्ज करने की आवश्यकता है, 25 कहें। इसके बाद स्क्रिप्ट लॉन्च हो जाती है और इसे निम्नलिखित करने की आवश्यकता होती है: प्रत्येक नंबर < = 25 से अधिक यह वर्तमान में जेनरेट की गई संख्याओं के साथ एक फाइल बनायेगा मंच; अगली संख्या के लिए यह previuos बनाई गई फ़ाइल खोल देगा, और खुले फ़ाइल की लाइनों पर एक और फ़ाइल बेस बनाएगा और इसी तरह। क्योंकि इसमें काफी समय लगता है, मुझे सर्वर द्वारा बाधित स्क्रिप्ट मधुमक्खी से बचने की आवश्यकता है।

उत्तर

2

@emanuel:

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

उदाहरण के लिए इस स्क्रिप्ट के साथ आप इसे 150 बार प्राप्त करने के लिए 150 बार निष्पादित कर सकते हैं! (Factorising) और परिणाम दिखाने:

// स्क्रिप्ट नाम: calc.php

<?php 

session_start(); 

if(!isset($_SESSION['times'])){ 

    $_SESSION['times'] = 1; 

    $_SESSION['result'] = 0; 

}elseif($_SESSION['times'] < 150){ 

    $_SESSION['times']++; 

    $_SESSION['result'] = $_SESSION['result'] * $_SESSION['times']; 

    header('Location: calc.php'); 

}elseif($_SESSION['times'] == 150){ 

    echo "The Result is: " . $_SESSION['result']; 

    die(); 

} 

?> 

BTW (@Davmuz), आप केवल, अपाचे सर्वर पर set_time_limit() फ़ंक्शन का उपयोग कर सकते यह एक वैध समारोह नहीं है माइक्रोसॉफ्ट आईआईएस सर्वर पर।

+0

+1 अनिवार्य रूप से मेरे उत्तर के क्लाइंट-साइड कार्यान्वयन को रोकता है: इसे बिट्स में डाल दें और उन्हें एक-एक करके निष्पादित करें। हालांकि, इस समाधान में, यदि ब्राउज़र बंद है, तो प्रक्रिया समाप्त होती है। –

+1

@turik जैसा कि नीचे टिप्पणी की गई है: '$ _SESSION ['परिणाम'] = 1;' लाइन 5 पर। –

0
set_time_limit(0) 
+0

आपको एहसास है कि उसने विशेष रूप से कहा था कि वह यह नहीं चाहता था? –

+0

हालांकि यह सवाल है कि सवाल क्या पूछता है, मुझे लगता है कि उदाहरण के लिए एक लूप के प्रत्येक पुनरावृत्ति में set_time_limit (20) का उपयोग करना बेहतर होगा। – svens

+0

@svens जबकि ओपी विशेष रूप से कहता है कि वह समय सीमा को बदलना नहीं चाहता है, मैं मानता हूं कि यह संभवतः ऐसा करने का सबसे अच्छा तरीका होगा। –

0

आप जब एक ऑपरेशन किया जाता है कॉल आप एक कतार में बनाना चाहते हैं, जो आप एक फाइल करने के लिए क्रमानुसार डाल करने के लिए (या मेमोरी कैश?) की कोशिश कर सकते। फिर आप प्रत्येक साठ सेकंड में इस कतार को निष्पादित करने के लिए एक CRON-daemon का उपयोग कर सकते हैं, इसलिए यह कार्य जारी रखता है, और कार्य को समाप्त करता है।

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

0

उपयोग set_time_limit (0) लेकिन आप सेफ_मोड निष्क्रिय करने के लिए है: मैं एक निश्चित समय (set_time_limit (300)) क्योंकि अगर वहाँ (अनंत लूप या मेमोरी लीक) स्क्रिप्ट में एक समस्या है इस का उपयोग करने के लिए सुझाव http://php.net/manual/en/function.set-time-limit.php समस्याओं का स्रोत नहीं हो सकता है।

अपाचे जैसे वेब सर्वर में 300 सेकंड की अधिकतम समय सीमा भी है, इसलिए आपको इसे बदलना होगा। यदि आप धूमकेतु एप्लिकेशन करना चाहते हैं, तो अपाचे की तुलना में एक और वेब सर्वर चुनना बेहतर हो सकता है जिसमें लंबे अनुरोध समय हो सकते हैं।

यदि आपको भारी एल्गोरिदम के लिए लंबे समय तक निष्पादन समय की आवश्यकता है, तो आप समानांतर प्रसंस्करण को भी कार्यान्वित कर सकते हैं: http://www.google.com/#q=php+parallel+processing या इनपुट डेटा और कंप्यूटर को किसी अन्य बाहरी स्क्रिप्ट के साथ क्रॉन या अन्य चीज़ों के साथ स्टोर करें।

+0

कृपया, निर्दिष्ट करें कि आपको क्या करना है, प्रतिक्रियाएं अधिक सटीक हो सकती हैं। – Davmuz

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