2001-06-23 10:30:14 +02:00
|
|
|
|
phpgwapi - VFS Class
|
|
|
|
|
Jason Wies
|
|
|
|
|
June 2001
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
The VFS, or Virtual File System, handles all file system activity for
|
|
|
|
|
phpGroupWare.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
11.. IInnttrroodduuccttiioonn aanndd PPuurrppoossee
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
The latest version of the VFS for phpGroupWare combines actual file
|
|
|
|
|
system manipulation with fully integrated database support. It
|
|
|
|
|
features nearly transparent handling of files and directories, as well
|
|
|
|
|
as files inside and outside the virtual root. This document is
|
|
|
|
|
intended to provide API and application developers with a guide to
|
|
|
|
|
incorporating the VFS into their work.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
22.. BBaassiiccss
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
22..11.. PPrreerreeqquuiissiitteess
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
You must explicitly enable the VFS class. To do this, set
|
|
|
|
|
"enable_vfs_class" to True in $phpgw_info["flags"]. An example:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
$phpgw_info["flags"] = array("currentapp" => "phpwebhosting",
|
|
|
|
|
"noheader" => False,
|
|
|
|
|
"noappheader" => False,
|
|
|
|
|
"enable_vfs_class" => True,
|
|
|
|
|
"enable_browser_class" => True);
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
22..22.. CCoonncceeppttss
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
The VFS in located in phpgwapi/inc/class.vfs.inc.php. You can look
|
|
|
|
|
over it, but I don't suggest trying to understand how it works. It
|
|
|
|
|
isn't necessary to know its internals to use it, but you may find the
|
|
|
|
|
inline comments helpful. The basic things to keep in mind:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
+o Files and directories are synonymous in almost all cases
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
$phpgw->vfs->mv ("file1", "dir/file2");
|
|
|
|
|
$phpgw->vfs->mv ("dir1", "dir/dir1");
|
|
|
|
|
$phpgw->vfs->rm ("file");
|
|
|
|
|
$phpgw->vfs->rm ("dir");
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
All work as you would except them to. The major exception is:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
$phpgw->vfs->touch ("file");
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
vs.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
$phpgw->vfs->mkdir ("dir");
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
+o Users and groups and synonymous
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
As far as the actual paths are concerned, users and groups are the
|
|
|
|
|
same. The VFS has no built in ACL support, so /home/username works
|
|
|
|
|
the same as /home/groupname. See the note on ACL support in the Notes
|
|
|
|
|
section.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
+o You should never have to know the real path of files
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
One of the VFS's responsibilities is to translate paths for you. While
|
|
|
|
|
you certainly _c_a_n operate using full paths, it is much simpler to use
|
|
|
|
|
the virtual paths. For example, instead of using:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
$phpgw->vfs->cp ("/var/www/phpgroupware/files/home/user/file1", "/var/www/phpgroupware/files/home/user/file2", array (RELATIVE_NONE|VFS_REAL, RELATIVE_NONE|VFS_REAL));
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
you might use
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
$phpgw->vfs->cp ("/home/user/file1", "/home/user/file2", array (RELATIVE_NONE, RELATIVE_NONE));
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
(We'll get to the RELATIVE's in a minute.)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
Site administrators should be able to move their files dir around on
|
|
|
|
|
their system and know that everything will continue to work smoothly.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
+o Relativity is _v_i_t_a_l
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
Relativity is a new feature in the VFS, and its importance cannot be
|
|
|
|
|
stressed enough. It will make your life much easier, especially for
|
|
|
|
|
file system intensive applications, but it will take some getting used
|
|
|
|
|
to. If something doesn't work right the first time, chances are great
|
|
|
|
|
it has to do with incorrect relativity settings. We will deal with
|
|
|
|
|
relativity in depth in the Relativity section.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
33.. BBaassiicc FFuunnccttiioonnss
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
These are two functions you'll need to know before we get into
|
|
|
|
|
relativity.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
33..11.. ppaatthh__ppaarrttss (())
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
The job of path_parts () is to translate any given file location into
|
|
|
|
|
its many component parts for any relativity. The prototype for
|
|
|
|
|
path_parts () is:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function path_parts ($string, $relatives = array (RELATIVE_CURRENT), $object = True)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
$string is the path you want to translate, $relatives is the standard
|
|
|
|
|
relativity array, and $object specifies how you would like the return
|
|
|
|
|
value: if $object is True, an object will be returned; if $object is
|
|
|
|
|
False, an array will be returned. I think you'll find the object
|
|
|
|
|
easier to deal with, and we'll be using it throughout this document.
|
|
|
|
|
The most important returned values (but not all) for path_parts ()
|
|
|
|
|
are:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
fake_full_path
|
|
|
|
|
fake_leading_dirs
|
|
|
|
|
fake_extra_path
|
|
|
|
|
fake_name
|
|
|
|
|
real_full_path
|
|
|
|
|
real_leading_dirs
|
|
|
|
|
real_extra_path
|
|
|
|
|
real_name
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
Just like you would think, fake_full_path contains the full virtual
|
|
|
|
|
path of $string, and real_full_path contains the full real path of
|
|
|
|
|
$string. The fake_name and real_name variables should always be the
|
|
|
|
|
same, and contain the final file or directory name. The leading_dirs
|
|
|
|
|
contain everything except the name, and the extra_path is everything
|
|
|
|
|
from the / before "home" to the end of the leading_dirs. To better
|
|
|
|
|
illustrate, here is an example:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
$p = $phpgw->vfs->path_parts ("/home/jason/dir/file", array (RELATIVE_NONE));
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
+o $p->fake_full_path - /home/jason/dir/file
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
+o $p->fake_leading_dirs - /home/jason/dir
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
+o $p->fake_extra_path - home/jason/dir
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
+o $p->fake_name - file
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
+o $p->real_full_path -
|
|
|
|
|
/var/www/phpgroupware/files/home/jason/dir/file
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
+o $p->real_leading_dirs - /var/www/phpgroupware/files/home/jason/dir
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
+o $p->real_extra_path - home/jason/dir
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
+o $p->real_name - file
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
As you can see, path_parts () is a very useful function and will save
|
|
|
|
|
you from doing those darn substr ()'s yourself. For those of you used
|
|
|
|
|
to the prior VFS, note that _g_e_t_a_b_s_o_l_u_t_e_p_a_t_h _(_) _i_s _d_e_p_r_e_c_i_a_t_e_d.
|
|
|
|
|
getabsolutepath () still exists (albeit in a much different form), and
|
|
|
|
|
is responsible for some of the path translation, but it is an _i_n_t_e_r_n_a_l
|
|
|
|
|
function only. Applications should only use path_parts (). We have
|
|
|
|
|
shown you how to use path_parts () so you can experiment with it using
|
|
|
|
|
different paths and relativities as we explore relativity.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
33..22.. ccdd (())
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
Part of the overall goal for the VFS in phpGroupWare is to give the
|
|
|
|
|
user a seamless experience during their session. For example, if they
|
|
|
|
|
upload a file using a file manager to /home/my_group/project1, and
|
|
|
|
|
then go to download an email attachment, the default directory will be
|
|
|
|
|
/home/my_group/project1. This is accomplished using the cd ()
|
|
|
|
|
function. The prototype and examples:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function cd ($target = "/", $relative = True, $relatives = array (RELATIVE_CURRENT))
|
|
|
|
|
$phpgw->vfs->cd ("/"); /* cd to their home directory */
|
|
|
|
|
$phpgw->vfs->cd ("/home/jason/dir", False, array (RELATIVE_NONE)); /* cd to /home/jason/dir */
|
|
|
|
|
$phpgw->vfs->cd ("dir2", True); /* When following the above, cd's to /home/jason/dir/dir2 */
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
If $relatives is True, the $target is simply appended to the current
|
|
|
|
|
path. If you want to know what the current path is, use
|
|
|
|
|
$phpgw->vfs->pwd ().
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
Now you're ready for relativity.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
44.. RReellaattiivviittyy
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
Ok, just one last thing before we get into relativity. You will notice
|
|
|
|
|
throughout the examples the use of $fakebase. $phpgw->vfs>fakebase is
|
|
|
|
|
by default "/home". The old VFS was hard-coded to use "/home", but the
|
|
|
|
|
naming choice for this is now up to administrators. See the "Notes -
|
|
|
|
|
Fakebase directory" section for more information. Throughout the rest
|
|
|
|
|
of this document, you will see $fakebase used in calls to the VFS, and
|
|
|
|
|
/home used in actual paths. _Y_o_u _s_h_o_u_l_d _a_l_w_a_y_s _u_s_e _$_f_a_k_e_b_a_s_e _w_h_e_n
|
|
|
|
|
_m_a_k_i_n_g _a_p_p_l_i_c_a_t_i_o_n_s_. I suggest doing $fakebase =
|
|
|
|
|
$phpgw->vfs->fakebase; right off the bat to keep things neater.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
44..11.. WWhhaatt iiss iitt aanndd hhooww ddooeess iitt wwoorrkk??
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
One of the design challenges for a Virtual File System is to try to
|
|
|
|
|
figure out whether the calling application is referring to a file
|
|
|
|
|
inside or outside the virtual root, and if inside, exactly where. To
|
|
|
|
|
solve this problem, the phpGroupWare VFS uses RELATIVE defines that
|
|
|
|
|
are used in bitmasks passed to each function. The result is that any
|
|
|
|
|
set of different relativities can be used in combination with each
|
|
|
|
|
other. Let's look at a few examples. Say you want to move "logo.png"
|
|
|
|
|
from the user's home directory to the current directory.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
$phpgw->vfs->mv ("logo.png", "", array (RELATIVE_USER, RELATIVE_ALL));
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
RELATIVE_USER means relative to the user's home directory.
|
|
|
|
|
RELATIVE_ALL means relative to the current directory, as set by cd ()
|
|
|
|
|
and as reported by pwd (). So if the current directory was
|
|
|
|
|
"$fakebase/my_group/project1", the call to mv () would be processed
|
|
|
|
|
as:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
MOVE "$fakebase/jason/logo.png" TO "$fakebase/my_group/project1/logo.png"
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
and the actual file system call would be:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
rename ("/var/www/phpgroupware/files/home/jason/logo.php", "/var/www/phpgroupware/files/home/my_group/project1/logo.png");
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
Those used to the old VFS will note that you do not have to translate
|
|
|
|
|
the path beforehand. Let's look at another example. Suppose you were
|
|
|
|
|
moving an email attachment stored in phpGroupWare's temporary
|
|
|
|
|
directory to the "attachments" directory within the user's home
|
|
|
|
|
directory (we're assuming the attachments directory exists). Note that
|
|
|
|
|
the temporary directory is _o_u_t_s_i_d_e the virtual root.
|
|
|
|
|
$phpgw->vfs->mv ("$phpgw_info[server][temp_dir]/$randomdir/$randomfile", "attachments/actual_name.ext", array (RELATIVE_NONE|VFS_REAL, RELATIVE_USER));
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
$randomdir and $randomfile are what the directory and file might be
|
|
|
|
|
called before they are given a proper name by the user, which is
|
|
|
|
|
actual_name.ext in this example. RELATIVE_NONE is the define for using
|
|
|
|
|
full path names. However, RELATIVE_NONE is still relative to the
|
|
|
|
|
virtual root, so we pass along VFS_REAL as well, to say that the file
|
|
|
|
|
is _o_u_t_s_i_d_e the virtual root, somewhere else in the file system. Once
|
|
|
|
|
again, RELATIVE_USER means relative to the user's home directory. So
|
|
|
|
|
the actual file system call might look like this (keep in mind that
|
|
|
|
|
$randomdir and $randomfile are just random strings):
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
rename ("/var/www/phpgroupware/tmp/0ak5adftgh7/jX42sC9M", "/var/www/phpgroupware/files/home/jason/attachments/actual_name.ext");
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
Of course you don't have to know that, nor should you be concerned
|
|
|
|
|
with it; you can take it for granted that the VFS will translate the
|
|
|
|
|
paths correctly. Let's take a look at one more example, this time
|
|
|
|
|
using the RELATIVE_USER_APP define. RELATIVE_USER_APP is used to store
|
|
|
|
|
quasi-hidden application files, similar to the Unix convention of
|
|
|
|
|
~/.appname. It simply appends .appname to the user's home directory.
|
|
|
|
|
For example, if you were making an HTML editor application named
|
|
|
|
|
htmledit, and wanted to keep a backup file in case something goes
|
|
|
|
|
wrong, you would use RELATIVE_USER_APP to store it:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
$phpgw->vfs->write ("file.name~", array (RELATIVE_USER_APP), $contents);
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
This assumes that ~/.htmledit exists of course. The backup file
|
|
|
|
|
"file.name~" would then be written in
|
|
|
|
|
$fakebase/jason/.htmledit/file.name~. Note that storing files like
|
|
|
|
|
this might not be as good of a solution as storing them in the
|
|
|
|
|
temporary directory or in the database. But it is there in case you
|
|
|
|
|
need it.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
44..22.. CCoommpplleettee LLiisstt
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
Here is the complete list of RELATIVE defines, and what they do:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
RREELLAATTIIVVEE__RROOOOTT
|
|
|
|
|
Don't translate the path at all. Just prepends a /. You'll
|
|
|
|
|
probably want to use RELATIVE_NONE though, which handles both
|
|
|
|
|
virtual and real files.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
RREELLAATTIIVVEE__UUSSEERR
|
|
|
|
|
User's home directory
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
RREELLAATTIIVVEE__CCUURRRR__UUSSEERR
|
|
|
|
|
Current user's home directory. If the current directory is
|
|
|
|
|
$fakebase/my_group/project1, this will return is
|
|
|
|
|
$fakebase/my_group
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
RREELLAATTIIVVEE__UUSSEERR__AAPPPP
|
|
|
|
|
Append .appname to the user's home directory, where appname is
|
|
|
|
|
the current application's appname
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
RREELLAATTIIVVEE__PPAATTHH
|
|
|
|
|
DO NOT USE. Relative to the current directory, used in
|
|
|
|
|
RELATIVE_ALL
|
|
|
|
|
RREELLAATTIIVVEE__NNOONNEE
|
|
|
|
|
Not relative to anything. Use this with VFS_REAL for files
|
|
|
|
|
outside the virtual root. Note that using RELATIVE_NONE by
|
|
|
|
|
itself still means relative to the virtual root
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
RREELLAATTIIVVEE__CCUURRRREENNTT
|
|
|
|
|
An alias for the currently set RELATIVE define, or RELATIVE_ALL
|
|
|
|
|
if none is set (see the Defaults section)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
VVFFSS__RREEAALL
|
|
|
|
|
File is outside of the virtual root. Usually used with
|
|
|
|
|
RELATIVE_NONE
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
RREELLAATTIIVVEE__AALLLL
|
|
|
|
|
Relative to the current directory. Use RELATIVE_ALLinstead of
|
|
|
|
|
RELATIVE_PATH
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
44..33.. DDeeffaauullttss
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
You might be thinking to yourself that passing along RELATIVE defines
|
|
|
|
|
with every VFS call is overkill, especially if your application always
|
|
|
|
|
uses the same relativity. The default RELATIVE define for all VFS
|
|
|
|
|
calls is RELATIVE_CURRENT. RELATIVE_CURRENT itself defaults to
|
|
|
|
|
RELATIVE_ALL (relative to the current path), _u_n_l_e_s_s your application
|
|
|
|
|
sets a specific relativity. If your application requires most of the
|
|
|
|
|
work to be done outside of the virtual root, you may wish to set
|
|
|
|
|
RELATIVE_CURRENT to RELATIVE_NONE|VFS_REAL. set_relative () is the
|
|
|
|
|
function to do this. For example:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
$phpgw->vfs->set_relative (RELATIVE_NONE|VFS_REAL);
|
|
|
|
|
$phpgw->vfs->read ("/etc/passwd");
|
|
|
|
|
$phpgw->vfs->cp ("/usr/include/stdio.h", "/tmp/stdio.h");
|
|
|
|
|
$phpgw->vfs->cp ("/usr/share/pixmaps/yes.xpm", "icons/yes.xpm", array (RELATIVE_CURRENT, RELATIVE_USER));
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
You should notice that no relativity array is needed in the other
|
|
|
|
|
calls that refer to files outside the virtual root, but one is needed
|
|
|
|
|
for calls that include files inside the virtual root. Any RELATIVE
|
|
|
|
|
define can be set as the default and works in the same fashion. To
|
|
|
|
|
retrieve the currently set define, use get_relative (). Note that the
|
|
|
|
|
relativity is reset after each page request; that is, it's good only
|
|
|
|
|
for the life of the current page loading, and is not stored in session
|
|
|
|
|
management.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55.. FFuunnccttiioonn rreeffeerreennccee
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..11.. AAbboouutt
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
This function reference is periodically auto-generated from the inline
|
|
|
|
|
comments in phpgwapi/inc/class.vfs.inc.php. For the most up-to-date
|
|
|
|
|
(and nicer looking) reference, see class.vfs.inc.php. This reference
|
|
|
|
|
is created as a separate DocBook document (using the inline2lyx.pl
|
|
|
|
|
script), so it might look a bit out of place.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..22.. ccllaassss vvffss
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: virtual file system
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
description: Authors: Zone, Seek3r
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..33.. ccllaassss ppaatthh__ccllaassss
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: helper class for path_parts
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..44.. vvffss
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: constructor, sets up variables
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function vfs ()
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..55.. sseett__rreellaattiivvee
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: Set path relativity
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $mask Relative bitmask (see RELATIVE_ defines)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function set_relative ($mask)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..66.. ggeett__rreellaattiivvee
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: Return relativity bitmask
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
discussion: Returns relativity bitmask, or the default of "completely
|
|
|
|
|
relative" if unset
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function get_relative ()
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..77.. ssaanniittiizzee
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: Removes leading .'s from $string
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
discussion: You should not pass all filenames through sanitize ()
|
|
|
|
|
unless you plan on rejecting
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
.files. Instead, pass the name through securitycheck () first, and if
|
|
|
|
|
it fails,
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
pass it through sanitize
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $string string to sanitize
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: $string without it's leading .'s
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function sanitize ($string)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..88.. sseeccuurriittyycchheecckk
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: Security check function
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
discussion: Checks for basic violations such as ..
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
If securitycheck () fails, run your string through vfs->sanitize ()
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $string string to check security of
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: Boolean True/False. True means secure, False means insecure
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function securitycheck ($string)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..99.. ddbb__cclleeaann
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: Clean $string for use in database queries
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $string String to clean
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: Cleaned version of $string
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function db_clean ($string)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..1100.. ppaatthh__ppaarrttss
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: take a real or fake pathname and return an array of its
|
|
|
|
|
component parts
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $string full real or fake path
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $relatives Relativity array
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $object True returns an object instead of an array
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: $rarray/$robject Array or object containing the fake and real
|
|
|
|
|
component parts of the path
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
discussion: Returned values are:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
mask
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
outside
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
fake_full_path
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
fake_leading_dirs
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
fake_extra_path
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
fake_name
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
real_full_path
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
real_leading_dirs
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
real_extra_path
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
real_name
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
fake_full_path_clean
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
fake_leading_dirs_clean
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
fake_extra_path_clean
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
fake_name_clean
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
real_full_path_clean
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
real_leading_dirs_clean
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
real_extra_path_clean
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
real_name_clean
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
"clean" values are run through vfs->db_clean () and
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
are safe for use in SQL queries that use key='value'
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
They should be used ONLY for SQL queries, so are used
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
mostly internally
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
mask is either RELATIVE_NONE or RELATIVE_NONE|VFS_REAL,
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
and is used internally
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
outside is boolean, True if $relatives contains VFS_REAL
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function path_parts ($string, $relatives = array (RELATIVE_CURRENT), $object = True)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..1111.. ggeettaabbssoolluutteeppaatthh
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: get the absolute path
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $target defaults to False, directory/file to get path of,
|
|
|
|
|
relative to $relatives[0]
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $mask Relativity bitmask (see RELATIVE_ defines).
|
|
|
|
|
RELATIVE_CURRENT means use $this->relative
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $fake Returns the "fake" path, ie /home/user/dir/file (not
|
|
|
|
|
always possible. use path_parts () instead)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: $basedir Full fake or real path
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function getabsolutepath ($target = False, $relatives = array (RELATIVE_CURRENT), $fake = True)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..1122.. ccdd
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: Change directory
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
discussion: To cd to the files root "/", use cd ("/", False, array
|
|
|
|
|
(RELATIVE_NONE));
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $target default "/". directory to cd into. if "/" and
|
|
|
|
|
$relative is True, uses "/home/<working_lid>";
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $relative default True/relative means add target to current
|
|
|
|
|
path, else pass $relative as mask to getabsolutepath()
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function cd ($target = "/", $relative = True, $relatives = array (RELATIVE_CURRENT))
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..1133.. ppwwdd
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: current working dir
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $full default True returns full fake path, else just the extra
|
|
|
|
|
dirs (false strips the leading /)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: $currentdir currentdir
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function pwd ($full = True)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..1144.. rreeaadd
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: return file contents
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $file filename
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $relatives Relativity array
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: $contents Contents of $file, or False if file cannot be read
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function read ($file, $relatives = array (RELATIVE_CURRENT))
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..1155.. wwrriittee
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: write to a file
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $file file name
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $relatives Relativity array
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $contents contents
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: Boolean True/False
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function write ($file, $relatives = array (RELATIVE_CURRENT), $contents)
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..1166.. ttoouucchh
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: Create blank file $file or set the modification time and
|
|
|
|
|
modified by of $file to current time and user
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $file File to touch or set modifies
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $relatives Relativity array
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: Boolean True/False
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function touch ($file, $relatives = array (RELATIVE_CURRENT))
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..1177.. ccpp
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: copy file
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $from from file/directory
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $to to file/directory
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $relatives Relativity array
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: boolean True/False
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function cp ($from, $to, $relatives = array (RELATIVE_CURRENT, RELATIVE_CURRENT))
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..1188.. mmvv
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: move file/directory
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $from from file/directory
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $to to file/directory
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $relatives Relativity array
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: boolean True/False
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function mv ($from, $to, $relatives = array (RELATIVE_CURRENT, RELATIVE_CURRENT))
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..1199.. mmoovvee
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: shortcut to mv
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function move ($from, $to, $relatives = array (RELATIVE_CURRENT, RELATIVE_CURRENT))
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..2200.. rrmm
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: delete file/directory
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $string file/directory to delete
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $relatives Relativity array
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: boolean True/False
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function rm ($string, $relatives = array (RELATIVE_CURRENT))
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..2211.. ddeelleettee
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: shortcut to rm
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function delete ($string, $relatives = array (RELATIVE_CURRENT))
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..2222.. mmkkddiirr
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: make a new directory
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $dir Directory name
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $relatives Relativity array
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: boolean True on success
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function mkdir ($dir, $relatives = array (RELATIVE_CURRENT))
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..2233.. sseett__aattttrriibbuutteess
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: Update database entry for $file with the attributes in
|
|
|
|
|
$attributes
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $file file/directory to update
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $relatives Relativity array
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
param: $attributes keyed array of attributes. key is attribute name,
|
|
|
|
|
value is attribute value
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
result: Boolean True/False
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
discussion: Valid attributes are:
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
owner_id
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
createdby_id
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
modifiedby_id
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
created
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
modified
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
size
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
mime_type
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
deleteable
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
comment
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
app
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
function set_attributes ($file, $relatives = array (RELATIVE_CURRENT), $attributes = array ())
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
55..2244.. ccoorrrreecctt__aattttrriibbuutteess
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
2001-06-23 10:30:14 +02:00
|
|
|
|
abstract: Set the correct attributes for $string (e.g. owner)
|
|
|
|
|
|
|
|
|
|
param: $string File/directory to correct attributes of
|
|
|
|
|
|
|
|
|
|
param: $relatives Relativity array
|
|
|
|
|
|
|
|
|
|
result: Boolean True/False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function correct_attributes ($string, $relatives = array (RELATIVE_CURRENT))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55..2255.. ffiillee__ttyyppee
|
|
|
|
|
|
|
|
|
|
abstract: return file/dir type (MIME or other)
|
|
|
|
|
|
|
|
|
|
param: $file File or directory path (/home/user/dir/dir2/dir3,
|
|
|
|
|
/home/user/dir/dir2/file)
|
|
|
|
|
|
|
|
|
|
param: $relatives Relativity array
|
|
|
|
|
|
|
|
|
|
result: MIME type, "Directory", or nothing if MIME type is not known
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function file_type ($file, $relatives = array (RELATIVE_CURRENT))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55..2266.. ffiillee__eexxiissttss
|
|
|
|
|
|
|
|
|
|
abstract: check if file/directory exists
|
|
|
|
|
|
|
|
|
|
param: $string file/directory to check existance of
|
|
|
|
|
|
|
|
|
|
param: $relatives Relativity array
|
|
|
|
|
|
|
|
|
|
result: Boolean True/False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function file_exists ($string, $relatives = array (RELATIVE_CURRENT))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55..2277.. cchheecckkppeerrmmss
|
|
|
|
|
|
|
|
|
|
abstract: Check if you have write access to create files in $dir
|
|
|
|
|
|
|
|
|
|
discussion: This isn't perfect, because vfs->touch () returns True
|
|
|
|
|
even
|
|
|
|
|
|
|
|
|
|
if only the database entry worked. ACLs need to be
|
|
|
|
|
|
|
|
|
|
implemented for better permission checking. It's
|
|
|
|
|
|
|
|
|
|
also pretty slow, so I wouldn't recommend using it
|
|
|
|
|
|
|
|
|
|
often
|
|
|
|
|
|
|
|
|
|
param: $dir Directory to check access of
|
|
|
|
|
|
|
|
|
|
param: $relatives Relativity array
|
|
|
|
|
|
|
|
|
|
result: Boolean True/False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function checkperms ($dir, $relatives = array (RELATIVE_CURRENT))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55..2288.. llss
|
|
|
|
|
|
|
|
|
|
abstract: get directory listing
|
|
|
|
|
|
|
|
|
|
discussion: Note: the entries are not guaranteed to be returned in any
|
|
|
|
|
logical order
|
|
|
|
|
|
|
|
|
|
param: $dir Directory
|
|
|
|
|
|
|
|
|
|
param: $relatives Relativity array
|
|
|
|
|
|
|
|
|
|
param: $checksubdirs Boolean, recursively list all sub directories as
|
|
|
|
|
well?
|
|
|
|
|
|
|
|
|
|
param: $mime_type Only return entries matching MIME-type $mime_type.
|
|
|
|
|
Can be "Directory" or "\" for those without MIME types
|
|
|
|
|
|
|
|
|
|
param: $nofiles Boolean. True means you want to return just the
|
|
|
|
|
information about the directory $dir. If $dir is a file, $nofiles is
|
|
|
|
|
implied. This is the equivalent of 'ls -ld $dir'
|
|
|
|
|
|
|
|
|
|
result: array of arrays. Subarrays contain full info for each
|
|
|
|
|
file/dir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function ls ($dir = False, $relatives = array (RELATIVE_CURRENT), $checksubdirs = True, $mime_type = False, $nofiles = False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55..2299.. ddiirr
|
|
|
|
|
|
|
|
|
|
abstract: shortcut to ls
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function dir ($dir = False, $relatives = array (RELATIVE_CURRENT), $checksubdirs = True, $mime_type = False, $nofiles = False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66.. NNootteess
|
|
|
|
|
|
|
|
|
|
66..11.. DDaattaabbaassee
|
|
|
|
|
|
|
|
|
|
Data about the files and directories within the virtual root is kept
|
|
|
|
|
in the SQL database. Currently, this information includes:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+o File ID (used internally, primary key for table)
|
|
|
|
|
|
|
|
|
|
+o Owner ID (phpGW account_id)
|
|
|
|
|
|
|
|
|
|
+o Created by ID (phpGW account_id)
|
|
|
|
|
|
|
|
|
|
+o Modified by ID (phpGW account_id)
|
|
|
|
|
|
|
|
|
|
+o Created (date)
|
|
|
|
|
|
|
|
|
|
+o Modified (date)
|
|
|
|
|
|
|
|
|
|
+o Size (bytes)
|
|
|
|
|
|
|
|
|
|
+o MIME type
|
|
|
|
|
|
|
|
|
|
+o Deleteable (Y/N/Other?)
|
|
|
|
|
|
|
|
|
|
+o Comment
|
|
|
|
|
|
|
|
|
|
+o App (appname of application that created the file)
|
|
|
|
|
|
|
|
|
|
+o Directory (directory the file or directory is in)
|
|
|
|
|
|
|
|
|
|
+o Name (name of file or directory)
|
|
|
|
|
|
|
|
|
|
The internal names of these (the database column names) are stored in
|
|
|
|
|
the $phpgw->vfs->attributes array, which is useful for loops, and is
|
|
|
|
|
guaranteed to be up-to-date.
|
|
|
|
|
Note that no information is kept about files outside the virtual root.
|
|
|
|
|
If a file is moved outside, all records of it are delete from the
|
|
|
|
|
database. If a file is moved into the virtual root, some information,
|
|
|
|
|
specifically MIME-type, is not stored in the database. The vital
|
|
|
|
|
information has defaults: owner is based on where the file is being
|
|
|
|
|
stored; size is correctly read; deleteable is set to Y.
|
|
|
|
|
|
|
|
|
|
66..22.. AACCLL ssuuppppoorrtt
|
|
|
|
|
|
|
|
|
|
Because of the many different ways the VFS can be used, complete ACL
|
|
|
|
|
support is not built in. There is a bit of access control built in,
|
|
|
|
|
just because of the way database queries are made. However, that is a
|
|
|
|
|
discussion beyond the scope of this document. Full ACL support may be
|
|
|
|
|
added at a later time. For now, it is fairly easy to add basic access
|
|
|
|
|
control to your application by matching path expressions. The VFS
|
|
|
|
|
always follows the same naming convention of $fakebase/userorgroup.
|
|
|
|
|
So if you need to check if a user has access to
|
|
|
|
|
$fakebase/whatever/dir/file, you need only know if they their username
|
|
|
|
|
is 'whatever' or if they belong to the group 'whatever', and that the
|
|
|
|
|
group has access to your application. Here is an example from
|
|
|
|
|
PHPWebHosting:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###
|
|
|
|
|
# First we get their memberships
|
|
|
|
|
###
|
|
|
|
|
|
|
|
|
|
$memberships = $phpgw->accounts->memberships ($account_id);
|
|
|
|
|
|
|
|
|
|
###
|
|
|
|
|
# We determine if they're in their home directory or a group's directory
|
|
|
|
|
# If they request a group's directory, we ensure they have access to the group,
|
|
|
|
|
# and the group has access to the app
|
|
|
|
|
###
|
|
|
|
|
|
|
|
|
|
if ((preg_match ("+^$fakebase\/(.*)(\/|$)+U", $path, $matches)) && $matches[1] != $account_lid)
|
|
|
|
|
{
|
|
|
|
|
$phpgw->vfs->working_id = $phpgw->accounts->name2id ($matches[1]);
|
|
|
|
|
reset ($memberships);
|
|
|
|
|
while (list ($num, $group_array) = each ($memberships))
|
|
|
|
|
{
|
|
|
|
|
if ($matches[1] == $group_array["account_name"])
|
|
|
|
|
{
|
|
|
|
|
$group_ok = 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!$group_ok)
|
|
|
|
|
{
|
|
|
|
|
echo $phpgw->common->error_list (array ("You do not have access to group/directory $matches[1]"));
|
|
|
|
|
exit;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
You should also check if the group has access to your appilcation.
|
|
|
|
|
|
|
|
|
|
66..33.. FFuunnccttiioonn aalliiaasseess
|
|
|
|
|
|
|
|
|
|
You might have noticed there are some functions that just pass the
|
|
|
|
|
arguments on to other functions. These are provided in part because of
|
|
|
|
|
legacy and in part for convenience. You can use either. Here is the
|
|
|
|
|
list (alias -> actual):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+o copy -> cp
|
|
|
|
|
|
|
|
|
|
+o move -> rm
|
|
|
|
|
|
|
|
|
|
+o delete -> rm
|
|
|
|
|
|
|
|
|
|
+o dir -> ls
|
|
|
|
|
|
|
|
|
|
66..44.. FFaakkeebbaassee ddiirreeccttoorryy ((cchhaannggiinngg //hhoommee))
|
|
|
|
|
|
|
|
|
|
The old VFS was hard-coded to use "/home" as the fake base directory,
|
|
|
|
|
even though the user never saw it. With the new system, crafty
|
|
|
|
|
administrators may wish to change "/home" to something else, say
|
|
|
|
|
"/users" or "/public_html". The fake base directory name is stored in
|
|
|
|
|
$phpgw->vfs->fakebase, and changing it will transparently change it
|
|
|
|
|
throughout the VFS and all applications. However, this must be done
|
|
|
|
|
_b_e_f_o_r_e any data is in the VFS database. If you wish to change it
|
|
|
|
|
afterwords, you'll have to manually update the database, replacing the
|
|
|
|
|
old value with the new value. _A_p_p_l_i_c_a_t_i_o_n _p_r_o_g_r_a_m_m_e_r_s _n_e_e_d _t_o
|
|
|
|
|
_r_e_c_o_g_n_i_z_e _t_h_a_t _/_h_o_m_e _i_s _n_o_t _a_b_s_o_l_u_t_e_, _a_n_d _u_s_e _$_p_h_p_g_w_-_>_v_f_s_-_>_f_a_k_e_b_a_s_e
|
|
|
|
|
_i_n_s_t_e_a_d. I suggest setting $fakebase = $phpgw->vfs->fakebase; right
|
|
|
|
|
off the bat to keep things neater.
|
|
|
|
|
|
|
|
|
|
77.. AAbboouutt tthhiiss DDooccuummeenntt
|
|
|
|
|
|
|
|
|
|
77..11.. CCooppyyrriigghhtt aanndd LLiicceennssee
|
|
|
|
|
|
|
|
|
|
Copyright (c) 2001 Jason Wies
|
|
|
|
|
|
|
|
|
|
Permission is granted to copy, distribute and/or modify this document
|
|
|
|
|
under the terms of the GNU Free Documentation License, Version 1.1 or
|
|
|
|
|
any later version published by the Free Software Foundation; with no
|
|
|
|
|
Invarient Sections, with no Front-Cover Texts, and no Back-Cover
|
|
|
|
|
Texts.
|
|
|
|
|
|
|
|
|
|
A copy of the license is available at
|
|
|
|
|
http://www.gnu.org/copyleft/fdl.html
|
|
|
|
|
<http://www.gnu.org/copyleft/fdl.html>.
|
|
|
|
|
|
|
|
|
|
77..22.. HHiissttoorryy
|
|
|
|
|
|
|
|
|
|
Original document released in June 2001 by Jason Wies.
|
|
|
|
|
|
|
|
|
|
77..33.. CCoonnttrriibbuuttiinngg
|
|
|
|
|
|
|
|
|
|
Contributions are always welcome. Please send to the current
|
|
|
|
|
maintainer, Jason Wies, zone@users.sourceforge.net
|
|
|
|
|
<mailto:zone@users.sourceforge.net>.
|
2001-06-20 10:16:13 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|