如何确定变量是否包含PHP中的文件指针?

时间:2008-11-26 20:09:20

标签: php

正如问题所述:如何检查PHP中的变量是否包含文件指针?有些像is_string()is_object()

3 个答案:

答案 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();