2010-05-03 7 views
34

एक पूर्व डेवलपर लिखा था या PHP में क्लाइंट-सर्वर एपीआई कैसे कर सकता हूं। यह पोस्ट को बहुत ही सरल फैशन में पोस्ट/प्रतिक्रिया का उपयोग करके एक्सएमएल के रूप में संदेश भेजता है। हम इसमैं PHP पेज को 503 त्रुटि (या कुछ भी गैर-200)

<h4>Unknown error!</h4> 

फ़ायरबग में की तरह एक पेज के साथ एक HTTP 200 प्रत्युत्तर प्राप्त मैं देख सकता हूँ वास्तव में HTTP प्रतिक्रिया है: समस्या यह है कि जब भी वहाँ एक त्रुटि है (अवैध तर्क सर्वर साइड में पारित पूर्व) है एक 200. हम एक अलग प्रतिक्रिया (यानी: 503) कैसे भेज सकते हैं जब हम प्रोग्रामिंग रूप से हमारे PHP कोड में पता लगाते हैं कि ऐसा करने के लिए उपयुक्त है।

उत्तर

71

कोड भेजने के लिए PHP के header फ़ंक्शन का उपयोग करें (HTTP संस्करण और किसी अन्य शीर्षलेख के साथ) की आवश्यकता है। अधिक पूरा जानकारी:

When to send HTTP status code?

http://php.net/manual/en/function.header.php

http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

header('HTTP/1.1 503 Service Temporarily Unavailable'); 
header('Status: 503 Service Temporarily Unavailable'); 
header('Retry-After: 300');//300 seconds 
+7

आप HTTP/1.1 धारणा को हार्ड कोड क्यों देते हैं? क्या होता है यदि क्लाइंट HTTP 1.0 का उपयोग कर रहा है? – Pacerier

+0

@Pacerier तो आप कीड़े क्या करेंगे? मैं इसे कैसे लिखूंगा ताकि इसमें HTTP 1.0 और HTTP 1.1 दोनों शामिल हों? सभी उदाहरण इसे – Inigo

+1

उत्तर में दिए गए अनुसार मुझे लगता है कि 'हेडर ($ _ सर्वर ["SERVER_PROTOCOL"]।' 503 सेवा अस्थायी रूप से अनुपलब्ध '); '? – Inigo

2

अपनी स्क्रिप्ट के शीर्ष पर (या वास्तव में, किसी भी उत्पादन एक प्रतिक्रिया के रूप भेजे जाने से पहले):

<?php header("HTTP/1.0 404 Not Found"); या किसी अन्य HTTP status code

+4

यह PHP के हैडर प्रकार से स्थिति कोड (विशेष मामले हैंडलिंग) को मैप करने की क्षमता पर निर्भर करता है - यह वास्तव में होना चाहिए हेडर (, "HTTP/1.0 404 नहीं मिला", सच 404) – symcbean

+0

@symcbean नाइस , मैंने कभी यह नहीं देखा है। धन्यवाद! – chelmertz

0

इसे प्राप्त करने के लिए एक अच्छा वर्ग यहां पाया जा सकता: http://www.krisjordan.com/php-class-for-http-response-status-codes/ - इस तरह इसका इस्तेमाल (किसी अन्य उत्पादन से पहले):

<?php header(StatusCodes::httpHeaderFor(503)); ?> 
+1

'सिम्फनी/http-foundation' जैसे कुछ का उपयोग करना बेहतर है https://symfony.com/doc/current/components/http_foundation.html – LONGMAN

3

मैंने ऐसी साइट पर काम किया था जिसे हैक किया गया था और ऐसा करने के लिए HTACCESS का उपयोग करना पड़ा।

<IfModule mod_rewrite.c> 

RewriteEngine on 

# let this (iescaped) IP address see the real site: 
# RewriteCond %{REMOTE_ADDR} !^123.45.67.89 

RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC] 

RewriteCond %{REQUEST_URI} !.(jpe?g?|png|gif|css|js) [NC] 

RewriteRule .* /maintenance.php [R=503,L] 

</IfModule> 
संबंधित मुद्दे