2010-11-12 75 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); 
    } 
} 
?> 
相关问题