2010-11-12 65 views
1

我正在開發一個可以存儲上傳文件的系統。元數據將進入本地可訪問的數據庫,但文件本身將通過NFS存儲在遠程盒子上,以便PHP可以與服務器交互,就好像它是一個目錄。檢查PHP中的NFS共享是否已啓動

我確定,如果有人試圖上載文件時,NFS服務器停機或不可用,這可能會導致腳本錯誤出或掛起可能出現的問題。顯然,我們希望避免這種情況並以優雅的方式處理,但我們不確定我們如何做到這一點。

我們正在考慮a)在頁面顯示時檢查服務器,並在服務器關閉時重新映射表單的文件上載部分,或者b)在執行move_uploaded_file以存儲上載的文檔之前檢查鏈接。

是否有可能在PHP中做到這一點,如果是這樣,如何?

回答

2

結帳http://www.php.net/manual/en/function.stream-set-timeout.php

你可以寫一個簡單的檢查,試圖寫入NFS共享用2秒超時。如果成功,請繼續執行move_uploaded_file。如果失敗,請給用戶一個優美的錯誤。

+0

我知道這是令人難以置信的舊,但是可以發佈任何代碼嗎?我的腳本掛在'fopen'調用點,所以我不能在它上面設置'stream_set_timeout'。 – BT643 2014-01-15 12:25:17

+0

@ BT643查看[default_socket_timeout](http://www.php.net/manual/en/filesystem.configuration.php)。 – 2014-05-27 08:57:15

0

我不知道你的設置是什麼樣的......如果你正在安裝它,你可以使用is_writable

if (!is_writable('/path/to/nfs/share/mount')) { 
    die('NFS share is not writable!'); 
} 
0

我想嘗試在nfs-mountpoint上寫一個真實的小文件,如果成功了,你可以在線並且可以寫出張貼的文件。

如果沒有,請將其緩存在網絡服務器磁盤上以便以後(自動)保存。

0

檢查你是否可以打開目錄?

<?php 
$dir = "/etc/php5/"; 

// Open a known directory, and proceed to read its contents 
if (is_dir($dir)) { 
    if ($dh = opendir($dir)) { 
     // do your stuff 
     closedir($dh); 
    } 
} 
?> 
相關問題