考虑以下代码:
$a = fopen('test.txt', 'a');
$b = fread($a, filesize('test.txt'));
我希望$b
是假的,因为它显然是试图从一个只能写入的文件中读取。但是,$b
在这种情况下是一个空字符串。如何区分不良尝试和合法空文件?同样适用于fwrite()
btw。
答案 0 :(得分:0)
根据fread()
的定义,除了这两种情况外,它几乎总是返回一个字符串结果值:
在您的情况下,您可以使用以下代码检测到错误的尝试:
if (($data = fread($f, 512) === '' && !feof($f)) {
// nothing read but not at EOF either
// that's fishy
}
如果是fwrite()
,你可以测试写入的字节数(它是返回值);如果写的字节越少,就会出错。
答案 1 :(得分:-1)
$content = false;
$filename = 'test.txt';
if( $handle = fopen($filename, 'a') )
{
$meta = stream_get_meta_data($handle);
// Check if mode readable
if( $meta['mode'] == 'r')
$content = fread($handle, filesize($filename));
fclose($handle);
}
if( $content == false )
echo 'bad attempt!';
我测试并输出是:
bad attempt!