1<?php
2
3/*
4	This file is part of ActiveLink PHP SYS Package (www.active-link.com).
5	Copyright (c) 2002-2004 by Zurab Davitiani
6
7	You can contact the author of this software via E-mail at
8	hattrick@mailcan.com
9
10	ActiveLink PHP SYS Package is free software; you can redistribute it and/or modify
11	it under the terms of the GNU Lesser General Public License as published by
12	the Free Software Foundation; either version 2.1 of the License, or
13	(at your option) any later version.
14
15	ActiveLink PHP SYS Package is distributed in the hope that it will be useful,
16	but WITHOUT ANY WARRANTY; without even the implied warranty of
17	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18	GNU Lesser General Public License for more details.
19
20	You should have received a copy of the GNU Lesser General Public License
21	along with ActiveLink PHP SYS Package; if not, write to the Free Software
22	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23*/
24
25/**
26  *	File class provides a wrapper around filesystem file functions
27  *	@class		File
28  *	@package	org.active-link.sys
29  *	@author		Zurab Davitiani
30  *	@version	0.4.0
31  */
32
33class File {
34
35	// protected variables
36	var $filename;
37	var $fileOpenMode;
38	var $fileOpenModeRead;
39	var $fileOpenModeReadWrite;
40	var $fileOpenModeWrite;
41	var $fileOpenModeWriteRead;
42	var $fileOpenModeAppend;
43	var $fileOpenModeAppendRead;
44	var $connected;
45	var $handleID;
46
47	/**
48	  *	Constructor accepts filename (optional) and open mode (optional, default "r")
49	  *	If filename is specified, it is opened with the supplied open mode
50	  *	@method 	File
51	  *	@param		optional string filename
52	  *	@param		optional string fileOpenMode
53	  */
54	function File($filename = "", $fileOpenMode = "r") {
55		$success = true;
56		$this->filename = $filename;
57		$this->fileOpenMode = $fileOpenMode;
58		$this->fileOpenModeRead = "r";
59		$this->fileOpenModeReadWrite = "r+";
60		$this->fileOpenModeWrite = "w";
61		$this->fileOpenModeWriteRead = "w+";
62		$this->fileOpenModeAppend = "a";
63		$this->fileOpenModeAppendRead = "a+";
64		$this->connected = false;
65		$this->handleID = false;
66		if($this->filename != "")
67			$success = $this->open($this->filename, $this->fileOpenMode);
68		return $success;
69	}
70
71	/**
72	  *	Closes open file handle, resets filename, and file open mode to defaults
73	  *	@method		close
74	  *	@returns	true if successful, false otherwise
75	  */
76	function close() {
77		$success = fclose($this->handleID);
78		if($success) {
79			$this->filename = "";
80			$this->fileOpenMode = "r";
81			$this->connected = false;
82			$this->handleID = false;
83		}
84		return $success;
85	}
86
87	/**
88	  *	Returns file contents, optionally specify chunk size number of bytes to use per chunk read (default 8192)
89	  *	@method		getContents
90	  *	@param		optional int chunkSize
91	  *	@returns	string file contents if successful, false otherwise
92	  */
93	function getContents($chunkSize = 8192) {
94		if($this->connected) {
95			$fileContents = "";
96			do {
97				$data = fread($this->handleID, $chunkSize);
98				if (strlen($data) == 0) {
99					break;
100				}
101				$fileContents .= $data;
102			} while(true);
103			return $fileContents;
104		}
105		else
106			return false;
107	}
108
109	/**
110	  *	Returns file contents as an array of lines
111	  *	@method		getContentsArray
112	  *	@returns	array file contents lines
113	  */
114	function getContentsArray() {
115		$fileContentsArray = file($this->filename);
116		return $fileContentsArray;
117	}
118
119	/**
120	  *	Opens a file with the supplied open mode
121	  *	@method		open
122	  *	@param		string filename
123	  *	@param		optional string fileOpenMode
124	  *	@returns	true if successful, false otherwise
125	  */
126	function open($filename, $mode = "r") {
127		$success = false;
128		if(!$this->connected) {
129			$this->handleID = @fopen($filename, $mode);
130			if($this->handleID !== false) {
131				$this->filename = $filename;
132				$this->fileOpenMode = $mode;
133				$this->connected = true;
134				$success = true;
135			}
136		}
137		return $success;
138	}
139
140	/**
141	  *	Writes supplied string content to already open file handle
142	  *	@method		write
143	  *	@param		string strContent
144	  *	@returns	number of bytes written if successful, false otherwise
145	  */
146	function write($strContent) {
147		$bytesWritten = fwrite($this->handleID, $strContent, strlen($strContent));
148		return $bytesWritten;
149	}
150
151}
152
153?>
154