正如问题所述:如何检查PHP中的变量是否包含文件指针?有些像is_string()
或is_object()
。
答案 0 :(得分:10)
您可以使用get_resource_type()
- http://us3.php.net/manual/en/function.get-resource-type.php。如果函数根本不是资源,则该函数将返回FALSE。
$fp = fopen("foo", "w");
...
if(get_resource_type($fp) == 'file' || get_resource_type($fp) == 'stream') {
//do what you want here
}
PHP文档说上面的函数调用应该返回'file',但在我的设置中它返回'stream'。这就是我检查上述结果的原因。
答案 1 :(得分:2)
您可以使用stream_get_meta_data()
。
<?php
$f = fopen('index.php', 'r');
var_dump(stream_get_meta_data($f));
?>
array
'wrapper_type' => string 'plainfile' (length=9)
'stream_type' => string 'STDIO' (length=5)
'mode' => string 'r' (length=1)
'unread_bytes' => int 0
'seekable' => boolean true
'uri' => string 'index.php' (length=9)
'timed_out' => boolean false
'blocked' => boolean true
'eof' => boolean false
如果变量不是资源,你可以在@前加上sups警告 - 然后检查它是否返回false。
答案 2 :(得分:2)
如前所述,您可以使用stream_get_meta_data或get_resource_type来检查您正在处理的资源类型。
更好,更可靠的方法是使用SPL处理文件,它可以节省一些头痛,让您的生活更愉快。这种可能性还没有很好地记录,所以许多开发人员为文件对象创建了自己的包装器,但是你可以在这里找到所需的全部内容:
http://www.php.net/~helly/php/ext/spl/classSplFileObject.html
http://www.php.net/~helly/php/ext/spl/classSplFileInfo.html
第一个提供了阅读,写作,寻找文件等方法......
第二个提供有关您正在使用的对象的元信息,其中有一个方法:
$对象 - &GT; ISFILE();