2008-08-12 52 views
5

我有一個腳本使用PEAR HTTP類檢查來自HTTP服務器的響應。但是,我最近發現腳本在FTP服務器上失敗(可能是任何不是HTTP或HTTPS的)。我嘗試了谷歌,但沒有看到任何從HTTP服務器以外的服務器返回服務器狀態代碼的腳本或代碼。使用PHP腳本檢查FTP狀態碼

如何找到使用PHP的新聞組或FTP服務器的狀態?

編輯:我應該澄清,我只感興趣的是從FTP服務器和我指定的目錄中讀取的能力。我需要知道服務器是否已經死機,我沒有被授權閱讀等。

請注意,儘管大部分時間我都是語言不可知論者,整個網站都是PHP驅動的,所以PHP解決方案將是未來易於維護和擴展的最佳選擇。

回答

2

HTTP工作稍有不同FTP雖然很遺憾。儘管兩者在瀏覽器中看起來都是一樣的,但HTTP的基礎是URI(即訪問資源A,您有一個標識符,告訴您如何訪問它)。

FTP是非常老派的服務器驅動。即使是匿名FTP也有點駭人聽聞,因爲您仍然提供用戶名和密碼,它只是被定義爲「匿名」和您的電子郵件地址。

檢查,如果FTP服務器是高達手段檢查

  1. 您可以連接到FTP服務器

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

  2. ,您可以登錄到服務器:

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

  3. 然後,如果您需要訪問更多底層資源以測試某個特定站點是否已啓動,請對其進行適當的操作。例如在一個文件上,可能使用ftp_mdtm()來獲取上次修改時間或目錄,看看ftp_nlist()是否有效。

+0

需要注意的是,在編譯PHP時,至少在我使用的系統上,默認情況下,這些FTP函數未啓用。 – 2008-10-03 22:16:06

0

使用內置的PHP FTP *功能比試圖推出自己的功能更簡單嗎?如果URI來自您的控制之外的源,則需要檢查協議定義(http://或ftp://等)以確定要使用哪個功能,但這是相當平凡的。如果現在指定了協議(確實應該有!),那麼你可以嘗試默認爲http。

0

如果您想要讀取特定的響應,您將不得不打開套接字並手動讀取/寫入數據。

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

然後你必須來回輸出/ fread數據。
這將要求您閱讀FTP協議。