2011-01-15 16 views
5

नाटकीय ध्वनि शीर्षक के लिए खेद है, बस यह जानना चाहता था कि सभी प्रकार के PHP कमांड को एक्सेप्ट एक निष्पादित करने से रोकने का कोई तरीका है या नहीं।क्या मरने का कोई विकल्प है?

उदाहरण के लिए, अब जब मैं मरने का उपयोग करके एक स्क्रिप्ट को मारता हूं() मेरे पृष्ठ आधे टूटे हुए हैं क्योंकि पेज के एचटीएमएल का निचला भाग लोड करने में विफल रहा क्योंकि इसे शामिल() फ़ंक्शन का उपयोग करने में लाया जा रहा था।

तो PHP को बताने का कोई तरीका है "फ़ंक्शन को शामिल किए बिना किसी और आदेश को निष्पादित करने की अनुमति न दें"?

+1

तो शायद 'मरने() 'का उपयोग करने के लिए सही आदेश नहीं है। संदर्भ क्या है? आपको स्क्रिप्ट को बिल्कुल मारना क्यों है? –

+0

नहीं, अगर यह आपका समय है, तो आपको बस 'मरना' होगा ... क्षमा करें। :) गंभीरता से हालांकि, ऐसा लगता है कि आप इस बारे में गलत तरीके से जा रहे हैं। बस कुछ भी कर रहे हैं, बस बस अपने पृष्ठ को मार मत करो। बेहतर त्रुटि हैंडलिंग का प्रयोग करें! – deceze

+0

@ फ़ेलिक्स क्लिंग मैं स्क्रिप्ट को मार रहा हूं यदि GET पैरामीटर का मान सुरक्षा कारणों से 3 पूर्व निर्धारित स्वीकार्य मानों के अलावा कुछ भी है। – TJDeatwiler

उत्तर

2

आपको आवश्यक फ़ाइलों को शामिल करने के लिए my_die() जैसे कस्टम मर() कमांड का उपयोग करने की आवश्यकता होगी। आप मरने को ओवरराइड नहीं कर सकते() और न ही कोई अन्य फ़ंक्शन आपको जो भी खोजता है उसे करने की अनुमति देता है।

0

कोई कारण नहीं है कि आप यह नहीं कर सकते हैं?

if(something didn't work) { 
    include('footer.php'); 
    die(); 
} 

यदि आप इसे अक्सर उपयोग कर रहे हैं, तो इसे एक फ़ंक्शन में बदल दें।

function finish_and_die($message) { 
    print $message; 
    include('footer.php'); 
    exit; 
} 
+0

नहीं क्योंकि मेरे पास पृष्ठ पर विभिन्न स्तरों में 1 से अधिक फ़ाइल शामिल हैं और प्रसंस्करण भाग मध्य में है, अगर कोई दूसरा तरीका है तो मैं आदेश के बारे में चिंता नहीं करना चाहता हूं। – TJDeatwiler

0

आप की तरह कुछ की कोशिश कर सकते:,

if(is_secure($_GET['value'])) // Whatever you're using to check if the value is allowed 
{ 
    // Page content goes here 
} 

इस तरह आपके सभी अन्य भी शामिल है और पेज प्रसंस्करण कोड अभी भी बुलाया जाएगा।

वैकल्पिक रूप से, यदि यह मान्य नहीं है, तो अपवाद फेंक दें, और एक अपवाद हैंडलर है जो पृष्ठ कोड को पूरा करने के बारे में जानता है।

11

आप return उपयोग कर सकते हैं एक शामिल फ़ाइल "समाप्त" करने के लिए, पूरे स्क्रिप्ट की हत्या के बिना:

test1.php

<?php 
include 'test2.php'; 
echo 'foo'; 

test2.php

<?php 
echo 'bar'; 
return; 
echo 'baz'; 

आउटपुट:

barfoo 
+0

स्क्रिप्ट जारी रखने के लिए उपयोगी तरीका। जो कुछ भी लौटाया गया है उसे संभालें, हालांकि आपको पसंद है, धन्यवाद। – Andrew

-1

यदि आप आउटपुट बफरिंग के साथ संयुक्त ओओपी दृष्टिकोण का उपयोग करते हैं, तो इस प्रकार आप समस्या को हल कर सकते हैं:

नियंत्रक वर्ग (जहां आपका तर्क जाता है) में एक सदस्य है जो टेम्पलेट क्लास का एक उदाहरण है। नियंत्रक वर्ग एक __destruct विधि है, जो खाका renders है

जब exit() या die() कहा जाता है, नियंत्रक वस्तु की __destruct विधि कहा जाता है, जो बारी में खाका वस्तु की render प्रणाली को बुलाती है।

+0

तर्क मॉडल में है, नियंत्रकों नहीं ... – netcoder

+1

व्यापार तर्क नियंत्रकों में आता है। भंडारण/डेटा तर्क मॉडल में संबंधित है। प्रदर्शन तर्क दृश्यों में आता है। – Stephen

+0

दिलचस्प बात यह है कि मैंने टेम्पलेट्स को प्रस्तुत करने के लिए अभी अपना ढांचा बनाया है। :) – Spechal

1

निकास() निष्पादन को रोक देगा, और किसी भी पंजीकृत निकास हैंडलर चलाएगा।

अपवाद फेंकने से आस-पास की कोशिश कहीं भी बढ़ जाएगी। यदि शीर्ष स्तर तक कोई प्रयास नहीं है, तो यह स्क्रिप्ट के सभी निष्पादन को समाप्त कर देगा।

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

व्यक्तिगत रूप से, मैं अपवाद सौंपने के लिए एक अच्छी तरह से विचार-विमर्श दृष्टिकोण की सलाह देता हूं, और कोशिश/फेंक का उपयोग करता हूं।

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