Проверьте, работает ли общий ресурс NFS в PHP - PullRequest
1 голос
/ 12 ноября 2010

Я работаю в системе, которая будет хранить загруженные файлы.Метаданные будут помещены в локально доступную базу данных, но сами файлы будут храниться на удаленном компьютере через NFS, чтобы PHP мог взаимодействовать с сервером, как если бы это был каталог.

Я обнаружил проблему, которая может возникнуть, если кто-то попытается загрузить файл, когда сервер NFS не работает или иным образом недоступен, что может привести к ошибке или зависанию сценария.Очевидно, что мы хотим избежать этого сценария и обработать его изящно, но мы не уверены, как мы можем это сделать.

Мы думаем о том, чтобы: а) проверить сервер во время отображения страницы и выделить часть формы загрузки файла, если сервер не работает, или б) проверить ссылку перед выполнением move_uploaded_file для сохранения загруженного документа,

Возможно ли это сделать из PHP, и если да, то как?

Ответы [ 4 ]

2 голосов
/ 12 ноября 2010

Оформить заказ http://www.php.net/manual/en/function.stream-set-timeout.php

Вы можете написать простую проверку, которая пытается записать в общий ресурс NFS с 2-секундным таймаутом. Если это удастся, перейдите к файлу move_uploaded_file. Если это не удается, дайте пользователю изящную ошибку.

0 голосов
/ 12 ноября 2010

Проверьте, можете ли вы opendir () каталог?

<?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);
    }
}
?>
0 голосов
/ 12 ноября 2010

Я бы попытался написать небольшой файл для реального в точке nfs-mountpoint, если вы подключены к сети и можете написать опубликованный файл.

Если нет, кэшируйте его на веб-сервере для последующего (автоматического) сохранения.

0 голосов
/ 12 ноября 2010

Я не знаю, как выглядит ваша установка ... Если вы монтируете ее, можете ли вы использовать is_writable?

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