1--TEST-- 2Test fread() function : usage variations - read beyond file size, read/write mode 3--SKIPIF-- 4<?php 5if (substr(PHP_OS, 0, 3) == 'WIN') { 6 die('skip...Not valid for Windows'); 7} 8?> 9--FILE-- 10<?php 11// include the file.inc for common functions for test 12include ("file.inc"); 13 14/* Function : function check_read(resource $file_handle, int $read_size, int $expect_size) 15 Description : Read data from file of size $read_size and verifies that $expected_size no. of 16 bytes are read. 17 $file_handle : File Handle 18 $read_size : No. of bytes to be read. 19 $expect_size : Expected data length 20 Returns: returns the data read 21*/ 22function check_read($file_handle, $read_size, $expect_size) { 23 // print file pointer position before read 24 var_dump( ftell($file_handle) ); 25 var_dump( feof($file_handle) ); 26 27 // read the data of size $read_size 28 echo "Reading $read_size bytes from file, expecting $expect_size bytes ... "; 29 $data_from_file = fread($file_handle, $read_size); 30 31 // check if data read is of expected size 32 if ( strlen($data_from_file) == $expect_size) 33 echo "OK\n"; 34 else 35 echo "Error reading file, total number of bytes read = ".strlen($data_from_file)."\n"; 36 37 // file pointer position after read 38 var_dump( ftell($file_handle) ); 39 // check if file pointer at eof() 40 var_dump( feof($file_handle) ); 41 42 return $data_from_file; 43} 44 45echo "*** Testing fread() : usage variations ***\n"; 46 47$file_modes = array("a+","a+b","a+t", 48 "w+","w+b","w+t", 49 "x+","x+b","x+t"); 50 51$file_content_types = array("numeric","text","text_with_new_line"); 52 53foreach($file_content_types as $file_content_type) { 54 echo "\n-- Testing fread() with file having content of type ". $file_content_type ." --\n"; 55 56 /* open the file using $files_modes and perform fread() on it */ 57 foreach($file_modes as $file_mode) { 58 if(!strstr($file_mode,"x")){ 59 /* create files with $file_content_type */ 60 create_files ( __DIR__, 1, $file_content_type, 0755, 1, "w", "fread_variation", 3); 61 } 62 63 $filename = __DIR__."/fread_variation3.tmp"; // this is name of the file created by create_files() 64 echo "-- File opened in mode ".$file_mode." --\n"; 65 $file_handle = fopen($filename, $file_mode); 66 if (!$file_handle) { 67 echo "Error: failed to fopen() file: $filename!"; 68 exit(); 69 } 70 71 if(strstr($file_mode,"w") || strstr($file_mode,"x") ) { 72 $data_to_be_written=""; 73 fill_file($file_handle, $file_content_type, 1024); 74 } 75 76 rewind($file_handle); 77 78 // read file by giving size more than its size 79 echo "-- Reading beyond filesize, expected : 1024 bytes --\n"; 80 rewind($file_handle); 81 $data_from_file = check_read($file_handle, 1030, ( strstr($file_mode, "+") ? 1024 : 1024) ); 82 if ( $data_from_file != false) 83 var_dump( md5($data_from_file) ); 84 85 rewind($file_handle); 86 echo "-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes --\n"; 87 // try fread when file pointer at end 88 fseek($file_handle, 0, SEEK_END); 89 //reading file when file pointer at end 90 $data_from_file = check_read($file_handle, 10, 0); 91 if ( $data_from_file != false) 92 var_dump( md5($data_from_file) ); 93 94 // now close the file 95 fclose($file_handle); 96 97 // delete the file created 98 delete_file($filename); // delete file 99 } // end of inner foreach loop 100}// end of outer foreach loop 101 102echo"Done\n"; 103?> 104--EXPECT-- 105*** Testing fread() : usage variations *** 106 107-- Testing fread() with file having content of type numeric -- 108-- File opened in mode a+ -- 109-- Reading beyond filesize, expected : 1024 bytes -- 110int(0) 111bool(false) 112Reading 1030 bytes from file, expecting 1024 bytes ... OK 113int(1024) 114bool(true) 115string(32) "950b7457d1deb6332f2fc5d42f3129d6" 116-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 117int(1024) 118bool(false) 119Reading 10 bytes from file, expecting 0 bytes ... OK 120int(1024) 121bool(true) 122-- File opened in mode a+b -- 123-- Reading beyond filesize, expected : 1024 bytes -- 124int(0) 125bool(false) 126Reading 1030 bytes from file, expecting 1024 bytes ... OK 127int(1024) 128bool(true) 129string(32) "950b7457d1deb6332f2fc5d42f3129d6" 130-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 131int(1024) 132bool(false) 133Reading 10 bytes from file, expecting 0 bytes ... OK 134int(1024) 135bool(true) 136-- File opened in mode a+t -- 137-- Reading beyond filesize, expected : 1024 bytes -- 138int(0) 139bool(false) 140Reading 1030 bytes from file, expecting 1024 bytes ... OK 141int(1024) 142bool(true) 143string(32) "950b7457d1deb6332f2fc5d42f3129d6" 144-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 145int(1024) 146bool(false) 147Reading 10 bytes from file, expecting 0 bytes ... OK 148int(1024) 149bool(true) 150-- File opened in mode w+ -- 151-- Reading beyond filesize, expected : 1024 bytes -- 152int(0) 153bool(false) 154Reading 1030 bytes from file, expecting 1024 bytes ... OK 155int(1024) 156bool(true) 157string(32) "950b7457d1deb6332f2fc5d42f3129d6" 158-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 159int(1024) 160bool(false) 161Reading 10 bytes from file, expecting 0 bytes ... OK 162int(1024) 163bool(true) 164-- File opened in mode w+b -- 165-- Reading beyond filesize, expected : 1024 bytes -- 166int(0) 167bool(false) 168Reading 1030 bytes from file, expecting 1024 bytes ... OK 169int(1024) 170bool(true) 171string(32) "950b7457d1deb6332f2fc5d42f3129d6" 172-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 173int(1024) 174bool(false) 175Reading 10 bytes from file, expecting 0 bytes ... OK 176int(1024) 177bool(true) 178-- File opened in mode w+t -- 179-- Reading beyond filesize, expected : 1024 bytes -- 180int(0) 181bool(false) 182Reading 1030 bytes from file, expecting 1024 bytes ... OK 183int(1024) 184bool(true) 185string(32) "950b7457d1deb6332f2fc5d42f3129d6" 186-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 187int(1024) 188bool(false) 189Reading 10 bytes from file, expecting 0 bytes ... OK 190int(1024) 191bool(true) 192-- File opened in mode x+ -- 193-- Reading beyond filesize, expected : 1024 bytes -- 194int(0) 195bool(false) 196Reading 1030 bytes from file, expecting 1024 bytes ... OK 197int(1024) 198bool(true) 199string(32) "950b7457d1deb6332f2fc5d42f3129d6" 200-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 201int(1024) 202bool(false) 203Reading 10 bytes from file, expecting 0 bytes ... OK 204int(1024) 205bool(true) 206-- File opened in mode x+b -- 207-- Reading beyond filesize, expected : 1024 bytes -- 208int(0) 209bool(false) 210Reading 1030 bytes from file, expecting 1024 bytes ... OK 211int(1024) 212bool(true) 213string(32) "950b7457d1deb6332f2fc5d42f3129d6" 214-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 215int(1024) 216bool(false) 217Reading 10 bytes from file, expecting 0 bytes ... OK 218int(1024) 219bool(true) 220-- File opened in mode x+t -- 221-- Reading beyond filesize, expected : 1024 bytes -- 222int(0) 223bool(false) 224Reading 1030 bytes from file, expecting 1024 bytes ... OK 225int(1024) 226bool(true) 227string(32) "950b7457d1deb6332f2fc5d42f3129d6" 228-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 229int(1024) 230bool(false) 231Reading 10 bytes from file, expecting 0 bytes ... OK 232int(1024) 233bool(true) 234 235-- Testing fread() with file having content of type text -- 236-- File opened in mode a+ -- 237-- Reading beyond filesize, expected : 1024 bytes -- 238int(0) 239bool(false) 240Reading 1030 bytes from file, expecting 1024 bytes ... OK 241int(1024) 242bool(true) 243string(32) "e486000c4c8452774f746a27658d87fa" 244-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 245int(1024) 246bool(false) 247Reading 10 bytes from file, expecting 0 bytes ... OK 248int(1024) 249bool(true) 250-- File opened in mode a+b -- 251-- Reading beyond filesize, expected : 1024 bytes -- 252int(0) 253bool(false) 254Reading 1030 bytes from file, expecting 1024 bytes ... OK 255int(1024) 256bool(true) 257string(32) "e486000c4c8452774f746a27658d87fa" 258-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 259int(1024) 260bool(false) 261Reading 10 bytes from file, expecting 0 bytes ... OK 262int(1024) 263bool(true) 264-- File opened in mode a+t -- 265-- Reading beyond filesize, expected : 1024 bytes -- 266int(0) 267bool(false) 268Reading 1030 bytes from file, expecting 1024 bytes ... OK 269int(1024) 270bool(true) 271string(32) "e486000c4c8452774f746a27658d87fa" 272-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 273int(1024) 274bool(false) 275Reading 10 bytes from file, expecting 0 bytes ... OK 276int(1024) 277bool(true) 278-- File opened in mode w+ -- 279-- Reading beyond filesize, expected : 1024 bytes -- 280int(0) 281bool(false) 282Reading 1030 bytes from file, expecting 1024 bytes ... OK 283int(1024) 284bool(true) 285string(32) "e486000c4c8452774f746a27658d87fa" 286-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 287int(1024) 288bool(false) 289Reading 10 bytes from file, expecting 0 bytes ... OK 290int(1024) 291bool(true) 292-- File opened in mode w+b -- 293-- Reading beyond filesize, expected : 1024 bytes -- 294int(0) 295bool(false) 296Reading 1030 bytes from file, expecting 1024 bytes ... OK 297int(1024) 298bool(true) 299string(32) "e486000c4c8452774f746a27658d87fa" 300-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 301int(1024) 302bool(false) 303Reading 10 bytes from file, expecting 0 bytes ... OK 304int(1024) 305bool(true) 306-- File opened in mode w+t -- 307-- Reading beyond filesize, expected : 1024 bytes -- 308int(0) 309bool(false) 310Reading 1030 bytes from file, expecting 1024 bytes ... OK 311int(1024) 312bool(true) 313string(32) "e486000c4c8452774f746a27658d87fa" 314-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 315int(1024) 316bool(false) 317Reading 10 bytes from file, expecting 0 bytes ... OK 318int(1024) 319bool(true) 320-- File opened in mode x+ -- 321-- Reading beyond filesize, expected : 1024 bytes -- 322int(0) 323bool(false) 324Reading 1030 bytes from file, expecting 1024 bytes ... OK 325int(1024) 326bool(true) 327string(32) "e486000c4c8452774f746a27658d87fa" 328-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 329int(1024) 330bool(false) 331Reading 10 bytes from file, expecting 0 bytes ... OK 332int(1024) 333bool(true) 334-- File opened in mode x+b -- 335-- Reading beyond filesize, expected : 1024 bytes -- 336int(0) 337bool(false) 338Reading 1030 bytes from file, expecting 1024 bytes ... OK 339int(1024) 340bool(true) 341string(32) "e486000c4c8452774f746a27658d87fa" 342-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 343int(1024) 344bool(false) 345Reading 10 bytes from file, expecting 0 bytes ... OK 346int(1024) 347bool(true) 348-- File opened in mode x+t -- 349-- Reading beyond filesize, expected : 1024 bytes -- 350int(0) 351bool(false) 352Reading 1030 bytes from file, expecting 1024 bytes ... OK 353int(1024) 354bool(true) 355string(32) "e486000c4c8452774f746a27658d87fa" 356-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 357int(1024) 358bool(false) 359Reading 10 bytes from file, expecting 0 bytes ... OK 360int(1024) 361bool(true) 362 363-- Testing fread() with file having content of type text_with_new_line -- 364-- File opened in mode a+ -- 365-- Reading beyond filesize, expected : 1024 bytes -- 366int(0) 367bool(false) 368Reading 1030 bytes from file, expecting 1024 bytes ... OK 369int(1024) 370bool(true) 371string(32) "b09c8026a64a88d36d4c2f17983964bb" 372-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 373int(1024) 374bool(false) 375Reading 10 bytes from file, expecting 0 bytes ... OK 376int(1024) 377bool(true) 378-- File opened in mode a+b -- 379-- Reading beyond filesize, expected : 1024 bytes -- 380int(0) 381bool(false) 382Reading 1030 bytes from file, expecting 1024 bytes ... OK 383int(1024) 384bool(true) 385string(32) "b09c8026a64a88d36d4c2f17983964bb" 386-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 387int(1024) 388bool(false) 389Reading 10 bytes from file, expecting 0 bytes ... OK 390int(1024) 391bool(true) 392-- File opened in mode a+t -- 393-- Reading beyond filesize, expected : 1024 bytes -- 394int(0) 395bool(false) 396Reading 1030 bytes from file, expecting 1024 bytes ... OK 397int(1024) 398bool(true) 399string(32) "b09c8026a64a88d36d4c2f17983964bb" 400-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 401int(1024) 402bool(false) 403Reading 10 bytes from file, expecting 0 bytes ... OK 404int(1024) 405bool(true) 406-- File opened in mode w+ -- 407-- Reading beyond filesize, expected : 1024 bytes -- 408int(0) 409bool(false) 410Reading 1030 bytes from file, expecting 1024 bytes ... OK 411int(1024) 412bool(true) 413string(32) "b09c8026a64a88d36d4c2f17983964bb" 414-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 415int(1024) 416bool(false) 417Reading 10 bytes from file, expecting 0 bytes ... OK 418int(1024) 419bool(true) 420-- File opened in mode w+b -- 421-- Reading beyond filesize, expected : 1024 bytes -- 422int(0) 423bool(false) 424Reading 1030 bytes from file, expecting 1024 bytes ... OK 425int(1024) 426bool(true) 427string(32) "b09c8026a64a88d36d4c2f17983964bb" 428-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 429int(1024) 430bool(false) 431Reading 10 bytes from file, expecting 0 bytes ... OK 432int(1024) 433bool(true) 434-- File opened in mode w+t -- 435-- Reading beyond filesize, expected : 1024 bytes -- 436int(0) 437bool(false) 438Reading 1030 bytes from file, expecting 1024 bytes ... OK 439int(1024) 440bool(true) 441string(32) "b09c8026a64a88d36d4c2f17983964bb" 442-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 443int(1024) 444bool(false) 445Reading 10 bytes from file, expecting 0 bytes ... OK 446int(1024) 447bool(true) 448-- File opened in mode x+ -- 449-- Reading beyond filesize, expected : 1024 bytes -- 450int(0) 451bool(false) 452Reading 1030 bytes from file, expecting 1024 bytes ... OK 453int(1024) 454bool(true) 455string(32) "b09c8026a64a88d36d4c2f17983964bb" 456-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 457int(1024) 458bool(false) 459Reading 10 bytes from file, expecting 0 bytes ... OK 460int(1024) 461bool(true) 462-- File opened in mode x+b -- 463-- Reading beyond filesize, expected : 1024 bytes -- 464int(0) 465bool(false) 466Reading 1030 bytes from file, expecting 1024 bytes ... OK 467int(1024) 468bool(true) 469string(32) "b09c8026a64a88d36d4c2f17983964bb" 470-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 471int(1024) 472bool(false) 473Reading 10 bytes from file, expecting 0 bytes ... OK 474int(1024) 475bool(true) 476-- File opened in mode x+t -- 477-- Reading beyond filesize, expected : 1024 bytes -- 478int(0) 479bool(false) 480Reading 1030 bytes from file, expecting 1024 bytes ... OK 481int(1024) 482bool(true) 483string(32) "b09c8026a64a88d36d4c2f17983964bb" 484-- Reading beyond filesize when file pointer pointing to EOF, expected : 0 bytes -- 485int(1024) 486bool(false) 487Reading 10 bytes from file, expecting 0 bytes ... OK 488int(1024) 489bool(true) 490Done 491