jnr*_*bsn 18 php fopen fwrite fread
在PHP中,如何检查流资源(或文件指针,句柄或您想要调用它们的任何内容)是可读还是可写?例如,如果您遇到的情况是您对资源的打开或创建方式一无所知,那么如何检查它是否可读?你如何检查它是否可写?
根据我所做的测试(只使用PHP 5.3.3的常规文本文件),fread()当资源不可读时,不会在任何级别抛出任何错误.它只返回一个空字符串,但它也为空文件执行此操作.理想情况下,最好选择不修改资源本身的检查.通过尝试从中读取资源来测试资源是否可读将改变指针的位置.
相反,fwrite()当资源不可写时,不会在任何级别抛出任何错误.它只返回零.这稍微有用一些,因为如果你试图将一定数量的字节写入文件并fwrite()返回零,那么你就会知道出了什么问题.但是,这仍然不是一种理想的方法,因为在我需要写入它之前知道它是否可写会更好,而不是试图写入它并查看它是否失败.
此外,理想情况下,检查应该适用于任何类型的流资源,而不仅仅是文件.
这可能吗?有这样的事吗?我一直找不到任何有用的东西.提前感谢您的回答.
irc*_*ell 26
非常简单.只需stream_get_meta_data($resource)从脚本调用,然后检查mode返回值的数组元素:
$f = fopen($file, 'r');
$meta = stream_get_meta_data($f);
var_dump($meta['mode']); // r
Run Code Online (Sandbox Code Playgroud)
如果您想知道基础数据是否可写:
var_dump(is_writable($meta['uri'])); // true if the file/uri is writable
Run Code Online (Sandbox Code Playgroud)