2008-08-12 30 views
5

के साथ एफ़टीपी स्थिति कोड की जांच करना मेरे पास एक स्क्रिप्ट है जो पीईएआर HTTP कक्षाओं का उपयोग कर HTTP सर्वर से प्रतिक्रियाओं की जांच करती है। हालांकि, मैंने हाल ही में पाया है कि स्क्रिप्ट एफ़टीपी सर्वर (और शायद कुछ भी जो HTTP या HTTPS नहीं है) पर विफल हो जाती है। मैंने Google की कोशिश की, लेकिन किसी भी स्क्रिप्ट या कोड को नहीं देखा जो HTTP सर्वर के अलावा सर्वर से सर्वर स्थिति कोड लौटाता है।एक PHP स्क्रिप्ट

मैं PHP का उपयोग कर न्यूज ग्रुप या एफ़टीपी सर्वर की स्थिति कैसे प्राप्त कर सकता हूं?

संपादित करें: मुझे यह स्पष्ट करना चाहिए कि मुझे केवल एक FTP सर्वर और निर्देशिका निर्दिष्ट करने की क्षमता में रुचि है। मुझे यह जानने की ज़रूरत है कि सर्वर मर चुका है या चला गया है, मुझे पढ़ने के लिए अधिकृत नहीं है, आदि

कृपया ध्यान दें कि, हालांकि अधिकांश समय मैं भाषा अज्ञेयवादी हूं, पूरी वेबसाइट PHP संचालित है, इसलिए भविष्य में रखरखाव और विस्तारशीलता के लिए एक PHP समाधान सबसे अच्छा होगा।

उत्तर

2

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

एफ़टीपी बहुत पुराना स्कूल सर्वर संचालित है। यहां तक ​​कि अज्ञात एफ़टीपी एक हैक का एक छोटा सा है, क्योंकि आप अभी भी एक उपयोगकर्ता नाम और पासवर्ड की आपूर्ति करते हैं, इसे सिर्फ "अज्ञात" और आपका ईमेल पता के रूप में परिभाषित किया गया है।

जांचना कि FTP सर्वर साधन जाँच

  1. आप FTP सर्वर

    if (!($ftpfd = ftp_connect($hostname))) { ... }

  2. है कि आप सर्वर पर लॉगइन कर सकते हैं कनेक्ट कर सकते हैं कि ऊपर है:

    if (!ftp_login($ftpfd, $username, $password)) { ... }

  3. फिर, यदि आगे अंतर्निहित संसाधन हैं, तो आपको यह जांचने की आवश्यकता है कि कोई विशेष साइट ऊपर है या नहीं, फिर उन पर एक एप्राइपिएट ऑपरेशन का उपयोग करें। जैसे एक फ़ाइल पर, अंतिम संशोधित समय या निर्देशिका पर प्राप्त करने के लिए शायद ftp_mdtm() का उपयोग करें, देखें कि ftp_nlist() काम करता है या नहीं।

+0

यह ध्यान दिया जाना चाहिए कि, डिफ़ॉल्ट रूप से, PHP का संकलन करते समय इन FTP कार्यों को सक्षम नहीं किया जाता है, कम से कम उन सिस्टमों पर जिन्हें मैंने उपयोग किया था। –

0

क्या आप स्वयं को रोल करने की कोशिश करने से अंतर्निहित PHP एफ़टीपी * कार्यक्षमता का उपयोग करना आसान नहीं होगा? यदि यूआरआई आपके नियंत्रण के बाहर किसी स्रोत से आ रहा है, तो आपको यह निर्धारित करने के लिए प्रोटोकॉल परिभाषा (http: // या ftp: //, आदि) की जांच करने की आवश्यकता होगी, लेकिन यह काफी छोटा है। यदि अब प्रोटोकॉल निर्दिष्ट है (वास्तव में होना चाहिए!) तो आप डिफ़ॉल्ट रूप से http पर आज़मा सकते हैं।

0

यदि आप विशिष्ट प्रतिक्रियाएं पढ़ना चाहते हैं तो आपको एक सॉकेट खोलना होगा और डेटा को मैन्युअल रूप से पढ़ना होगा।

<?php 
$sock = fsockopen($hostname, $port); 
?> 

तो फिर तुम fread डेटा आगे पीछे fput को/होगा।
इसके लिए आपको एफ़टीपी प्रोटोकॉल पर पढ़ने की आवश्यकता होगी।